-
Notifications
You must be signed in to change notification settings - Fork 630
/
iree.bazelrc
407 lines (348 loc) · 19 KB
/
iree.bazelrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################
# Common flags that apply to all configurations.
# Use sparingly for things common to all compilers and platforms.
###############################################################################
# Prevent invalid caching if input files are modified during a build.
build --experimental_guard_against_concurrent_changes
# Default to optimized builds
# Override via: "-c dbg" or --compilation_mode=dbg
build --compilation_mode=opt
# Used in TensorFlow, so we have to enable it here as well.
common --experimental_repo_remote_exec
# Actually printing output on errors is... a useful default
test --test_output=errors
# Includes a startup option, so we can't put this in a config, but it doesn't
# hurt anything on non-windows platforms.
# Enables unix-style runfiles link trees on Windows. Requires enabling symlink
# permissions: Enable Developer Mode in the Developer Settings page of the
# system settings. See
# https://docs.bazel.build/versions/master/windows.html#enable-symlink-support
# and https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
startup --windows_enable_symlinks
build --enable_runfiles
# TODO: Transition to the explicit init_py mechanism. See #2405
# This is commented out while considering transition path but left as a
# breadcrumb.
# build --incompatible_default_to_explicit_init_py
###############################################################################
# Options for "generic_gcc" builds
###############################################################################
# C++14 standard version is required.
build:generic_gcc --cxxopt=-std=c++14 --host_cxxopt=-std=c++14
# Default to adding back asserts in optimized builds.
# This is a good compromise between runtime and debugability.
build:generic_gcc --copt=-UNDEBUG
# Disable warnings we don't care about or that generally have a low signal/noise
# ratio.
build:generic_gcc --copt=-Wno-unused-but-set-parameter
build:generic_gcc --copt=-Wno-comment
build:generic_gcc --copt=-Wno-attributes
###############################################################################
# Options for "generic_clang" builds: these options should generally apply to
# either clang or gcc and are curated based on need.
###############################################################################
# C++14 standard version is required.
build:generic_clang --cxxopt=-std=c++14 --host_cxxopt=-std=c++14
# Default to adding back asserts in optimized builds.
# This is a good compromise between runtime and debugability.
build:generic_clang --copt=-UNDEBUG
# Treat warnings as errors...
build:generic_clang --copt=-Werror --host_copt=-Werror
# ...and silence them outside of the workspace.
build:generic_clang --per_file_copt=external/.*@-w
# ...and silence them on host builds. There is no host_per_file_copt and
# everything we build in the host configuration we either also build in the
# target configuration or is external, so we can't control it.
# If/when Bazel supports --host_per_file_copt, we could use that instead:
# https://github.com/bazelbuild/bazel/issues/12406.
# Would need to then make all the --copt below duplicated with --host_copt.
build:generic_clang --host_copt=-w
# Set clang diagnostics. These largely match the set of warnings used within
# Google. They have not been audited super carefully by the IREE team but are
# generally thought to be a good set and consistency with those used internally
# is very useful when importing. If you feel that some of these should be
# different, please raise an issue!
# Please keep these in sync with build_tools/cmake/iree_copts.cmake
build:generic_clang --copt=-Wall
# Disable warnings we don't care about or that generally have a low signal/noise
# ratio.
build:generic_clang --copt=-Wno-ambiguous-member-template
build:generic_clang --copt=-Wno-char-subscripts
build:generic_clang --copt=-Wno-deprecated-declarations
build:generic_clang --copt=-Wno-extern-c-compat # Matches upstream. Cannot impact due to extern C inclusion method.
build:generic_clang --copt=-Wno-gnu-alignof-expression
build:generic_clang --copt=-Wno-gnu-variable-sized-type-not-at-end
build:generic_clang --copt=-Wno-ignored-optimization-argument
build:generic_clang --copt=-Wno-invalid-offsetof # Technically UB but needed for intrusive ptrs
build:generic_clang --copt=-Wno-invalid-source-encoding
build:generic_clang --copt=-Wno-mismatched-tags
build:generic_clang --copt=-Wno-pointer-sign
build:generic_clang --copt=-Wno-reserved-user-defined-literal
build:generic_clang --copt=-Wno-return-type-c-linkage
build:generic_clang --copt=-Wno-self-assign-overloaded
build:generic_clang --copt=-Wno-sign-compare
build:generic_clang --copt=-Wno-signed-unsigned-wchar
build:generic_clang --copt=-Wno-strict-overflow
build:generic_clang --copt=-Wno-trigraphs
build:generic_clang --copt=-Wno-unknown-pragmas
build:generic_clang --copt=-Wno-unknown-warning-option
build:generic_clang --copt=-Wno-unused-command-line-argument
build:generic_clang --copt=-Wno-unused-const-variable
build:generic_clang --copt=-Wno-unused-function
build:generic_clang --copt=-Wno-unused-local-typedef
build:generic_clang --copt=-Wno-unused-private-field
build:generic_clang --copt=-Wno-user-defined-warnings
# Explicitly enable some additional warnings.
# Some of these aren't on by default, or under -Wall, or are subsets of warnings
# turned off above.
build:generic_clang --copt=-Wctad-maybe-unsupported
build:generic_clang --copt=-Wfloat-overflow-conversion
build:generic_clang --copt=-Wfloat-zero-conversion
build:generic_clang --copt=-Wfor-loop-analysis
build:generic_clang --copt=-Wformat-security
build:generic_clang --copt=-Wgnu-redeclared-enum
build:generic_clang --copt=-Wimplicit-fallthrough
build:generic_clang --copt=-Winfinite-recursion
build:generic_clang --copt=-Wliteral-conversion
build:generic_clang --copt=-Wnon-virtual-dtor
build:generic_clang --copt=-Woverloaded-virtual
build:generic_clang --copt=-Wself-assign
build:generic_clang --copt=-Wstring-conversion
build:generic_clang --copt=-Wtautological-overlap-compare
build:generic_clang --copt=-Wthread-safety
build:generic_clang --copt=-Wthread-safety-beta
build:generic_clang --copt=-Wunused-comparison
build:generic_clang --copt=-Wvla
###############################################################################
# Additional options for MacOS based clang builds.
# Try to keep these scoped to exclusions for third_party code and prefer
# fixing issues local to the project.
###############################################################################
build:macos_clang --config=generic_clang
build:macos_clang --per_file_copt=tensorflow,iree_tf_compiler@-Wno-unused-variable
build:macos_clang --per_file_copt=tensorflow,iree_tf_compiler,utils@-Wno-range-loop-analysis
build:macos_clang_release --config=macos_clang
build:macos_clang_release --per_file_copt=tensorflow,iree_tf_compiler@-Wno-unused-variable
build:macos_clang_release --per_file_copt=tensorflow,iree_tf_compiler,utils@-Wno-range-loop-analysis
build:macos_clang_release --compilation_mode=opt
build:macos_clang_release --copt=-DNDEBUG
###############################################################################
# Additional options for release builds. These do *not* automatically pull in
# the corresponding compiler config (e.g. generic_clang) because this is likely
# to already be set in the user's configured.bazelrc and setting a config twice
# causes flags to be passed twice.
###############################################################################
build:generic_clang_release --compilation_mode=opt
build:generic_clang_release --copt=-DNDEBUG
build:generic_clang_release --linkopt=-Wl,--strip-all
build:generic_gcc_release --compilation_mode=opt
build:generic_gcc_release --copt=-DNDEBUG
build:generic_gcc_release --linkopt=-Wl,--strip-all
# MSVC doesn't store symbols in the binary (they're in separate .pdb files), so
# nothing needs to be stripped.
build:msvc_release --compilation_mode=opt
###############################################################################
# Options for building with address sanitizer.
# https://github.com/google/sanitizers/wiki/AddressSanitizer
###############################################################################
# ASAN (address sanitizer)
# https://clang.llvm.org/docs/AddressSanitizer.html
build:asan --config=sanitizer
build:asan --features=asan
build:asan --copt=-fsanitize=address
build:asan --copt=-fsanitize-address-use-after-scope
build:asan --linkopt=-fsanitize=address
build:asan --cc_output_directory_tag=asan
build:asan --copt=-DADDRESS_SANITIZER
# MSAN (memory sanitizer)
# https://clang.llvm.org/docs/MemorySanitizer.html
build:msan --config=sanitizer
build:msan --features=msan
build:msan --copt=-fsanitize=memory
build:msan --copt=-fsanitize-memory-track-origins
build:msan --linkopt=-fsanitize=memory
build:msan --cc_output_directory_tag=msan
build:msan --copt=-DMEMORY_SANITIZER
# TSAN (thread sanitizer)
# https://clang.llvm.org/docs/ThreadSanitizer.html
build:tsan --config=sanitizer
build:tsan --features=tsan
build:tsan --copt=-fsanitize=thread
build:tsan --linkopt=-fsanitize=thread
build:tsan --cc_output_directory_tag=tsan
build:tsan --copt=-DTHREAD_SANITIZER
# UBSAN (undefined behavior sanitizer)
# https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
build:ubsan --config=sanitizer
build:ubsan --features=ubsan
build:ubsan --copt=-fsanitize=undefined
build:ubsan --linkopt=-fsanitize=undefined
build:ubsan --linkopt=-lubsan
build:ubsan --cc_output_directory_tag=ubsan
# Don't strip debug info
build:sanitizer --strip=never
# Ignore settings of `linkopts = ["-static"]` which can screw up the sanitizer.
# We don't use this in IREE (that's what linkstatic is for), but it could show
# up in dependencies.
build:sanitizer --force_ignore_dash_static
# sanitizer tests tend to take longer, so increase the timeouts
build:sanitizer --test_timeout=120,600,1800,-1
# Get better stack traces
build:sanitizer --copt=-fno-omit-frame-pointer
###############################################################################
# Architecture specific options
###############################################################################
# Enable some default cpu flags for x86 optimization.
build:x86opt --copt=-mavx2
###############################################################################
# Configuration for building remotely using Remote Build Execution (RBE)
# https://cloud.google.com/remote-build-execution/
# Based on https://github.com/bazelbuild/bazel-toolchains/blob/master/bazelrc/bazel-1.0.0.bazelrc
# Currently in development only usable by CI.
###############################################################################
# Options for connecting to the IREE GCP remote build project. These are
# repeated separately in each config to avoid warnings about configs being
# expanded more than once.
# Enable authentication. This will pick up application default credentials by
# default. You can use --google_credentials=some_file.json to use a service
# account credential instead.
build:rbe --google_default_credentials=true
# Point to the remote instance constructed in the iree-oss project
build:rbe --remote_instance_name=projects/iree-oss/instances/default_instance
# Depending on how many machines are in the remote execution instance, setting
# this higher can make builds faster by allowing more jobs to run in parallel.
# Setting it too high can result in jobs that timeout, however, while waiting
# for a remote machine to execute them.
# Our pool autoscales from 25 to 200 jobs
build:rbe --jobs=150
# Flags related to specifying the platform, toolchain and java properties.
# These flags must be adapted to work with toolchain containers other than
# rbe-ubuntu16-04
# References to "rbe_default" matches rbe_autoconfig(name="rbe_default") in
# WORKSPACE
build:rbe --host_javabase=@rbe_default//java:jdk
build:rbe --javabase=@rbe_default//java:jdk
build:rbe --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
build:rbe --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
build:rbe --crosstool_top=@rbe_default//cc:toolchain
build:rbe --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
# Platform flags:
# The toolchain container used for execution is defined in the target indicated
# by "extra_execution_platforms", "host_platform" and "platforms".
# More about platforms: https://docs.bazel.build/versions/master/platforms.html
build:rbe --extra_toolchains=@rbe_default//config:cc-toolchain
build:rbe --extra_execution_platforms=@rbe_default//config:platform
build:rbe --host_platform=@rbe_default//config:platform
build:rbe --platforms=@rbe_default//config:platform
build:rbe --define=EXECUTOR=remote
# Enable remote execution so actions are performed on the remote systems.
build:rbe --remote_executor=grpcs://remotebuildexecution.googleapis.com
# Enforce stricter environment rules, which eliminates some non-hermetic
# behavior and therefore improves both the remote cache hit rate and the
# correctness and repeatability of the build.
build:rbe --incompatible_strict_action_env=true
# Set a higher timeout value, just in case.
build:rbe --remote_timeout=3600
# Local disk cache is incompatible with remote execution (for obvious reasons).
build:rbe --disk_cache=""
###############################################################################
# Configuration for uploading build results to Result Store UI
# https://cloud.google.com/remote-build-execution/docs/results-ui/getting-started-results-ui
# Can be used either with or without --config=rbe.
###############################################################################
# Options for connecting to the IREE GCP remote build project. These are
# repeated separately in each config to avoid warnings about configs being
# expanded more than once.
# Enable authentication. This will pick up application default credentials by
# default. You can use --google_credentials=some_file.json to use a service
# account credential instead.
build:rs --google_default_credentials=true
# Point to the remote instance constructed in the iree-oss project
build:rs --remote_instance_name=projects/iree-oss/instances/default_instance
build:rs --bes_backend="buildeventservice.googleapis.com"
build:rs --bes_results_url="https://source.cloud.google.com/results/invocations/"
build:rs --project_id=iree-oss
###############################################################################
# Windows specific flags for building with VC.
###############################################################################
build:_msvc_base --define=iree_is_msvc=true
# Bazel gets confused and sometimes loses track of Bash.
build:_msvc_base --action_env BAZEL_SH='bash'
# Disable warnings for dependencies. We don't control these.
# absl forces /W3 in their copts, so we exclude them to avoid D9025
build:_msvc_base --per_file_copt=+external,-com_google_absl@/w
# Find the source of truth for these in iree_copts.cmake.
build:_msvc_base --copt=/DWIN32_LEAN_AND_MEAN
build:_msvc_base --copt=/DNOMINMAX
build:_msvc_base --copt=/D_USE_MATH_DEFINES
build:_msvc_base --copt=/D_CRT_SECURE_NO_WARNINGS
build:_msvc_base --copt=/D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
build:_msvc_base --copt=/EHsc
build:_msvc_base --copt=/bigobj
build:_msvc_base --copt=/wd4200
build:_msvc_base --copt=/wd4018
build:_msvc_base --copt=/wd4146 # operator applied to unsigned type, result still unsigned
build:_msvc_base --copt=/wd4244 # possible loss of data
build:_msvc_base --copt=/wd4267 # initializing: possible loss of data
build:_msvc_base --copt=/wd4005 # allow: macro redefinition
build:_msvc_base --copt=/wd4065 # allow: switch statement contains 'default' but no 'case' labels
build:_msvc_base --copt=/wd4141 # allow: inline used more than once
build:_msvc_base --copt=/wd4624 # allow: destructor was implicitly defined as deleted
build:_msvc_base --copt=/wd5105 # macro expansion producing 'defined' has undefined behavior
# And some more explicit disables. For some reason the `/w` on external doesn't
# work for these, maybe they come from headers?
# new warning with the standards-compliant preprocessor. winbase itself is not standards-compliant
build:_msvc_base --per_file_copt=mkl_dnn@/wd4551 # missing argument list
build:_msvc_base --per_file_copt=mkl_dnn@/wd4068 # unknown pragma
build:_msvc_base --per_file_copt=farmhash@/wd4319 # zero extending to T of greater size
build:_msvc_base --linkopt=/IGNORE:4217 # mismatch import/export declspec
build:_msvc_base --linkopt=/IGNORE:4001 # no object files
# Flags to make tensorflow build.
# Some of these are also of general use and fine to enable globally for windows.
build:_msvc_base --copt=/arch:AVX
# Host and target are the same in windows so don't waste time building both.
build:_msvc_base --distinct_host_configuration=false
# TensorFlow requires the "monolithic" build mode for now on Windows.
build:_msvc_base --define framework_shared_object=false
# Workaround WinGDI.h defining `ERROR`, which conflicts with logging macros.
# Note that IREE and TensorFlow both `#undef ERROR` and define their own
# separate logging constants with the same name, but IREE needs the Windows
# "graphics device interface" (GDI) for certain GUI sample projects.
build:_msvc_base --per_file_copt=tensorflow@-DNOGDI
# Disables TensorFlow eigen bloat and reduces compile times.
build:_msvc_base --define=override_eigen_strong_inline=true
# Another TensorFlow flag from their config script.
build:_msvc_base --define with_default_optimizations=true
# Separate configs for different MSVC versions as we might want slightly different options.
build:msvc2017 --config=_msvc_base
build:msvc2019 --config=_msvc_base
# TensorFlow builds depend on this flag, but it doesn't appear to work with
# gmock in some of our unit tests, so only enable it for TensorFlow files.
# MSVC (Windows): Standards-conformant preprocessor mode
# See https://docs.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview
build:msvc2017 --per_file_copt=tensorflow@/experimental:preprocessor
# It's also called different things in different MSVC versions and will spam the logs
# if we use the old name with a newer msvc.
build:msvc2019 --per_file_copt=tensorflow@/Zc:preprocessor
# Assume the newer version and alias to --config=windows
build:msvc --config=msvc2019
build:windows --config=msvc
###############################################################################
# disable metal stuff for non Darwin platforms
###############################################################################
common:non_darwin --deleted_packages=//iree/hal/metal,//iree/hal/metal/registration
build:non_darwin --test_tag_filters="-driver=metal"
###############################################################################