1*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//tools/build_defs:default_platform_defs.bzl", "DEVSERVER_PLATFORM_REGEX") 2*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//tools/build_defs:fb_native_wrapper.bzl", "fb_native") 3*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/backends/xnnpack/third-party:third_party_libs.bzl", "third_party_dep") 4*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime") 5*523fa7a6SAndroid Build Coastguard Workerload( 6*523fa7a6SAndroid Build Coastguard Worker "@fbsource//xplat/executorch/kernels/portable:op_registration_util.bzl", 7*523fa7a6SAndroid Build Coastguard Worker "get_compiler_optimization_flags", 8*523fa7a6SAndroid Build Coastguard Worker) 9*523fa7a6SAndroid Build Coastguard Worker 10*523fa7a6SAndroid Build Coastguard Worker# Because vec exists as a collection of header files, compile and preprocessor 11*523fa7a6SAndroid Build Coastguard Worker# flags applied to the vec target do not have any effect, since no compilation 12*523fa7a6SAndroid Build Coastguard Worker# actually occurs for the target. 13*523fa7a6SAndroid Build Coastguard Worker# 14*523fa7a6SAndroid Build Coastguard Worker# Targets using the vec library must therefore call the get_vec_*_flags 15*523fa7a6SAndroid Build Coastguard Worker# functions in order to declare the required compiler flags needed in order to 16*523fa7a6SAndroid Build Coastguard Worker# access CPU vector intrinsics. 17*523fa7a6SAndroid Build Coastguard Worker 18*523fa7a6SAndroid Build Coastguard Workerdef get_vec_preprocessor_flags(): 19*523fa7a6SAndroid Build Coastguard Worker if not runtime.is_oss: 20*523fa7a6SAndroid Build Coastguard Worker # various ovr_configs are not available in oss 21*523fa7a6SAndroid Build Coastguard Worker preprocessor_flags = select({ 22*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:linux-x86_64": [ 23*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_ARM_VEC256_WITH_SLEEF", 24*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 25*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:iphoneos-arm64": [ 26*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_ARM_VEC256_WITH_SLEEF", 27*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 28*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:macos-arm64": [ 29*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_ARM_VEC256_WITH_SLEEF", 30*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 31*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:android-arm64": [ 32*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_ARM_VEC256_WITH_SLEEF", 33*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 34*523fa7a6SAndroid Build Coastguard Worker "DEFAULT": [], 35*523fa7a6SAndroid Build Coastguard Worker }) 36*523fa7a6SAndroid Build Coastguard Worker return preprocessor_flags 37*523fa7a6SAndroid Build Coastguard Worker return [] 38*523fa7a6SAndroid Build Coastguard Worker 39*523fa7a6SAndroid Build Coastguard Workerdef get_vec_deps(): 40*523fa7a6SAndroid Build Coastguard Worker if not runtime.is_oss: 41*523fa7a6SAndroid Build Coastguard Worker # various ovr_configs are not available in oss 42*523fa7a6SAndroid Build Coastguard Worker deps = select({ 43*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:iphoneos-arm64": [ 44*523fa7a6SAndroid Build Coastguard Worker "fbsource//third-party/sleef:sleef_arm", 45*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 46*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:macos-arm64": [ 47*523fa7a6SAndroid Build Coastguard Worker "fbsource//third-party/sleef:sleef_arm", 48*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 49*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:android-arm64": [ 50*523fa7a6SAndroid Build Coastguard Worker "fbsource//third-party/sleef:sleef_arm", 51*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 52*523fa7a6SAndroid Build Coastguard Worker "DEFAULT": [], 53*523fa7a6SAndroid Build Coastguard Worker }) 54*523fa7a6SAndroid Build Coastguard Worker return deps 55*523fa7a6SAndroid Build Coastguard Worker return [] 56*523fa7a6SAndroid Build Coastguard Worker 57*523fa7a6SAndroid Build Coastguard Workerdef get_vec_cxx_preprocessor_flags(): 58*523fa7a6SAndroid Build Coastguard Worker preprocessor_flags = [ 59*523fa7a6SAndroid Build Coastguard Worker ( 60*523fa7a6SAndroid Build Coastguard Worker DEVSERVER_PLATFORM_REGEX, 61*523fa7a6SAndroid Build Coastguard Worker [ 62*523fa7a6SAndroid Build Coastguard Worker "-DCPU_CAPABILITY_AVX2", 63*523fa7a6SAndroid Build Coastguard Worker ], 64*523fa7a6SAndroid Build Coastguard Worker ), 65*523fa7a6SAndroid Build Coastguard Worker ] 66*523fa7a6SAndroid Build Coastguard Worker return preprocessor_flags 67*523fa7a6SAndroid Build Coastguard Worker 68*523fa7a6SAndroid Build Coastguard Workerdef get_vec_fbcode_preprocessor_flags(): 69*523fa7a6SAndroid Build Coastguard Worker preprocessor_flags = [ 70*523fa7a6SAndroid Build Coastguard Worker "-DCPU_CAPABILITY_AVX2", 71*523fa7a6SAndroid Build Coastguard Worker ] 72*523fa7a6SAndroid Build Coastguard Worker return preprocessor_flags 73*523fa7a6SAndroid Build Coastguard Worker 74*523fa7a6SAndroid Build Coastguard Workerdef get_apple_framework_deps_kwargs(is_fbcode): 75*523fa7a6SAndroid Build Coastguard Worker # various ovr_configs are not available in oss 76*523fa7a6SAndroid Build Coastguard Worker if not runtime.is_oss and not is_fbcode: 77*523fa7a6SAndroid Build Coastguard Worker # Jump through few hoops since 'frameworks' is not a valid kwarg 78*523fa7a6SAndroid Build Coastguard Worker # for some buck rules 79*523fa7a6SAndroid Build Coastguard Worker frameworks = {'frameworks': select({ 80*523fa7a6SAndroid Build Coastguard Worker "DEFAULT": [], 81*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:iphoneos": ["$SDKROOT/System/Library/Frameworks/Accelerate.framework"], 82*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:macos-arm64": ["$SDKROOT/System/Library/Frameworks/Accelerate.framework"], 83*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:macos-x86_64": ["$SDKROOT/System/Library/Frameworks/Accelerate.framework"], 84*523fa7a6SAndroid Build Coastguard Worker })} 85*523fa7a6SAndroid Build Coastguard Worker return frameworks 86*523fa7a6SAndroid Build Coastguard Worker return {'fbobjc_frameworks': ["Accelerate"]} 87*523fa7a6SAndroid Build Coastguard Worker 88*523fa7a6SAndroid Build Coastguard Workerdef get_preprocessor_flags(): 89*523fa7a6SAndroid Build Coastguard Worker # various ovr_configs are not available in oss 90*523fa7a6SAndroid Build Coastguard Worker preprocessor_flags = select({ 91*523fa7a6SAndroid Build Coastguard Worker ":linux-x86_64": [ 92*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_WITH_BLAS", 93*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 94*523fa7a6SAndroid Build Coastguard Worker "DEFAULT": [], 95*523fa7a6SAndroid Build Coastguard Worker }) 96*523fa7a6SAndroid Build Coastguard Worker 97*523fa7a6SAndroid Build Coastguard Worker if not runtime.is_oss: 98*523fa7a6SAndroid Build Coastguard Worker # various ovr_configs are not available in oss 99*523fa7a6SAndroid Build Coastguard Worker additional_preprocessor_flags = select({ 100*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:iphoneos": [ 101*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_WITH_BLAS", 102*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_FOR_APPLE", 103*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 104*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:macos-arm64": [ 105*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_WITH_BLAS", 106*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_FOR_APPLE", 107*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 108*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os:macos-x86_64": [ 109*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_WITH_BLAS", 110*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_FOR_APPLE", 111*523fa7a6SAndroid Build Coastguard Worker ] if not runtime.is_oss else [], 112*523fa7a6SAndroid Build Coastguard Worker "DEFAULT": [], 113*523fa7a6SAndroid Build Coastguard Worker }) 114*523fa7a6SAndroid Build Coastguard Worker preprocessor_flags = preprocessor_flags + additional_preprocessor_flags 115*523fa7a6SAndroid Build Coastguard Worker return preprocessor_flags 116*523fa7a6SAndroid Build Coastguard Worker 117*523fa7a6SAndroid Build Coastguard Worker 118*523fa7a6SAndroid Build Coastguard Worker# Currently, having a dependency on fbsource//third-party/sleef:sleef may cause 119*523fa7a6SAndroid Build Coastguard Worker# duplicate symbol errors when linking fbcode targets in opt mode that also 120*523fa7a6SAndroid Build Coastguard Worker# depend on ATen. This is because ATen accesses sleef via the third-party folder 121*523fa7a6SAndroid Build Coastguard Worker# in caffe2 (caffe2/third-party//sleef:sleef). 122*523fa7a6SAndroid Build Coastguard Worker# TODO(ssjia): Enable -DCPU_CAPABILITY_AVX2 in fbcode, which requires sleef. 123*523fa7a6SAndroid Build Coastguard Workerdef define_libs(is_fbcode=False): 124*523fa7a6SAndroid Build Coastguard Worker runtime.cxx_library( 125*523fa7a6SAndroid Build Coastguard Worker name = "libvec", 126*523fa7a6SAndroid Build Coastguard Worker srcs = [], 127*523fa7a6SAndroid Build Coastguard Worker exported_headers = native.glob([ 128*523fa7a6SAndroid Build Coastguard Worker "vec/**/*.h", 129*523fa7a6SAndroid Build Coastguard Worker ]), 130*523fa7a6SAndroid Build Coastguard Worker header_namespace = "executorch/kernels/optimized", 131*523fa7a6SAndroid Build Coastguard Worker visibility = [ 132*523fa7a6SAndroid Build Coastguard Worker "//executorch/...", 133*523fa7a6SAndroid Build Coastguard Worker "@EXECUTORCH_CLIENTS", 134*523fa7a6SAndroid Build Coastguard Worker ], 135*523fa7a6SAndroid Build Coastguard Worker cxx_platform_deps = select({ 136*523fa7a6SAndroid Build Coastguard Worker "DEFAULT": [ 137*523fa7a6SAndroid Build Coastguard Worker ( 138*523fa7a6SAndroid Build Coastguard Worker DEVSERVER_PLATFORM_REGEX, 139*523fa7a6SAndroid Build Coastguard Worker [ 140*523fa7a6SAndroid Build Coastguard Worker "fbsource//third-party/sleef:sleef", 141*523fa7a6SAndroid Build Coastguard Worker ], 142*523fa7a6SAndroid Build Coastguard Worker ), 143*523fa7a6SAndroid Build Coastguard Worker ], 144*523fa7a6SAndroid Build Coastguard Worker "ovr_config//cpu:arm64": [ 145*523fa7a6SAndroid Build Coastguard Worker ( 146*523fa7a6SAndroid Build Coastguard Worker DEVSERVER_PLATFORM_REGEX, 147*523fa7a6SAndroid Build Coastguard Worker [ 148*523fa7a6SAndroid Build Coastguard Worker "fbsource//third-party/sleef:sleef_arm", 149*523fa7a6SAndroid Build Coastguard Worker ], 150*523fa7a6SAndroid Build Coastguard Worker ), 151*523fa7a6SAndroid Build Coastguard Worker ], 152*523fa7a6SAndroid Build Coastguard Worker }), 153*523fa7a6SAndroid Build Coastguard Worker fbandroid_platform_deps = [ 154*523fa7a6SAndroid Build Coastguard Worker ( 155*523fa7a6SAndroid Build Coastguard Worker "^android-arm64.*$", 156*523fa7a6SAndroid Build Coastguard Worker [ 157*523fa7a6SAndroid Build Coastguard Worker "fbsource//third-party/sleef:sleef_arm", 158*523fa7a6SAndroid Build Coastguard Worker ], 159*523fa7a6SAndroid Build Coastguard Worker ), 160*523fa7a6SAndroid Build Coastguard Worker ], 161*523fa7a6SAndroid Build Coastguard Worker ) 162*523fa7a6SAndroid Build Coastguard Worker 163*523fa7a6SAndroid Build Coastguard Worker runtime.cxx_library( 164*523fa7a6SAndroid Build Coastguard Worker name = "libutils", 165*523fa7a6SAndroid Build Coastguard Worker srcs = [], 166*523fa7a6SAndroid Build Coastguard Worker exported_headers = native.glob([ 167*523fa7a6SAndroid Build Coastguard Worker "utils/**/*.h", 168*523fa7a6SAndroid Build Coastguard Worker ]), 169*523fa7a6SAndroid Build Coastguard Worker header_namespace = "executorch/kernels/optimized", 170*523fa7a6SAndroid Build Coastguard Worker visibility = [ 171*523fa7a6SAndroid Build Coastguard Worker "//executorch/...", 172*523fa7a6SAndroid Build Coastguard Worker "@EXECUTORCH_CLIENTS", 173*523fa7a6SAndroid Build Coastguard Worker ], 174*523fa7a6SAndroid Build Coastguard Worker exported_deps = [ 175*523fa7a6SAndroid Build Coastguard Worker # Needed to access the ET_INLINE macro 176*523fa7a6SAndroid Build Coastguard Worker "//executorch/runtime/platform:compiler", 177*523fa7a6SAndroid Build Coastguard Worker ], 178*523fa7a6SAndroid Build Coastguard Worker ) 179*523fa7a6SAndroid Build Coastguard Worker 180*523fa7a6SAndroid Build Coastguard Worker # OSS doesn't have ovr_config//os:linux-x86_64 181*523fa7a6SAndroid Build Coastguard Worker fb_native.config_setting( 182*523fa7a6SAndroid Build Coastguard Worker name = "linux-x86_64", 183*523fa7a6SAndroid Build Coastguard Worker constraint_values = [ 184*523fa7a6SAndroid Build Coastguard Worker "ovr_config//os/constraints:linux", 185*523fa7a6SAndroid Build Coastguard Worker "ovr_config//cpu/constraints:x86_64", 186*523fa7a6SAndroid Build Coastguard Worker ], 187*523fa7a6SAndroid Build Coastguard Worker ) 188*523fa7a6SAndroid Build Coastguard Worker 189*523fa7a6SAndroid Build Coastguard Worker LIBBLAS_DEPS = [third_party_dep("cpuinfo")] 190*523fa7a6SAndroid Build Coastguard Worker 191*523fa7a6SAndroid Build Coastguard Worker for libblas_name, mkl_dep in [("libblas", "fbsource//third-party/mkl:mkl_lp64_omp"), ("libblas_mkl_noomp", "fbsource//third-party/mkl:mkl")]: 192*523fa7a6SAndroid Build Coastguard Worker runtime.cxx_library( 193*523fa7a6SAndroid Build Coastguard Worker name = libblas_name, 194*523fa7a6SAndroid Build Coastguard Worker srcs = native.glob([ 195*523fa7a6SAndroid Build Coastguard Worker "blas/**/*.cpp", 196*523fa7a6SAndroid Build Coastguard Worker ]), 197*523fa7a6SAndroid Build Coastguard Worker exported_headers = native.glob([ 198*523fa7a6SAndroid Build Coastguard Worker "blas/**/*.h", 199*523fa7a6SAndroid Build Coastguard Worker ]), 200*523fa7a6SAndroid Build Coastguard Worker compiler_flags = get_compiler_optimization_flags(), 201*523fa7a6SAndroid Build Coastguard Worker header_namespace = "executorch/kernels/optimized", 202*523fa7a6SAndroid Build Coastguard Worker visibility = [ 203*523fa7a6SAndroid Build Coastguard Worker "//executorch/...", 204*523fa7a6SAndroid Build Coastguard Worker "@EXECUTORCH_CLIENTS", 205*523fa7a6SAndroid Build Coastguard Worker ], 206*523fa7a6SAndroid Build Coastguard Worker preprocessor_flags = get_preprocessor_flags(), 207*523fa7a6SAndroid Build Coastguard Worker fbandroid_platform_preprocessor_flags = [ 208*523fa7a6SAndroid Build Coastguard Worker ( 209*523fa7a6SAndroid Build Coastguard Worker "^android-arm64.*$", 210*523fa7a6SAndroid Build Coastguard Worker [ 211*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_WITH_BLAS", 212*523fa7a6SAndroid Build Coastguard Worker ], 213*523fa7a6SAndroid Build Coastguard Worker ), 214*523fa7a6SAndroid Build Coastguard Worker ], 215*523fa7a6SAndroid Build Coastguard Worker fbandroid_platform_deps = [ 216*523fa7a6SAndroid Build Coastguard Worker ( 217*523fa7a6SAndroid Build Coastguard Worker "^android-arm64.*$", 218*523fa7a6SAndroid Build Coastguard Worker [ 219*523fa7a6SAndroid Build Coastguard Worker "fbsource//arvr/third-party/eigen:eigen3_blas", 220*523fa7a6SAndroid Build Coastguard Worker ], 221*523fa7a6SAndroid Build Coastguard Worker ), 222*523fa7a6SAndroid Build Coastguard Worker ], 223*523fa7a6SAndroid Build Coastguard Worker fbobjc_compiler_flags = [ 224*523fa7a6SAndroid Build Coastguard Worker "-march=armv8+bf16", 225*523fa7a6SAndroid Build Coastguard Worker ], 226*523fa7a6SAndroid Build Coastguard Worker fbobjc_exported_preprocessor_flags = [ 227*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_WITH_BLAS", 228*523fa7a6SAndroid Build Coastguard Worker "-DET_BUILD_FOR_APPLE", 229*523fa7a6SAndroid Build Coastguard Worker ], 230*523fa7a6SAndroid Build Coastguard Worker deps = select({ 231*523fa7a6SAndroid Build Coastguard Worker ":linux-x86_64": [mkl_dep] if not runtime.is_oss else [], 232*523fa7a6SAndroid Build Coastguard Worker "DEFAULT": [], 233*523fa7a6SAndroid Build Coastguard Worker }) + LIBBLAS_DEPS, 234*523fa7a6SAndroid Build Coastguard Worker exported_deps = [ 235*523fa7a6SAndroid Build Coastguard Worker "//executorch/extension/parallel:thread_parallel", 236*523fa7a6SAndroid Build Coastguard Worker "//executorch/kernels/optimized:libutils", 237*523fa7a6SAndroid Build Coastguard Worker "//executorch/runtime/core/exec_aten:lib", 238*523fa7a6SAndroid Build Coastguard Worker ], 239*523fa7a6SAndroid Build Coastguard Worker **get_apple_framework_deps_kwargs(is_fbcode), 240*523fa7a6SAndroid Build Coastguard Worker ) 241