# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under both the MIT license found in the
# LICENSE-MIT file in the root directory of this source tree and the Apache
# License, Version 2.0 found in the LICENSE-APACHE file in the root directory
# of this source tree.
load("@fbsource//tools/build_defs:default_platform_defs.bzl", "DEVSERVER_PLATFORM_REGEX")
load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")
# Because vec exists as a collection of header files, compile and preprocessor
# flags applied to the vec target do not have any effect, since no compilation
# actually occurs for the target.
#
# Targets using the vec library must therefore call the get_vec_*_flags
# 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.*$",
[
"-DET_BUILD_ARM_VEC256_WITH_SLEEF",
],
),
]
return preprocessor_flags
def get_vec_cxx_preprocessor_flags():
preprocessor_flags = [
(
DEVSERVER_PLATFORM_REGEX,
[
"-DCPU_CAPABILITY_AVX2",
],
),
]
return preprocessor_flags
def get_vec_fbcode_preprocessor_flags():
preprocessor_flags = [
"-DCPU_CAPABILITY_AVX2",
]
return preprocessor_flags
# Currently, having a dependency on fbsource//third-party/sleef:sleef may cause
# duplicate symbol errors when linking fbcode targets in opt mode that also
# depend on ATen. This is because ATen accesses sleef via the third-party folder
# in caffe2 (caffe2/third-party//sleef:sleef).
# TODO(ssjia): Enable -DCPU_CAPABILITY_AVX2 in fbcode, which requires sleef.
def define_libs():
runtime.cxx_library(
name = "libvec",
srcs = [],
exported_headers = native.glob([
"vec/**/*.h",
]),
header_namespace = "executorch/kernels/optimized",
visibility = [
"//executorch/...",
"@EXECUTORCH_CLIENTS",
],
cxx_platform_deps = select({
"DEFAULT": [
(
DEVSERVER_PLATFORM_REGEX,
[
"fbsource//third-party/sleef:sleef",
],
),
],
"ovr_config//cpu:arm64": [
(
DEVSERVER_PLATFORM_REGEX,
[
"fbsource//third-party/sleef:sleef_arm",
],
),
],
}),
fbandroid_platform_deps = [
(
"^android-arm64.*$",
[
"fbsource//third-party/sleef:sleef_arm",
],
),
],
)
runtime.cxx_library(
name = "libutils",
srcs = [],
exported_headers = native.glob([
"utils/**/*.h",
]),
header_namespace = "executorch/kernels/optimized",
visibility = [
"//executorch/...",
"@EXECUTORCH_CLIENTS",
],
exported_deps = [
# Needed to access the __ET_INLINE macro
"//executorch/runtime/platform:compiler",
],
)
runtime.cxx_library(
name = "libblas",
srcs = native.glob([
"blas/**/*.cpp",
]),
exported_headers = native.glob([
"blas/**/*.h",
]),
header_namespace = "executorch/kernels/optimized",
visibility = [
"//executorch/...",
"@EXECUTORCH_CLIENTS",
],
fbandroid_platform_preprocessor_flags = [
(
"^android-arm64.*$",
[
"-DET_BUILD_WITH_BLAS",
],
),
],
fbandroid_platform_deps = [
(
"^android-arm64.*$",
[
"fbsource//third-party/openblas:openblas",
],
),
],
fbobjc_exported_preprocessor_flags = [
"-DET_BUILD_WITH_BLAS",
"-DET_BUILD_FOR_APPLE",
],
fbobjc_frameworks = [
"Accelerate",
],
exported_deps = [
"//executorch/kernels/optimized:libutils",
"//executorch/runtime/core/exec_aten:lib",
],
)