diff --git a/examples/SConscript b/examples/SConscript
new file mode 100644
index 0000000..748f771
--- /dev/null
+++ b/examples/SConscript
@@ -0,0 +1,70 @@
+# Copyright (c) 2017 ARM Limited.
+#
+# SPDX-License-Identifier: MIT
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+import SCons
+import os.path
+
+Import('env')
+Import('arm_compute_a')
+Import('arm_compute_so')
+
+if env['opencl']:
+    Import('opencl')
+
+examples_env = env.Clone()
+
+examples_env.Append(CPPPATH = ["#"])
+examples_env.Append(LIBPATH = ["#build/%s" % env['build_dir']])
+examples_env.Append(LIBPATH = ["#build/%s/opencl-1.2-stubs" % env['build_dir']])
+
+# Build examples
+utils = examples_env.Object("../utils/Utils.cpp")
+
+if env['os'] in ['android', 'bare_metal']:
+    arm_compute_lib = arm_compute_a
+    arm_compute_dependency = arm_compute_a
+else:
+    arm_compute_lib = "arm_compute"
+    arm_compute_dependency = arm_compute_so
+
+if env['opencl'] and env['neon']:
+    for file in Glob("./neoncl_*.cpp"):
+        example = os.path.basename(os.path.splitext(str(file))[0])
+        prog = examples_env.Program(example, ["{}.cpp".format(example), utils], LIBS = [arm_compute_lib, "OpenCL"])
+        Depends(prog, [arm_compute_dependency, opencl])
+        alias = examples_env.Alias(example, prog)
+        Default(alias)
+
+if env['opencl']:
+    for file in Glob("./cl_*.cpp"):
+        example = os.path.basename(os.path.splitext(str(file))[0])
+        prog = examples_env.Program(example, ["{}.cpp".format(example), utils], LIBS = [arm_compute_lib, "OpenCL"])
+        Depends(prog, [arm_compute_dependency, opencl])
+        alias = examples_env.Alias(example, prog)
+        Default(alias)
+
+if env['neon']:
+    for file in Glob("./neon_*.cpp"):
+        example = os.path.basename(os.path.splitext(str(file))[0])
+        prog = examples_env.Program(example, ["{}.cpp".format(example), utils], LIBS = [arm_compute_lib])
+        Depends(prog, arm_compute_dependency)
+        alias = examples_env.Alias(example, prog)
+        Default(alias)
