"""Build definitions supporting platform-independent native build."""
load("@org_tensorflow//tensorflow:tensorflow.bzl", "tf_copts", "tf_opts_nortti_if_android")
load("@bazel_skylib//lib:selects.bzl", "selects")
def micore_if(android, ios = [], default = []):
"""Helper to create a select.
Args:
android: what to return if compiling for Android.
ios: what to return if compiling for iOS.
default: what to return otherwise.
Returns:
the `android` list for Android compilation and the
`default` list otherwise.
"""
return select({
":android": android,
":apple": ios,
"//conditions:default": default,
})
def micore_tf_copts():
"""C options for Tensorflow builds.
Returns:
a list of copts which must be used by each cc_library which
refers to Tensorflow. Enables the library to compile both for
Android and for Linux.
"""
return tf_copts(android_optimization_level_override = None) + tf_opts_nortti_if_android() + [
"-Wno-narrowing",
"-Wno-sign-compare",
"-Wno-overloaded-virtual",
] + micore_if(
android = [
# Set a define so Tensorflow's register_types.h
# adopts to support a rich set of types, to be pruned by
# selective registration.
"-DSUPPORT_SELECTIVE_REGISTRATION",
# Selective registration uses constexprs with recursive
# string comparisons; that can lead to compiler errors, so
# we increase the constexpr recursion depth.
"-fconstexpr-depth=1024",
],
) + selects.with_or({
# If building for armeabi-v7a, and if compilation_mode is 'fastbuild'
# or 'dbg' then forcefully add -Oz to the list compiler options.
# Without it, some TF dependencies can't build (b/112286436). If
# compilation_mode is 'opt' then rely on the toolchain default.
(
":armeabi_v7a_and_fastbuild",
":armeabi_v7a_and_dbg",
): ["-Oz"],
"//conditions:default": [],
})
def micore_tf_deps():
"""Dependencies for Tensorflow builds.
Returns:
list of dependencies which must be used by each cc_library
which refers to Tensorflow. Enables the library to compile both for
Android and for Linux. Use this macro instead of directly
declaring dependencies on Tensorflow.
"""
return micore_if(
android = [
# Link to library which does not contain any ops.
"@org_tensorflow//tensorflow/core:portable_tensorflow_lib_lite",
"@gemmlowp//:eight_bit_int_gemm",
"@fft2d//:fft2d",
],
ios = [
"@org_tensorflow//tensorflow/core:portable_tensorflow_lib",
"@gemmlowp//:eight_bit_int_gemm",
"@fft2d//:fft2d",
],
default = [
# Standard references for Tensorflow when building for Linux. We use
# an indirection via the alias targets below, to facilitate whitelisting
# these deps in the mobile license presubmit checks.
"@local_config_tf//:libtensorflow_framework",
"@local_config_tf//:tf_header_lib",
],
)