Bazel and CMake optional fp16 support

Resolves ONCPUML-1274

Signed-off-by: David Svantesson <david.svantesson@arm.com>
Change-Id: I1d189596cfce5be87a18c8065d683700b3c9960f
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9745
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: SiCong Li <sicong.li@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
diff --git a/.bazelrc b/.bazelrc
index d6a5e62..1dbbedc 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -38,3 +38,4 @@
 build --flag_alias=cppthreads=//:cppthreads
 build --flag_alias=enable_bf16_validation=//:enable_bf16_validation
 build --flag_alias=enable_sve_validation=//:enable_sve_validation
+build --flag_alias=arch=//:arch
diff --git a/BUILD.bazel b/BUILD.bazel
index 582a979..3a7d941 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -78,6 +78,15 @@
     visibility = ["//visibility:public"],
 )
 
+string_flag(
+    name = "arch",
+    build_setting_default = "armv8-a",
+    values = [
+        "armv8-a",
+        "armv8.2-a+fp16"
+    ]
+)
+
 #---------------------------------------------------------------------
 # Flag variables
 config_setting(
@@ -129,6 +138,20 @@
     },
 )
 
+config_setting(
+    name = "arch_armv8-a",
+    flag_values = {
+        "arch": "armv8-a"
+    }
+)
+
+config_setting(
+    name = "arch_armv8.2-a+fp16",
+    flag_values = {
+        "arch": "armv8.2-a+fp16"
+    }
+)
+
 
 #---------------------------------------------------------------------
 # Common defines used for all targets
@@ -138,9 +161,7 @@
                   "ENABLE_NEON",
                   "ARM_COMPUTE_CPU_ENABLED",
                   "ARM_COMPUTE_ENABLE_NEON",
-                  "ARM_COMPUTE_ENABLE_FP16",
                   "ARM_COMPUTE_ENABLE_I8MM",
-                  "ENABLE_FP16_KERNELS",
                   "ENABLE_FP32_KERNELS",
                   "ENABLE_QASYMM8_KERNELS",
                   "ENABLE_QASYMM8_SIGNED_KERNELS",
@@ -148,7 +169,7 @@
                   "ENABLE_INTEGER_KERNELS",
                   "ENABLE_NHWC_KERNELS",
                   "ENABLE_NCHW_KERNELS",
-                  "DARM_COMPUTE_GRAPH_ENABLED",
+                  "ARM_COMPUTE_GRAPH_ENABLED",
                   "ARM_COMPUTE_ENABLE_SVEF32MM",
                   "ARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS",
                   "_GLIBCXX_USE_NANOSLEEP"
@@ -170,6 +191,11 @@
               select({
                   "//:openmp_flag": ["ARM_COMPUTE_OPENMP_SCHEDULER"],
                   "//conditions:default": [],
+              }) +
+              select({
+                  "//:arch_armv8-a": [],
+                  "//:arch_armv8.2-a+fp16": ["ENABLE_FP16_KERNELS", "ARM_COMPUTE_ENABLE_FP16"],
+                  "//conditions:default": [],
               }),
     visibility = ["//visibility:public"],
 )
@@ -178,9 +204,9 @@
 # Rule for creating file "arm_compute_version.embed"
 genrule(
     name = "create_version_file",
-    srcs = [".git/HEAD"],
+    srcs = ["SConscript"],
     outs = ["arm_compute_version.embed"],
-    cmd = "$(location //scripts:print_version_file) bazel-build-options `cat $(location :.git/HEAD)` > $@",
+    cmd = "$(location //scripts:print_version_file) 'n/a' 'n/a' 'true' > $@",
     tools = ["//scripts:print_version_file"],
     visibility = ["//visibility:public"],
 )
@@ -191,9 +217,11 @@
 cc_library(
     name = "arm_compute_graph",
     srcs = ["//src:arm_compute_graph_srcs"],
-    copts = [
-                "-march=armv8.2-a+fp16",
-            ] + select({
+    copts = [] + select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }) + select({
                 "//:debug_flag": [
                     "-O0",
                     "-g",
@@ -211,7 +239,7 @@
             }),
     visibility = ["//visibility:public"],
     deps = [
-        "arm_compute_core",
+        "arm_compute",
         "//:common_defines",
         "//arm_compute:graph_headers",
     ],
@@ -323,8 +351,8 @@
 # Core and Runtime library
 
 cc_library(
-    name = "arm_compute_core",
-    srcs = ["//src:arm_compute_core_srcs"],
+    name = "arm_compute",
+    srcs = ["//src:arm_compute_srcs"],
     hdrs = glob([
         "core/NEON/kernels/**/*.h",
         "core/NEON/kernels/**/*.hpp",
@@ -332,9 +360,11 @@
     ]) + [
         "//:create_version_file",
     ],
-    copts = [
-                "-march=armv8.2-a+fp16",
-            ] + select({
+    copts = [] + select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }) + select({
                 "//:debug_flag": [
                     "-O0",
                     "-g",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 94ae15f..4f8fc4a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -185,13 +185,13 @@
 # ---------------------------------------------------------------------
 # Core Library
 
-add_library(arm_compute_core "")
-target_compile_options(arm_compute_core PRIVATE "-march=armv8.2-a+fp16")
-target_compile_definitions(arm_compute_core PRIVATE ARM_COMPUTE_ENABLE_BF16)
-target_compile_definitions(arm_compute_core PRIVATE ENABLE_SVE)
-target_compile_definitions(arm_compute_core PRIVATE ARM_COMPUTE_ENABLE_SVE)
+add_library(arm_compute "")
+target_compile_options(arm_compute PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+target_compile_definitions(arm_compute PRIVATE ARM_COMPUTE_ENABLE_BF16)
+target_compile_definitions(arm_compute PRIVATE ENABLE_SVE)
+target_compile_definitions(arm_compute PRIVATE ARM_COMPUTE_ENABLE_SVE)
 target_include_directories(
-  arm_compute_core
+  arm_compute
   PUBLIC $<INSTALL_INTERFACE:include>
          $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
          ${CMAKE_CURRENT_SOURCE_DIR}
@@ -202,17 +202,17 @@
           src/core/NEON/kernels/convolution/common
           src/core/NEON/kernels/arm_conv/depthwise
           src/core/NEON/kernels/convolution/winograd)
-target_compile_options(arm_compute_core PUBLIC ${COMMON_CXX_FLAGS})
+target_compile_options(arm_compute PUBLIC ${COMMON_CXX_FLAGS})
 
-add_library(ArmCompute::Core ALIAS arm_compute_core)
+add_library(ArmCompute::Core ALIAS arm_compute)
 target_link_libraries(
-  arm_compute_core PUBLIC arm_compute_sve arm_compute_sve2)
+  arm_compute PUBLIC arm_compute_sve arm_compute_sve2)
 
 # ---------------------------------------------------------------------
 # Graph Library
 
 add_library(arm_compute_graph "")
-target_compile_options(arm_compute_graph PRIVATE "-march=armv8.2-a+fp16")
+target_compile_options(arm_compute_graph PRIVATE "-march=${ARM_COMPUTE_ARCH}")
 target_compile_definitions(arm_compute_graph PRIVATE ENABLE_SVE)
 target_compile_definitions(arm_compute_graph PRIVATE ARM_COMPUTE_ENABLE_SVE)
 # add_subdirectory(src/graph)
@@ -244,7 +244,7 @@
   # target_compile_options(arm_compute_validation_framework PRIVATE
   # "-march=armv8.2-a")
   target_compile_options(arm_compute_validation_framework
-                        PRIVATE "-march=armv8.2-a+fp16")
+                        PRIVATE "-march=${ARM_COMPUTE_ARCH}")
 
   add_subdirectory(tests)
   target_include_directories(
@@ -256,13 +256,13 @@
                         PUBLIC ${COMMON_CXX_FLAGS})
                         target_link_libraries(
                           arm_compute_validation_framework
-      PUBLIC arm_compute_core arm_compute_graph)
+      PUBLIC arm_compute arm_compute_graph)
 
   # ---------------------------------------------------------------------
   # Validation Binary
 
   add_executable(arm_compute_validation "")
-  target_compile_options(arm_compute_validation PRIVATE "-march=armv8.2-a+fp16")
+  target_compile_options(arm_compute_validation PRIVATE "-march=${ARM_COMPUTE_ARCH}")
   if(ARM_COMPUTE_ENABLE_BF16_VALIDATION)
     target_compile_definitions(arm_compute_validation PRIVATE ARM_COMPUTE_ENABLE_BF16)
   endif()
@@ -277,7 +277,7 @@
                                       "${CMAKE_BINARY_DIR}/validation")
   target_link_libraries(
     arm_compute_validation
-    PUBLIC arm_compute_core arm_compute_graph arm_compute_validation_framework
+    PUBLIC arm_compute arm_compute_graph arm_compute_validation_framework
            arm_compute_sve)
   target_link_directories(arm_compute_validation PUBLIC tests)
 
@@ -285,7 +285,7 @@
   # Benchmark Binary
 
   add_executable(arm_compute_benchmark)
-  target_compile_options(arm_compute_benchmark PRIVATE "-march=armv8.2-a+fp16")
+  target_compile_options(arm_compute_benchmark PRIVATE "-march=${ARM_COMPUTE_ARCH}")
 
   add_subdirectory(tests/benchmark)
   target_compile_options(arm_compute_benchmark PUBLIC ${COMMON_CXX_FLAGS})
@@ -293,7 +293,7 @@
     arm_compute_benchmark PROPERTIES RUNTIME_OUTPUT_DIRECTORY
                                      "${CMAKE_BINARY_DIR}/validation")
   target_link_libraries(
-    arm_compute_benchmark PUBLIC arm_compute_core arm_compute_graph
+    arm_compute_benchmark PUBLIC arm_compute arm_compute_graph
                                  arm_compute_validation_framework)
 
 endif() # ARM_COMPUTE_BUILD_TESTING
@@ -309,22 +309,22 @@
     add_executable(
       ${test_name} "examples/${test_name}.cpp" utils/Utils.cpp
                    utils/GraphUtils.cpp utils/CommonGraphOptions.cpp)
-    target_compile_options(${test_name} PRIVATE "-march=armv8.2-a+fp16")
+    target_compile_options(${test_name} PRIVATE "-march=${ARM_COMPUTE_ARCH}")
     set_target_properties(
       ${test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
                               "${CMAKE_BINARY_DIR}/examples")
-    target_link_libraries(${test_name} PUBLIC arm_compute_core
+    target_link_libraries(${test_name} PUBLIC arm_compute
                                               arm_compute_graph arm_compute_sve)
   endforeach()
 
   # NEON Examples
   foreach(test_name ${EXAMPLE_NEON_NAMES})
     add_executable(${test_name} "examples/${test_name}.cpp" utils/Utils.cpp)
-    target_compile_options(${test_name} PRIVATE "-march=armv8.2-a+fp16")
+    target_compile_options(${test_name} PRIVATE "-march=${ARM_COMPUTE_ARCH}")
     set_target_properties(
       ${test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
                               "${CMAKE_BINARY_DIR}/examples")
-    target_link_libraries(${test_name} PUBLIC arm_compute_core)
+    target_link_libraries(${test_name} PUBLIC arm_compute)
   endforeach()
 
 endif() # ARM_COMPUTE_BUILD_EXAMPLES
diff --git a/cmake/Options.cmake b/cmake/Options.cmake
index a4ef135..bc51cbb 100644
--- a/cmake/Options.cmake
+++ b/cmake/Options.cmake
@@ -43,6 +43,8 @@
   add_definitions(-DARM_COMPUTE_LOGGING_ENABLED)
 endif()
 
+set(ARM_COMPUTE_ARCH armv8-a CACHE STRING "Architecture to use")
+
 # ---------------------------------------------------------------------
 # Backends
 
@@ -52,9 +54,7 @@
 option(ENABLE_NEON "Enable Arm® Neon™ support" ON)
 option(ARM_COMPUTE_CPU_ENABLED "" ON)
 option(ARM_COMPUTE_ENABLE_NEON "" ON)
-option(ARM_COMPUTE_ENABLE_FP16 "" ON)
 option(ARM_COMPUTE_ENABLE_I8MM "" ON)
-option(ENABLE_FP16_KERNELS "" ON)
 option(ENABLE_FP32_KERNELS "" ON)
 option(ENABLE_QASYMM8_KERNELS "" ON)
 option(ENABLE_QASYMM8_SIGNED_KERNELS "" ON)
@@ -65,6 +65,8 @@
 option(ARM_COMPUTE_GRAPH_ENABLED "" ON)
 option(ARM_COMPUTE_ENABLE_SVEF32MM "" ON)
 option(ARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS "" ON)
+option(ENABLE_FP16_KERNELS "" OFF)
+option(ARM_COMPUTE_ENABLE_FP16 "" OFF)
 
 if(ENABLE_NEON)
   add_definitions(-DENABLE_NEON)
diff --git a/examples/BUILD.bazel b/examples/BUILD.bazel
index f2a22db..ad9abf5 100644
--- a/examples/BUILD.bazel
+++ b/examples/BUILD.bazel
@@ -26,10 +26,14 @@
 cc_binary(
     name = "neon_cnn",
     srcs = ["neon_cnn.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -39,10 +43,14 @@
 cc_binary(
     name = "neon_copy_objects",
     srcs = ["neon_copy_objects.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -52,10 +60,14 @@
 cc_binary(
     name = "neon_gemm_qasymm8",
     srcs = ["neon_gemm_qasymm8.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -65,10 +77,14 @@
 cc_binary(
     name = "neon_permute",
     srcs = ["neon_permute.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -78,10 +94,14 @@
 cc_binary(
     name = "neon_scale",
     srcs = ["neon_scale.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -91,10 +111,14 @@
 cc_binary(
     name = "neon_sgemm",
     srcs = ["neon_sgemm.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -107,10 +131,14 @@
 cc_binary(
     name = "graph_alexnet",
     srcs = ["graph_alexnet.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -120,10 +148,14 @@
 cc_binary(
     name = "graph_deepspeech_v0_4_1",
     srcs = ["graph_deepspeech_v0_4_1.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -136,10 +168,14 @@
         "graph_edsr.cpp",
         "graph_edsr.h",
     ],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -149,10 +185,14 @@
 cc_binary(
     name = "graph_googlenet",
     srcs = ["graph_googlenet.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -162,10 +202,14 @@
 cc_binary(
     name = "graph_inception_resnet_v1",
     srcs = ["graph_inception_resnet_v1.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -175,10 +219,14 @@
 cc_binary(
     name = "graph_inception_resnet_v2",
     srcs = ["graph_inception_resnet_v2.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -188,10 +236,14 @@
 cc_binary(
     name = "graph_inception_v3",
     srcs = ["graph_inception_v3.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -201,10 +253,14 @@
 cc_binary(
     name = "graph_inception_v4",
     srcs = ["graph_inception_v4.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -214,10 +270,14 @@
 cc_binary(
     name = "graph_lenet",
     srcs = ["graph_lenet.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -227,10 +287,14 @@
 cc_binary(
     name = "graph_mobilenet",
     srcs = ["graph_mobilenet.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -240,10 +304,14 @@
 cc_binary(
     name = "graph_mobilenet_v2",
     srcs = ["graph_mobilenet_v2.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -253,10 +321,14 @@
 cc_binary(
     name = "graph_resnet12",
     srcs = ["graph_resnet12.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -266,10 +338,14 @@
 cc_binary(
     name = "graph_resnet50",
     srcs = ["graph_resnet50.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -279,10 +355,14 @@
 cc_binary(
     name = "graph_resnet_v2_50",
     srcs = ["graph_resnet_v2_50.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -292,10 +372,14 @@
 cc_binary(
     name = "graph_resnext50",
     srcs = ["graph_resnext50.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -305,10 +389,14 @@
 cc_binary(
     name = "graph_shufflenet",
     srcs = ["graph_shufflenet.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -318,10 +406,14 @@
 cc_binary(
     name = "graph_squeezenet",
     srcs = ["graph_squeezenet.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -331,10 +423,14 @@
 cc_binary(
     name = "graph_squeezenet_v1_1",
     srcs = ["graph_squeezenet_v1_1.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -344,10 +440,14 @@
 cc_binary(
     name = "graph_srcnn955",
     srcs = ["graph_srcnn955.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -357,10 +457,14 @@
 cc_binary(
     name = "graph_ssd_mobilenet",
     srcs = ["graph_ssd_mobilenet.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -370,10 +474,14 @@
 cc_binary(
     name = "graph_vgg16",
     srcs = ["graph_vgg16.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -383,10 +491,14 @@
 cc_binary(
     name = "graph_vgg19",
     srcs = ["graph_vgg19.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -396,10 +508,14 @@
 cc_binary(
     name = "graph_vgg_vdsr",
     srcs = ["graph_vgg_vdsr.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
@@ -409,10 +525,14 @@
 cc_binary(
     name = "graph_yolov3",
     srcs = ["graph_yolov3.cpp"],
-    copts = ["-march=armv8.2-a+fp16"],
+    copts = select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = False,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//include",
         "//utils",
diff --git a/scripts/generate_build_files.py b/scripts/generate_build_files.py
index beb32d0..0ca2717 100644
--- a/scripts/generate_build_files.py
+++ b/scripts/generate_build_files.py
@@ -149,7 +149,7 @@
 )
 
 filegroup(
-        name = "arm_compute_core_srcs",
+        name = "arm_compute_srcs",
         srcs = ["{line_separator.join(srcs_core)}"]  +
     glob(["**/*.h",
     "**/*.hpp",
@@ -186,7 +186,7 @@
 )
 
 target_sources(
-    arm_compute_core
+    arm_compute
     PRIVATE
     {line_separator.join(srcs_core)}
 )"""
diff --git a/scripts/print_version_file.py b/scripts/print_version_file.py
index 6c50216..a7654ff 100644
--- a/scripts/print_version_file.py
+++ b/scripts/print_version_file.py
@@ -31,6 +31,25 @@
         VERSION, build_args, git_hash.strip())
     return build_info
 
+def make_version_file_from_sconscript(build_args, git_hash):
+    VERSION = "v0.0-unreleased"
+    fp = None
+    if os.path.exists("external/compute_library/SConscript"):
+        fp = "external/compute_library/SConscript"
+    elif os.path.exists("SConscript"):
+        fp = "SConscript"
+    if fp:
+        with open(fp) as scons_file:
+            for line in scons_file:
+                if "VERSION = " in line:
+                    VERSION = line.split("=")[-1].strip().replace("\"", "")
+                    break
+    return "\"arm_compute_version=%s Build options: %s Git hash=%s\"" % (
+        VERSION, build_args, git_hash.strip())
 
-if __name__ == "__main__":
-    print(make_version_file(sys.argv[1], sys.argv[2]))
+if __name__ == "__main__":        
+    if len(sys.argv) == 4 and sys.argv[3].lower() == "true":
+        print(make_version_file_from_sconscript(sys.argv[1], sys.argv[2]))
+    else:
+        print(make_version_file(sys.argv[1], sys.argv[2]))
+    
diff --git a/src/BUILD.bazel b/src/BUILD.bazel
index a675394..85e5650 100644
--- a/src/BUILD.bazel
+++ b/src/BUILD.bazel
@@ -354,7 +354,7 @@
 )
 
 filegroup(
-        name = "arm_compute_core_srcs",
+        name = "arm_compute_srcs",
         srcs = ["c/AclContext.cpp",
 	"c/AclOperator.cpp",
 	"c/AclQueue.cpp",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0b7a010..c847a62 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -105,7 +105,7 @@
 target_sources(
     arm_compute_sve
     PRIVATE
-	core/NEON/kernels/arm_conv/depthwise/interleaves/sve_s8q_3x3_dot.cpp
+    core/NEON/kernels/arm_conv/depthwise/interleaves/sve_s8q_3x3_dot.cpp
 	core/NEON/kernels/arm_conv/depthwise/interleaves/sve_u8q_3x3_dot.cpp
 	core/NEON/kernels/arm_conv/depthwise/kernels/sme2_fp16_nhwc_3x3_s1_output2x2_mla_depthfirst/generic_direct.cpp
 	core/NEON/kernels/arm_conv/depthwise/kernels/sme2_fp16_nhwc_3x3_s1_output2x2_mla_depthfirst/generic_indirect.cpp
@@ -345,7 +345,7 @@
 )
 
 target_sources(
-    arm_compute_core
+    arm_compute
     PRIVATE
     c/AclContext.cpp
 	c/AclOperator.cpp
diff --git a/tests/BUILD.bazel b/tests/BUILD.bazel
index 13d7895..5763938 100644
--- a/tests/BUILD.bazel
+++ b/tests/BUILD.bazel
@@ -34,9 +34,11 @@
         "validation/reference/*.h",
         "validation/**/*.h",
     ]),
-    copts = [
-                "-march=armv8.2-a+fp16",
-            ] + select({
+    copts = [] + select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }) + select({
                 "//:debug_flag": [
                     "-O0",
                     "-g",
@@ -54,7 +56,7 @@
             }),
     linkstatic = True,
     deps = [
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:common_defines",
         "//tests/framework",
     ],
@@ -74,9 +76,11 @@
         "datasets/*.h",
         "instruments/*.h",
     ]),
-    copts = [
-                "-march=armv8.2-a+fp16",
-            ] + select({
+    copts = [] + select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }) + select({
                 "//:debug_flag": [
                     "-O0",
                     "-g",
@@ -95,12 +99,12 @@
     linkstatic = True,
     deps = [
         ":validation_framework",
-        "//:arm_compute_core",
+        "//:arm_compute",
         "//:arm_compute_graph",
         "//:common_defines",
         "//tests/framework",
     ],
-    local_defines = [] + 
+    local_defines = [] +
         select({
                 "//:bf16_validation_flag": [
                 "ARM_COMPUTE_ENABLE_BF16",
@@ -125,9 +129,11 @@
         "benchmark/NEON/*.cpp",
         "*.cpp",
     ]),
-    copts = [
-                "-march=armv8.2-a+fp16",
-            ] + select({
+    copts = [] + select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }) + select({
                 "//:debug_flag": [
                     "-O0",
                     "-g",
@@ -147,6 +153,6 @@
     deps = [
         ":arm_compute_validation",
         ":validation_framework",
-        "//:arm_compute_core",
+        "//:arm_compute",
     ],
 )
diff --git a/tests/framework/BUILD.bazel b/tests/framework/BUILD.bazel
index 084d12c..17d5a15 100644
--- a/tests/framework/BUILD.bazel
+++ b/tests/framework/BUILD.bazel
@@ -46,8 +46,11 @@
     ]),
     copts = [
         "-Wno-overloaded-virtual",
-        "-march=armv8.2-a+fp16",
-    ],
+    ] + select({
+                  "//:arch_armv8-a": ["-march=armv8-a"],
+                  "//:arch_armv8.2-a+fp16": ["-march=armv8.2-a+fp16"],
+                  "//conditions:default": ["-march=armv8-a"],
+              }),
     linkstatic = True,
     visibility = ["//visibility:public"],
     deps = [