| # This file is licensed under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| ############################################################################### |
| # Common flags that apply to all configurations. |
| # Use sparingly for things common to all compilers and platforms. |
| ############################################################################### |
| |
| # Flip off to disable MODULE.bazel until we're ready. |
| # https://github.com/llvm/llvm-project/issues/55924 |
| common --enable_bzlmod=false |
| |
| # Prevent invalid caching if input files are modified during a build. |
| build --experimental_guard_against_concurrent_changes |
| |
| # Automatically enable --config=(linux|macos|windows) based on the host |
| build --enable_platform_specific_config |
| |
| # In opt mode, bazel by default builds both PIC and non-PIC object files for |
| # tests vs binaries. We don't need this feature and it slows down opt builds |
| # considerably. |
| # TODO: Remove platform specifics we're on bazel 7.x https://github.com/bazelbuild/bazel/issues/12439 |
| # Apple platforms always enable pic so this flag is unnecessary anyways |
| build:linux --force_pic |
| build:windows --force_pic |
| |
| # Shared objects take up more space. With fast linkers and binaries that aren't |
| # super large, the benefits of shared objects are minimal. |
| build --dynamic_mode=off |
| |
| # Rely on compiler flags to compile with debug info/strip rather than stripping |
| # based on compilation_mode. |
| build --strip=never |
| |
| # Add layering check to all projects. |
| build --features=layering_check |
| |
| # Opt out of legacy lax behavior implicitly exporting files that are rule inputs |
| # with default visibility. |
| # See: https://bazel.build/reference/be/functions#exports_files |
| build --incompatible_no_implicit_file_export |
| |
| # Enable so downstream users can flip this flag globally, this should |
| # eventually become the default |
| common --incompatible_disallow_empty_glob |
| |
| # TODO: Remove once we move to bazel 7.x |
| build --experimental_cc_shared_library |
| |
| # Disabling runfiles links drastically increases performance in slow disk IO |
| # situations Do not build runfile trees by default. If an execution strategy |
| # relies on runfile symlink tree, the tree is created on-demand. See: |
| # https://github.com/bazelbuild/bazel/issues/6627 and |
| # https://github.com/bazelbuild/bazel/commit/03246077f948f2790a83520e7dccc2625650e6df |
| build --build_runfile_links=false |
| |
| ############################################################################### |
| # Options to select different strategies for linking potential dependent |
| # libraries. The default leaves it disabled. |
| ############################################################################### |
| |
| build:zlib_external --repo_env=BAZEL_LLVM_ZLIB_STRATEGY=external |
| build:zlib_system --repo_env=BAZEL_LLVM_ZLIB_STRATEGY=system |
| |
| ############################################################################### |
| # Options for "generic_clang" builds: these options should generally apply to |
| # builds using a Clang-based compiler, and default to the `clang` executable on |
| # the `PATH`. While these are provided for convenience and may serve as a |
| # reference, it would be preferable for users to configure an explicit C++ |
| # toolchain instead of relying on `.bazelrc` files. |
| ############################################################################### |
| |
| # Set the default compiler to the `clang` binary on the `PATH`. |
| build:generic_clang --repo_env=CC=clang |
| |
| # C++17 standard version is required. |
| build:generic_clang --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 |
| |
| # Use `-Wall` for Clang. |
| build:generic_clang --copt=-Wall --host_copt=-Wall |
| |
| # The Clang available on MacOS has a warning that isn't clean on MLIR code. The |
| # warning doesn't show up with more recent Clangs, so just disable for now. |
| build:generic_clang --cxxopt=-Wno-range-loop-analysis --host_cxxopt=-Wno-range-loop-analysis |
| |
| # Build errors are not a helpful way to enforce deprecation in-repo and it is |
| # not the point of the Bazel build to catch usage of deprecated APIs. |
| build:generic_clang --copt=-Wno-deprecated --host_copt=-Wno-deprecated |
| |
| # lld links faster than other linkers. Assume that anybody using clang also has |
| # lld available. |
| build:generic_clang --linkopt=-fuse-ld=lld --host_linkopt=-fuse-ld=lld |
| |
| ############################################################################### |
| # Options for "generic_gcc" builds: these options should generally apply to |
| # builds using a GCC-based compiler, and default to the `gcc` executable on |
| # the `PATH`. While these are provided for convenience and may serve as a |
| # reference, it would be preferable for users to configure an explicit C++ |
| # toolchain instead of relying on `.bazelrc` files. |
| ############################################################################### |
| |
| # Set the default compiler to the `gcc` binary on the `PATH`. |
| build:generic_gcc --repo_env=CC=gcc |
| |
| # C++17 standard version is required. |
| build:generic_gcc --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 |
| |
| # Build errors are not a helpful way to enforce deprecation in-repo and it is |
| # not the point of the Bazel build to catch usage of deprecated APIs. |
| build:generic_gcc --copt=-Wno-deprecated --host_copt=-Wno-deprecated |
| |
| # Disable GCC warnings that are noisy and/or false positives on LLVM code. |
| # These need to be global as some code triggering these is in header files. |
| build:generic_gcc --copt=-Wno-unused-parameter --host_copt=-Wno-unused-parameter |
| build:generic_gcc --copt=-Wno-comment --host_copt=-Wno-comment |
| build:generic_gcc --cxxopt=-Wno-class-memaccess --host_cxxopt=-Wno-class-memaccess |
| build:generic_gcc --copt=-Wno-maybe-uninitialized --host_copt=-Wno-maybe-uninitialized |
| build:generic_gcc --copt=-Wno-misleading-indentation --host_copt=-Wno-misleading-indentation |
| |
| ############################################################################### |
| # Generic Windows flags common to both MSVC and Clang. |
| ############################################################################### |
| |
| # C++17 standard version is required. |
| build:windows --cxxopt=/std:c++17 --host_cxxopt=/std:c++17 |
| |
| # Other generic dialect flags. |
| build:windows --copt=/Zc:strictStrings --host_copt=/Zc:strictStrings |
| build:windows --copt=/Oi --host_copt=/Oi |
| build:windows --cxxopt=/Zc:rvalueCast --host_cxxopt=/Zc:rvalueCast |
| |
| # Use the more flexible bigobj format for C++ files that have lots of symbols. |
| build:windows --cxxopt=/bigobj --host_cxxopt=/bigobj |
| |
| ############################################################################### |
| # Windows specific flags for building with MSVC. |
| ############################################################################### |
| |
| build:msvc --config=windows |
| |
| build:msvc --copt=/WX --host_copt=/WX # Treat warnings as errors... |
| # ...but disable the ones that are violated |
| build:msvc --copt=/wd4141 --host_copt=/wd4141 # inline used more than once |
| build:msvc --copt=/wd4244 --host_copt=/wd4244 # conversion type -> type |
| build:msvc --copt=/wd4267 --host_copt=/wd4267 # conversion size_t -> type |
| build:msvc --copt=/wd4273 --host_copt=/wd4273 # multiple definitions with different dllimport |
| build:msvc --copt=/wd4319 --host_copt=/wd4319 # zero-extending after complement |
| build:msvc --copt=/wd4624 --host_copt=/wd4624 # destructor was implicitly defined as deleted |
| build:msvc --copt=/wd4804 --host_copt=/wd4804 # comparisons between bool and int |
| build:msvc --copt=/wd4805 --host_copt=/wd4805 # comparisons between bool and int |
| |
| build:msvc --linkopt=/WX --host_linkopt=/WX # Treat warnings as errors... |
| # ...but disable the ones that are violated. |
| build:msvc --linkopt=/IGNORE:4001 --host_linkopt=/IGNORE:4001 # no object files |
| |
| ############################################################################### |
| # Options for Windows `clang-cl` builds. |
| ############################################################################### |
| |
| # We just start with the baseline Windows config as `clang-cl` doesn't accept |
| # some of the generic Clang flags. |
| build:clang-cl --config=windows |
| |
| # Switch from MSVC to the `clang-cl` compiler. |
| build:clang-cl --compiler=clang-cl |
| |
| # Use Clang's internal warning flags instead of the ones that sometimes map |
| # through to MSVC's flags. |
| build:clang-cl --copt=/clang:-Wall --host_copt=/clang:-Wall |
| build:clang-cl --copt=/clang:-Werror --host_copt=/clang:-Werror |
| |
| # This doesn't appear to be enforced by any upstream bot. |
| build:clang-cl --copt=/clang:-Wno-unused --host_copt=/clang:-Wno-unused |
| |
| # There appears to be an unused constant in GoogleTest on Windows. |
| build:clang-cl --copt=/clang:-Wno-unused-const-variable --host_copt=/clang:-Wno-unused-const-variable |
| |
| # Disable some warnings hit even with `clang-cl` in Clang's own code. |
| build:clang-cl --copt=/clang:-Wno-inconsistent-dllimport --host_copt=/clang:-Wno-inconsistent-dllimport |
| build:clang-cl --cxxopt=/clang:-Wno-c++11-narrowing --host_cxxopt=/clang:-Wno-c++11-narrowing |
| |
| ############################################################################### |
| # Options for continuous integration. |
| ############################################################################### |
| |
| # -O1 tries to provide a reasonable tradeoff between compile times and runtime |
| # performance. However, if we start running more tests (e.g. all of |
| # check-clang) we may want more optimizations. |
| # Note for anybody considering using --compilation_mode=opt in CI, it builds |
| # most files twice, one PIC version for shared libraries in tests, and one |
| # non-PIC version for binaries. |
| build:ci --copt=-O1 |
| |
| # Use clang. |
| build:ci --config=generic_clang |
| |
| # Speedup bazel using a ramdisk. |
| build:ci --sandbox_base=/dev/shm |
| |
| # Use system's mpfr and pfm instead of building it from source. |
| # This is non hermetic but helps with compile time. |
| build:ci --@llvm-project//libc:mpfr=system |
| build:ci --@llvm-project//llvm:pfm=system |
| |
| # Don't build/test targets tagged with "nobuildkite". |
| build:ci --build_tag_filters=-nobuildkite |
| build:ci --test_tag_filters=-nobuildkite |
| |
| # Show as many errors as possible. |
| build:ci --keep_going |
| |
| # Show test errors. |
| build:ci --test_output=errors |
| |
| # Only show failing tests to reduce output |
| build:ci --test_summary=terse |
| |
| # Attempt to work around intermittent issue while trying to fetch remote blob. |
| # See e.g. https://github.com/bazelbuild/bazel/issues/18694. |
| build:ci --remote_default_exec_properties=cache-silo-key=CleverPeafowl |
| |
| ############################################################################### |
| |
| # The user.bazelrc file is not checked in but available for local mods. |
| # Always keep this at the end of the file so that user flags override. |
| try-import %workspace%/user.bazelrc |