diff --git a/extension/llm/custom_ops/targets.bzl b/extension/llm/custom_ops/targets.bzl index 6b9f9cb959c..781225afedc 100644 --- a/extension/llm/custom_ops/targets.bzl +++ b/extension/llm/custom_ops/targets.bzl @@ -1,10 +1,14 @@ load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime") +load( + "@fbsource//xplat/executorch/kernels/optimized:lib_defs.bzl", + "get_vec_preprocessor_flags", + "get_vec_deps", +) load( "@fbsource//xplat/executorch/kernels/portable:op_registration_util.bzl", "get_compiler_optimization_flags", ) - def define_common_targets(): """Defines targets that should be shared between fbcode and xplat. @@ -26,6 +30,7 @@ def define_common_targets(): "op_sdpa.h", "op_update_quantized_cache.h", ], + preprocessor_flags = get_vec_preprocessor_flags(), exported_deps = [ "//executorch/runtime/kernel:kernel_includes", "//executorch/kernels/portable/cpu:scalar_utils", @@ -38,7 +43,7 @@ def define_common_targets(): deps = [ "//executorch/kernels/portable/cpu/util:reduce_util", "//executorch/extension/llm/custom_ops/spinquant:fast_hadamard_transform", - ], + ] + get_vec_deps(), compiler_flags = ["-Wno-missing-prototypes", "-Wno-global-constructors"] + get_compiler_optimization_flags(), visibility = [ "//executorch/...", diff --git a/kernels/optimized/lib_defs.bzl b/kernels/optimized/lib_defs.bzl index fb1c9a17f99..659c7afe090 100644 --- a/kernels/optimized/lib_defs.bzl +++ b/kernels/optimized/lib_defs.bzl @@ -15,16 +15,44 @@ load( # functions in order to declare the required compiler flags needed in order to # access CPU vector intrinsics. -def get_vec_android_preprocessor_flags(): - preprocessor_flags = [ - ( - "^android-arm64.*$", - [ +def get_vec_preprocessor_flags(): + if not runtime.is_oss: + # various ovr_configs are not available in oss + preprocessor_flags = select({ + "ovr_config//os:linux-x86_64": [ "-DET_BUILD_ARM_VEC256_WITH_SLEEF", - ], - ), - ] - return preprocessor_flags + ] if not runtime.is_oss else [], + "ovr_config//os:iphoneos-arm64": [ + "-DET_BUILD_ARM_VEC256_WITH_SLEEF", + ] if not runtime.is_oss else [], + "ovr_config//os:macos-arm64": [ + "-DET_BUILD_ARM_VEC256_WITH_SLEEF", + ] if not runtime.is_oss else [], + "ovr_config//os:android-arm64": [ + "-DET_BUILD_ARM_VEC256_WITH_SLEEF", + ] if not runtime.is_oss else [], + "DEFAULT": [], + }) + return preprocessor_flags + return [] + +def get_vec_deps(): + if not runtime.is_oss: + # various ovr_configs are not available in oss + deps = select({ + "ovr_config//os:iphoneos-arm64": [ + "fbsource//third-party/sleef:sleef_arm", + ] if not runtime.is_oss else [], + "ovr_config//os:macos-arm64": [ + "fbsource//third-party/sleef:sleef_arm", + ] if not runtime.is_oss else [], + "ovr_config//os:android-arm64": [ + "fbsource//third-party/sleef:sleef_arm", + ] if not runtime.is_oss else [], + "DEFAULT": [], + }) + return deps + return [] def get_vec_cxx_preprocessor_flags(): preprocessor_flags = [ diff --git a/kernels/optimized/op_registration_util.bzl b/kernels/optimized/op_registration_util.bzl index 6e74836bb79..6839454be29 100644 --- a/kernels/optimized/op_registration_util.bzl +++ b/kernels/optimized/op_registration_util.bzl @@ -2,7 +2,8 @@ load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime") load("@fbsource//xplat/executorch/build:selects.bzl", "selects") load( "@fbsource//xplat/executorch/kernels/optimized:lib_defs.bzl", - "get_vec_android_preprocessor_flags", + "get_vec_preprocessor_flags", + "get_vec_deps", ) load( "@fbsource//xplat/executorch/kernels/portable:op_registration_util.bzl", @@ -94,8 +95,8 @@ def define_op_library(name, deps): compiler_flags = ["-Wno-missing-prototypes"] + get_compiler_optimization_flags(), deps = [ "//executorch/runtime/kernel:kernel_includes", - ] + augmented_deps, - fbandroid_platform_preprocessor_flags = get_vec_android_preprocessor_flags(), + ] + augmented_deps + get_vec_deps(), + preprocessor_flags = get_vec_preprocessor_flags(), # sleef needs to be added as a direct dependency of the operator target when building for Android, # or a linker error may occur. Not sure why this happens; it seems that fbandroid_platform_deps of # dependencies are not transitive diff --git a/kernels/optimized/test/targets.bzl b/kernels/optimized/test/targets.bzl index d2ee2880c60..e4740a9ad70 100644 --- a/kernels/optimized/test/targets.bzl +++ b/kernels/optimized/test/targets.bzl @@ -1,7 +1,7 @@ load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime") load( "@fbsource//xplat/executorch/kernels/optimized:lib_defs.bzl", - "get_vec_android_preprocessor_flags", + "get_vec_preprocessor_flags", "get_vec_cxx_preprocessor_flags", ) load("@fbsource//xplat/executorch/kernels/test:util.bzl", "define_supported_features_lib") @@ -27,7 +27,7 @@ def _lib_test_bin(name, extra_deps = [], in_cpu = False): "//executorch/kernels/optimized{}:{}".format(cpu_path, lib_root), ] + extra_deps, cxx_platform_preprocessor_flags = get_vec_cxx_preprocessor_flags(), - fbandroid_platform_preprocessor_flags = get_vec_android_preprocessor_flags(), + preprocessor_flags = get_vec_preprocessor_flags(), ) def define_common_targets(): diff --git a/shim/xplat/executorch/kernels/optimized/lib_defs.bzl b/shim/xplat/executorch/kernels/optimized/lib_defs.bzl index 79ce6b02b35..bd3284c42aa 100644 --- a/shim/xplat/executorch/kernels/optimized/lib_defs.bzl +++ b/shim/xplat/executorch/kernels/optimized/lib_defs.bzl @@ -16,16 +16,46 @@ load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime") # functions in order to declare the required compiler flags needed in order to # access CPU vector intrinsics. -def get_vec_android_preprocessor_flags(): - preprocessor_flags = [ - ( - "^android-arm64.*$", - [ +# This oopy from kernels/optimized/lib_defs.bzl is not necessary. +# This file really needs to be removed +def get_vec_preprocessor_flags(): + if not runtime.is_oss: + # various ovr_configs are not available in oss + preprocessor_flags = select({ + "ovr_config//os:iphoneos": [ "-DET_BUILD_ARM_VEC256_WITH_SLEEF", - ], - ), - ] - return preprocessor_flags + ] if not runtime.is_oss else [], + "ovr_config//os:macos-arm64": [ + "-DET_BUILD_ARM_VEC256_WITH_SLEEF", + ] if not runtime.is_oss else [], + "ovr_config//os:android-arm64": [ + "-DET_BUILD_ARM_VEC256_WITH_SLEEF", + ] if not runtime.is_oss else [], + "DEFAULT": [], + }) + return preprocessor_flags + return [] + +def get_vec_deps(): + if not runtime.is_oss: + # various ovr_configs are not available in oss + deps = select({ + "ovr_config//os:linux-x86_64": [ + "fbsource//third-party/sleef:sleef", + ] if not runtime.is_oss else [], + "ovr_config//os:iphoneos": [ + "fbsource//third-party/sleef:sleef_arm", + ] if not runtime.is_oss else [], + "ovr_config//os:macos-arm64": [ + "fbsource//third-party/sleef:sleef_arm", + ] if not runtime.is_oss else [], + "ovr_config//os:android-arm64": [ + "fbsource//third-party/sleef:sleef_arm", + ] if not runtime.is_oss else [], + "DEFAULT": [], + }) + return deps + return [] def get_vec_cxx_preprocessor_flags(): preprocessor_flags = [ diff --git a/shim/xplat/executorch/kernels/optimized/op_registration_util.bzl b/shim/xplat/executorch/kernels/optimized/op_registration_util.bzl index c9fe4ec912d..37a68abaa07 100644 --- a/shim/xplat/executorch/kernels/optimized/op_registration_util.bzl +++ b/shim/xplat/executorch/kernels/optimized/op_registration_util.bzl @@ -9,7 +9,7 @@ load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime") load("@fbsource//xplat/executorch/build:selects.bzl", "selects") load( "@fbsource//xplat/executorch/kernels/optimized:lib_defs.bzl", - "get_vec_android_preprocessor_flags", + "get_vec_preprocessor_flags", ) def op_target(name, deps = []): @@ -98,7 +98,7 @@ def define_op_library(name, deps): deps = [ "//executorch/runtime/kernel:kernel_includes", ] + augmented_deps, - fbandroid_platform_preprocessor_flags = get_vec_android_preprocessor_flags(), + preprocessor_flags = get_vec_preprocessor_flags(), # sleef needs to be added as a direct dependency of the operator target when building for Android, # or a linker error may occur. Not sure why this happens; it seems that fbandroid_platform_deps of # dependencies are not transitive