# Copyright (c) 2023 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. load("@bazel_skylib//rules:common_settings.bzl", "string_flag") load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") #--------------------------------------------------------------------- # Config setting for Tensorflow build config_setting( name = "build_with_acl", define_values = { "build_with_acl": "true", }, visibility = ["//visibility:public"], ) #--------------------------------------------------------------------- # Flags for build options. Example: --//:debug=true # All flags have aliases in .bazelrc so can use for example --debug=true when building bool_flag( name = "debug", build_setting_default = False, visibility = ["//visibility:public"], ) bool_flag( name = "Werror", build_setting_default = False, visibility = ["//visibility:public"], ) bool_flag( name = "logging", build_setting_default = False, visibility = ["//visibility:public"], ) bool_flag( name = "openmp", build_setting_default = True, visibility = ["//visibility:public"], ) bool_flag( name = "cppthreads", build_setting_default = False, visibility = ["//visibility:public"], ) bool_flag( name = "enable_bf16_validation", build_setting_default = False, visibility = ["//visibility:public"], ) bool_flag( name = "enable_sve_validation", build_setting_default = False, visibility = ["//visibility:public"], ) string_flag( name = "arch", build_setting_default = "armv8-a", values = [ "armv8-a", "armv8.2-a+fp16" ] ) #--------------------------------------------------------------------- # Flag variables config_setting( name = "debug_flag", flag_values = { ":debug": "true", }, ) config_setting( name = "Werror_flag", flag_values = { ":Werror": "true", }, ) config_setting( name = "logging_flag", flag_values = { ":logging": "true", }, ) config_setting( name = "openmp_flag", flag_values = { ":openmp": "true", }, ) config_setting( name = "cppthreads_flag", flag_values = { ":cppthreads": "true", }, ) config_setting( name = "bf16_validation_flag", flag_values = { ":enable_bf16_validation": "true", }, ) config_setting( name = "sve_validation_flag", flag_values = { ":enable_sve_validation": "true", }, ) 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 cc_library( name = "common_defines", defines = [ "ENABLE_NEON", "ARM_COMPUTE_CPU_ENABLED", "ARM_COMPUTE_ENABLE_NEON", "ARM_COMPUTE_ENABLE_I8MM", "ENABLE_FP32_KERNELS", "ENABLE_QASYMM8_KERNELS", "ENABLE_QASYMM8_SIGNED_KERNELS", "ENABLE_QSYMM16_KERNELS", "ENABLE_INTEGER_KERNELS", "ENABLE_NHWC_KERNELS", "ENABLE_NCHW_KERNELS", "ARM_COMPUTE_GRAPH_ENABLED", "ARM_COMPUTE_ENABLE_SVEF32MM", "ARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS", "_GLIBCXX_USE_NANOSLEEP" ] + select({ "//:debug_flag": [ "ARM_COMPUTE_DEBUG_ENABLED", "ARM_COMPUTE_ASSERTS_ENABLED", ], "//conditions:default": [], }) + select({ "//:logging_flag": ["ARM_COMPUTE_LOGGING_ENABLED"], "//conditions:default": [], }) + select({ "//:cppthreads_flag": ["ARM_COMPUTE_CPP_SCHEDULER"], "//conditions:default": [], }) + 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"], ) #--------------------------------------------------------------------- # Rule for creating file "arm_compute_version.embed" genrule( name = "create_version_file", srcs = ["SConscript"], outs = ["arm_compute_version.embed"], cmd = "$(location //scripts:print_version_file) 'n/a' 'n/a' 'true' > $@", tools = ["//scripts:print_version_file"], visibility = ["//visibility:public"], ) #--------------------------------------------------------------------- # Graph library cc_library( name = "arm_compute_graph", srcs = ["//src:arm_compute_graph_srcs"], 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", "-gdwarf-2", ], "//conditions:default": ["-O3"], }) + select({ "//:openmp_flag": ["-fopenmp"], "//conditions:default": [], }) + select({ "//:Werror_flag": ["-Werror"], "//conditions:default": [], }), visibility = ["//visibility:public"], deps = [ "arm_compute", "//:common_defines", "//arm_compute:graph_headers", ], alwayslink = True, ) #--------------------------------------------------------------------- # SVE2 library cc_library( name = "arm_compute_sve2", srcs = ["//src:arm_compute_sve2_srcs"], copts = [ "-march=armv8.6-a+sve2+fp16+dotprod", ] + select({ "//:debug_flag": [ "-O0", "-g", "-gdwarf-2", ], "//conditions:default": ["-O3"], }) + select({ "//:openmp_flag": ["-fopenmp"], "//conditions:default": [], }) + select({ "//:Werror_flag": ["-Werror"], "//conditions:default": [], }), includes = [ "src/core/NEON/kernels/arm_conv", "src/core/NEON/kernels/arm_gemm", "src/core/NEON/kernels/assembly", "src/core/cpu/kernels/assembly", "src/cpu/kernels/assembly", ], linkopts = select({ "//:openmp_flag": ["-fopenmp"], "//conditions:default": [], }), local_defines = [ "ENABLE_SVE", "ARM_COMPUTE_ENABLE_SVE", "ARM_COMPUTE_ENABLE_SVE2", "ARM_COMPUTE_ENABLE_BF16", ], deps = [ "//:common_defines", "//arm_compute:core_headers", "//arm_compute:runtime_headers", "//include", "//support", ], alwayslink = True, ) #--------------------------------------------------------------------- # SVE library cc_library( name = "arm_compute_sve", srcs = ["//src:arm_compute_sve_srcs"], copts = [ "-march=armv8.2-a+sve+fp16+dotprod", ] + select({ "//:debug_flag": [ "-O0", "-g", "-gdwarf-2", ], "//conditions:default": ["-O3"], }) + select({ "//:openmp_flag": ["-fopenmp"], "//conditions:default": [], }) + select({ "//:Werror_flag": ["-Werror"], "//conditions:default": [], }), includes = [ "src/core/NEON/kernels/arm_conv", "src/core/NEON/kernels/arm_gemm", "src/core/NEON/kernels/assembly", "src/core/cpu/kernels/assembly", "src/cpu/kernels/assembly", ], linkopts = select({ "//:openmp_flag": ["-fopenmp"], "//conditions:default": [], }), local_defines = [ "ENABLE_SVE", "ARM_COMPUTE_ENABLE_SVE", "ARM_COMPUTE_ENABLE_BF16", ], deps = [ "//:common_defines", "//arm_compute:core_headers", "//arm_compute:runtime_headers", "//include", "//support", ], alwayslink = True, ) #--------------------------------------------------------------------- # Core and Runtime library cc_library( name = "arm_compute", srcs = ["//src:arm_compute_srcs"], hdrs = glob([ "core/NEON/kernels/**/*.h", "core/NEON/kernels/**/*.hpp", "**/*.inl", ]) + [ "//:create_version_file", ], 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", "-gdwarf-2", ], "//conditions:default": ["-O3"], }) + select({ "//:openmp_flag": ["-fopenmp"], "//conditions:default": [], }) + select({ "//:Werror_flag": ["-Werror"], "//conditions:default": [], }), includes = [ "arm_compute/runtime", "src/core/NEON/kernels/arm_gemm", "src/core/NEON/kernels/assembly", "src/core/NEON/kernels/convolution/common", "src/core/NEON/kernels/convolution/winograd", "src/core/cpu/kernels/assembly", "src/cpu/kernels/assembly", ], linkopts = select({ "//:openmp_flag": ["-fopenmp"], "//conditions:default": [], }), local_defines = [ "ENABLE_SVE", "ARM_COMPUTE_ENABLE_SVE", "ARM_COMPUTE_ENABLE_BF16", ], visibility = ["//visibility:public"], deps = [ "//:common_defines", "//arm_compute:core_headers", "//arm_compute:graph_headers", "//arm_compute:runtime_headers", "//include", "//support", "//utils", "//:arm_compute_sve", "//:arm_compute_sve2" ], alwayslink = True, )