1# This file is based on tensorflow's (v2.2.0) .bazelrc found here:
2# https://github.com/tensorflow/tensorflow/blob/v2.2.0/.bazelrc
3
4# Sets the default Apple platform to macOS.
5
6build --apple_platform_type=macos
7
8# Enable using platform specific build settings
9build --enable_platform_specific_config
10
11# Flag to enable remote config. Required starting from TF 2.2.
12common --experimental_repo_remote_exec
13
14# For workaround https://github.com/bazelbuild/bazel/issues/8772 with Bazel >= 0.29.1
15build --java_toolchain=//third_party/toolchains/java:tf_java_toolchain
16build --host_java_toolchain=//third_party/toolchains/java:tf_java_toolchain
17
18# Suppress C++ compiler warnings, otherwise build logs become 10s of MBs.
19build:android --copt=-w
20build:linux --copt=-w
21build:macos --copt=-w
22build:windows --copt=/w
23
24# Android workspace configurations. Should be replaced by an interative configure in the future.
25build --action_env ANDROID_NDK_HOME
26build --action_env ANDROID_NDK_API_LEVEL
27build --action_env ANDROID_BUILD_TOOLS_VERSION
28build --action_env ANDROID_SDK_API_LEVEL
29build --action_env ANDROID_SDK_HOME
30
31# Android configs. Bazel needs to have --cpu and --fat_apk_cpu both set to the
32# target CPU to build transient dependencies correctly. See
33# https://docs.bazel.build/versions/master/user-manual.html#flag--fat_apk_cpu
34
35build:android --crosstool_top=//external:android/crosstool
36build:android --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
37build:android_arm --config=android
38build:android_arm --cpu=armeabi-v7a
39build:android_arm --fat_apk_cpu=armeabi-v7a
40build:android_arm64 --config=android
41build:android_arm64 --cpu=arm64-v8a
42build:android_arm64 --fat_apk_cpu=arm64-v8a
43build:android_x86 --config=android
44build:android_x86 --cpu=x86
45build:android_x86 --fat_apk_cpu=x86
46build:android_x86_64 --config=android
47build:android_x86_64 --cpu=x86_64
48build:android_x86_64 --fat_apk_cpu=x86_64
49
50# iOS configs for each architecture and the fat binary builds.
51build:ios --apple_platform_type=ios
52build:ios --apple_bitcode=embedded --copt=-fembed-bitcode
53build:ios --copt=-Wno-c++11-narrowing
54build:ios_armv7 --config=ios
55build:ios_armv7 --cpu=ios_armv7
56build:ios_arm64 --config=ios
57build:ios_arm64 --cpu=ios_arm64
58build:ios_x86_64 --config=ios
59build:ios_x86_64 --cpu=ios_x86_64
60build:ios_fat --config=ios
61build:ios_fat --ios_multi_cpus=armv7,arm64,x86_64
62
63# By default, build TF in C++ 14 mode.
64build:android --cxxopt=-std=c++14
65build:android --host_cxxopt=-std=c++14
66build:ios --cxxopt=-std=c++14
67build:ios --host_cxxopt=-std=c++14
68build:linux --cxxopt=-std=c++14
69build:linux --host_cxxopt=-std=c++14
70build:macos --cxxopt=-std=c++14
71build:macos --host_cxxopt=-std=c++14
72build:windows --cxxopt=/std:c++14
73build:windows --host_cxxopt=/std:c++14
74
75# Config to use a mostly-static build and disable modular op registration
76# support (this will revert to loading TensorFlow with RTLD_GLOBAL in Python).
77# By default, TensorFlow will build with a dependence on
78# //tensorflow:libtensorflow_framework.so.
79build:monolithic --define framework_shared_object=false
80
81# For projects which use TensorFlow as part of a Bazel build process, putting
82# nothing in a bazelrc will default to a monolithic build. The following line
83# opts in to modular op registration support by default.
84build --define framework_shared_object=true
85
86# ASAN build
87build:asan --strip=never
88build:asan --copt -fsanitize=address
89build:asan --copt -DADDRESS_SANITIZER
90build:asan --copt -O1
91build:asan --copt -g
92build:asan --copt -fno-omit-frame-pointer
93build:asan --linkopt -fsanitize=address
94
95# Flags for open source build, always set to be true.
96build --define open_source_build=true
97test --define open_source_build=true
98
99# dbg config, as a shorthand for '--config=opt -c dbg'
100build:dbg --config=opt -c dbg
101# for now, disable arm_neon. see: https://github.com/tensorflow/tensorflow/issues/33360
102build:dbg --cxxopt -DTF_LITE_DISABLE_X86_NEON
103# AWS SDK must be compiled in release mode. see: https://github.com/tensorflow/tensorflow/issues/37498
104build:dbg --copt -DDEBUG_BUILD
105
106build --define=use_fast_cpp_protos=true
107build --define=allow_oversize_protos=true
108
109build --spawn_strategy=standalone
110build -c opt
111
112# Adding "--cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0" creates parity with TF
113# compilation options. It also addresses memory use due to
114# copy-on-write semantics of std::strings of the older ABI.
115build --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0
116
117# Make Bazel print out all options from rc files.
118build --announce_rc
119
120# Other build flags.
121build --define=grpc_no_ares=true
122
123# See https://github.com/bazelbuild/bazel/issues/7362 for information on what
124# --incompatible_remove_legacy_whole_archive flag does.
125# This flag is set to true in Bazel 1.0 and newer versions. We tried to migrate
126# Tensorflow to the default, however test coverage wasn't enough to catch the
127# errors.
128# There is ongoing work on Bazel team's side to provide support for transitive
129# shared libraries. As part of migrating to transitive shared libraries, we
130# hope to provide a better mechanism for control over symbol exporting, and
131# then tackle this issue again.
132#
133# TODO: Remove this line once TF doesn't depend on Bazel wrapping all library
134# archives in -whole_archive -no_whole_archive.
135build --noincompatible_remove_legacy_whole_archive
136
137# These are bazel 2.0's incompatible flags. Tensorflow needs to use bazel 2.0.0
138# to use cc_shared_library, as part of the Tensorflow Build Improvements RFC:
139# https://github.com/tensorflow/community/pull/179
140build --noincompatible_prohibit_aapt1
141
142# Build TF with C++ 17 features.
143build:c++17 --cxxopt=-std=c++1z
144build:c++17 --cxxopt=-stdlib=libc++
145build:c++1z --config=c++17
146
147# Enable using platform specific build settings, except when cross-compiling for
148# mobile platforms.
149build --enable_platform_specific_config
150build:android --noenable_platform_specific_config
151build:ios --noenable_platform_specific_config
152
153# Suppress all warning messages.
154build:short_logs --output_filter=DONT_MATCH_ANYTHING
155build:verbose_logs --output_filter=
156build --config=short_logs
157
158# Options to build TensorFlow 1.x or 2.x.
159build:v1 --define=tf_api_version=1
160build:v2 --define=tf_api_version=2
161build:v1 --action_env=TF2_BEHAVIOR=0
162build:v2 --action_env=TF2_BEHAVIOR=1
163build --config=v2
164test --config=v2
165
166# Options from ./configure
167try-import %workspace%/.tf_configure.bazelrc
168
169# Put user-specific options in .bazelrc.user
170try-import %workspace%/.bazelrc.user
171