blob: a52e21e87ee0ff04305d05026b3dbc3b3bf74307 [file] [log] [blame]
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:251# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
2# See https://llvm.org/LICENSE.txt for license information.
3# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4
5###############################################################################
6# Common flags that apply to all configurations.
7# Use sparingly for things common to all compilers and platforms.
8###############################################################################
Keith Smileyf1fe4512024-08-13 01:06:059
10# Flip off to disable MODULE.bazel until we're ready.
11# https://github.com/llvm/llvm-project/issues/55924
Nick Desaulniers5877e5b2024-12-10 21:07:5212common --enable_bzlmod=false --enable_workspace
Keith Smileyf1fe4512024-08-13 01:06:0513
Keith Smileybedbaff2024-12-10 22:09:0814# TODO: Remove lit test reliance on this
15common --legacy_external_runfiles
16
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:2517# Prevent invalid caching if input files are modified during a build.
18build --experimental_guard_against_concurrent_changes
19
Keith Smiley4b077ed2024-04-04 22:10:5220# Automatically enable --config=(linux|macos|windows) based on the host
21build --enable_platform_specific_config
22
Arthur Eubanks2698be02022-09-26 01:21:3523# In opt mode, bazel by default builds both PIC and non-PIC object files for
24# tests vs binaries. We don't need this feature and it slows down opt builds
25# considerably.
Keith Smiley4b077ed2024-04-04 22:10:5226# TODO: Remove platform specifics we're on bazel 7.x https://github.com/bazelbuild/bazel/issues/12439
27# Apple platforms always enable pic so this flag is unnecessary anyways
28build:linux --force_pic
29build:windows --force_pic
Arthur Eubanks2698be02022-09-26 01:21:3530
31# Shared objects take up more space. With fast linkers and binaries that aren't
32# super large, the benefits of shared objects are minimal.
33build --dynamic_mode=off
34
Arthur Eubanks7a8b9302022-09-26 01:49:4935# Rely on compiler flags to compile with debug info/strip rather than stripping
36# based on compilation_mode.
37build --strip=never
38
Guillaume Chatelet8de802e2023-02-09 21:36:5939# Add layering check to all projects.
40build --features=layering_check
41
Benoit Jacob1c532b52023-06-09 02:33:5142# Opt out of legacy lax behavior implicitly exporting files that are rule inputs
43# with default visibility.
44# See: https://bazel.build/reference/be/functions#exports_files
45build --incompatible_no_implicit_file_export
46
Keith Smiley72c729f2024-03-22 16:51:2047# Enable so downstream users can flip this flag globally, this should
48# eventually become the default
49common --incompatible_disallow_empty_glob
50
Keith Smiley4b077ed2024-04-04 22:10:5251# TODO: Remove once we move to bazel 7.x
52build --experimental_cc_shared_library
53
Keith Smiley28a2f572024-10-21 21:01:2954# Disabling runfiles links drastically increases performance in slow disk IO
55# situations Do not build runfile trees by default. If an execution strategy
56# relies on runfile symlink tree, the tree is created on-demand. See:
57# https://github.com/bazelbuild/bazel/issues/6627 and
58# https://github.com/bazelbuild/bazel/commit/03246077f948f2790a83520e7dccc2625650e6df
59build --build_runfile_links=false
60
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:2561###############################################################################
62# Options to select different strategies for linking potential dependent
63# libraries. The default leaves it disabled.
64###############################################################################
65
66build:zlib_external --repo_env=BAZEL_LLVM_ZLIB_STRATEGY=external
67build:zlib_system --repo_env=BAZEL_LLVM_ZLIB_STRATEGY=system
68
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:2569###############################################################################
70# Options for "generic_clang" builds: these options should generally apply to
71# builds using a Clang-based compiler, and default to the `clang` executable on
72# the `PATH`. While these are provided for convenience and may serve as a
73# reference, it would be preferable for users to configure an explicit C++
74# toolchain instead of relying on `.bazelrc` files.
75###############################################################################
76
77# Set the default compiler to the `clang` binary on the `PATH`.
78build:generic_clang --repo_env=CC=clang
79
Benjamin Kramer2d2ad022022-08-06 19:47:4480# C++17 standard version is required.
81build:generic_clang --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:2582
Mehdi Amini61745682022-11-09 00:42:4183# Use `-Wall` for Clang.
84build:generic_clang --copt=-Wall --host_copt=-Wall
Geoffrey Martin-Nobleef727392022-02-01 01:50:5985
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:2586# The Clang available on MacOS has a warning that isn't clean on MLIR code. The
87# warning doesn't show up with more recent Clangs, so just disable for now.
88build:generic_clang --cxxopt=-Wno-range-loop-analysis --host_cxxopt=-Wno-range-loop-analysis
89
Geoffrey Martin-Nobleef727392022-02-01 01:50:5990# Build errors are not a helpful way to enforce deprecation in-repo and it is
91# not the point of the Bazel build to catch usage of deprecated APIs.
92build:generic_clang --copt=-Wno-deprecated --host_copt=-Wno-deprecated
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:2593
Arthur Eubanks76b1e832022-08-11 21:15:4794# lld links faster than other linkers. Assume that anybody using clang also has
95# lld available.
96build:generic_clang --linkopt=-fuse-ld=lld --host_linkopt=-fuse-ld=lld
97
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:2598###############################################################################
99# Options for "generic_gcc" builds: these options should generally apply to
100# builds using a GCC-based compiler, and default to the `gcc` executable on
101# the `PATH`. While these are provided for convenience and may serve as a
102# reference, it would be preferable for users to configure an explicit C++
103# toolchain instead of relying on `.bazelrc` files.
104###############################################################################
105
106# Set the default compiler to the `gcc` binary on the `PATH`.
107build:generic_gcc --repo_env=CC=gcc
108
Benjamin Kramer2d2ad022022-08-06 19:47:44109# C++17 standard version is required.
110build:generic_gcc --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25111
Geoffrey Martin-Nobleef727392022-02-01 01:50:59112# Build errors are not a helpful way to enforce deprecation in-repo and it is
113# not the point of the Bazel build to catch usage of deprecated APIs.
114build:generic_gcc --copt=-Wno-deprecated --host_copt=-Wno-deprecated
115
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25116# Disable GCC warnings that are noisy and/or false positives on LLVM code.
117# These need to be global as some code triggering these is in header files.
118build:generic_gcc --copt=-Wno-unused-parameter --host_copt=-Wno-unused-parameter
119build:generic_gcc --copt=-Wno-comment --host_copt=-Wno-comment
120build:generic_gcc --cxxopt=-Wno-class-memaccess --host_cxxopt=-Wno-class-memaccess
121build:generic_gcc --copt=-Wno-maybe-uninitialized --host_copt=-Wno-maybe-uninitialized
122build:generic_gcc --copt=-Wno-misleading-indentation --host_copt=-Wno-misleading-indentation
123
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25124###############################################################################
Chandler Carruth112dc162021-10-16 07:46:19125# Generic Windows flags common to both MSVC and Clang.
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25126###############################################################################
127
Benjamin Kramer2d2ad022022-08-06 19:47:44128# C++17 standard version is required.
129build:windows --cxxopt=/std:c++17 --host_cxxopt=/std:c++17
Chandler Carruth0198d762021-11-02 02:52:38130
131# Other generic dialect flags.
132build:windows --copt=/Zc:strictStrings --host_copt=/Zc:strictStrings
133build:windows --copt=/Oi --host_copt=/Oi
134build:windows --cxxopt=/Zc:rvalueCast --host_cxxopt=/Zc:rvalueCast
135
136# Use the more flexible bigobj format for C++ files that have lots of symbols.
137build:windows --cxxopt=/bigobj --host_cxxopt=/bigobj
Chandler Carruth112dc162021-10-16 07:46:19138
139###############################################################################
140# Windows specific flags for building with MSVC.
141###############################################################################
142
143build:msvc --config=windows
144
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25145build:msvc --copt=/WX --host_copt=/WX # Treat warnings as errors...
146# ...but disable the ones that are violated
147build:msvc --copt=/wd4141 --host_copt=/wd4141 # inline used more than once
148build:msvc --copt=/wd4244 --host_copt=/wd4244 # conversion type -> type
149build:msvc --copt=/wd4267 --host_copt=/wd4267 # conversion size_t -> type
150build:msvc --copt=/wd4273 --host_copt=/wd4273 # multiple definitions with different dllimport
151build:msvc --copt=/wd4319 --host_copt=/wd4319 # zero-extending after complement
152build:msvc --copt=/wd4624 --host_copt=/wd4624 # destructor was implicitly defined as deleted
153build:msvc --copt=/wd4804 --host_copt=/wd4804 # comparisons between bool and int
154build:msvc --copt=/wd4805 --host_copt=/wd4805 # comparisons between bool and int
155
156build:msvc --linkopt=/WX --host_linkopt=/WX # Treat warnings as errors...
157# ...but disable the ones that are violated.
158build:msvc --linkopt=/IGNORE:4001 --host_linkopt=/IGNORE:4001 # no object files
159
Chandler Carruth112dc162021-10-16 07:46:19160###############################################################################
161# Options for Windows `clang-cl` builds.
162###############################################################################
163
164# We just start with the baseline Windows config as `clang-cl` doesn't accept
165# some of the generic Clang flags.
166build:clang-cl --config=windows
167
168# Switch from MSVC to the `clang-cl` compiler.
169build:clang-cl --compiler=clang-cl
170
Chandler Carruth112dc162021-10-16 07:46:19171# Use Clang's internal warning flags instead of the ones that sometimes map
172# through to MSVC's flags.
173build:clang-cl --copt=/clang:-Wall --host_copt=/clang:-Wall
174build:clang-cl --copt=/clang:-Werror --host_copt=/clang:-Werror
175
176# This doesn't appear to be enforced by any upstream bot.
177build:clang-cl --copt=/clang:-Wno-unused --host_copt=/clang:-Wno-unused
178
179# There appears to be an unused constant in GoogleTest on Windows.
180build:clang-cl --copt=/clang:-Wno-unused-const-variable --host_copt=/clang:-Wno-unused-const-variable
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25181
Chandler Carruth0198d762021-11-02 02:52:38182# Disable some warnings hit even with `clang-cl` in Clang's own code.
183build:clang-cl --copt=/clang:-Wno-inconsistent-dllimport --host_copt=/clang:-Wno-inconsistent-dllimport
184build:clang-cl --cxxopt=/clang:-Wno-c++11-narrowing --host_cxxopt=/clang:-Wno-c++11-narrowing
185
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25186###############################################################################
Arthur Eubanks77ce95a2022-08-17 16:10:47187# Options for continuous integration.
188###############################################################################
189
190# -O1 tries to provide a reasonable tradeoff between compile times and runtime
191# performance. However, if we start running more tests (e.g. all of
192# check-clang) we may want more optimizations.
Arthur Eubanks9a83f382022-08-22 16:36:23193# Note for anybody considering using --compilation_mode=opt in CI, it builds
194# most files twice, one PIC version for shared libraries in tests, and one
195# non-PIC version for binaries.
Arthur Eubanks77ce95a2022-08-17 16:10:47196build:ci --copt=-O1
197
Arthur Eubanksd5a57ab2022-08-22 17:12:10198# Use clang.
199build:ci --config=generic_clang
200
201# Speedup bazel using a ramdisk.
202build:ci --sandbox_base=/dev/shm
203
Jordan Rupprecht4aa77692022-12-28 16:13:20204# Use system's mpfr and pfm instead of building it from source.
Guillaume Chateletd856e5f2022-11-18 10:14:37205# This is non hermetic but helps with compile time.
206build:ci --@llvm-project//libc:mpfr=system
Jordan Rupprecht4aa77692022-12-28 16:13:20207build:ci --@llvm-project//llvm:pfm=system
Guillaume Chateletd856e5f2022-11-18 10:14:37208
Arthur Eubanksd5a57ab2022-08-22 17:12:10209# Don't build/test targets tagged with "nobuildkite".
210build:ci --build_tag_filters=-nobuildkite
211build:ci --test_tag_filters=-nobuildkite
212
213# Show as many errors as possible.
214build:ci --keep_going
215
216# Show test errors.
217build:ci --test_output=errors
218
Keith Smileyfbaec0f2024-06-04 19:23:06219# Only show failing tests to reduce output
220build:ci --test_summary=terse
221
Christian Sigga70d9992024-09-03 09:08:33222# Attempt to work around intermittent issue while trying to fetch remote blob.
223# See e.g. https://github.com/bazelbuild/bazel/issues/18694.
Christian Siggdf4746d2024-09-03 16:15:27224build:ci --remote_default_exec_properties=cache-silo-key=CleverPeafowl
Christian Sigga70d9992024-09-03 09:08:33225
Arthur Eubanks77ce95a2022-08-17 16:10:47226###############################################################################
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25227
Geoffrey Martin-Noble4aeb2e62021-05-18 22:42:25228# The user.bazelrc file is not checked in but available for local mods.
229# Always keep this at the end of the file so that user flags override.
230try-import %workspace%/user.bazelrc