blame
# Bazel configuration
# =========================================================
# https://github.com/bazelbuild/bazel/issues/18958
common --noenable_bzlmod
build --enable_platform_specific_config
coverage --combined_report=lcov
coverage --instrumentation_filter=-'_fuzz_test'
test --test_output=errors
test --test_summary=terse
test --test_verbose_timeout_warnings
# Bazel deprecations
# =========================================================
# See: https://docs.bazel.build/versions/main/backward-compatibility.html
# https://github.com/bazelbuild/bazel/issues/12821
common --nolegacy_external_runfiles
build --incompatible_config_setting_private_default_visibility
build --incompatible_disallow_empty_glob
build --incompatible_enforce_config_setting_visibility
# Third-party configuration
# =========================================================
# Don't require a system Python installation.
build --@rules_python//python/config_settings:bootstrap_impl=script
# Compiler configuration
# =========================================================
# Bazel + Clang supports this really cool features where it checks that you're
# not relying on transitive dependencies, so let's enable that!
build:linux --features=layering_check
build:linux --cxxopt='-std=c++2b'
build:linux --host_cxxopt='-std=c++2b'
build:linux --cxxopt='-fno-rtti'
build:linux --host_cxxopt='-fno-rtti'
build:macos --apple_crosstool_top=@local_config_apple_cc//:toolchain
build:macos --crosstool_top=@local_config_apple_cc//:toolchain
build:macos --host_crosstool_top=@local_config_apple_cc//:toolchain
build:macos --features=layering_check
build:macos --cxxopt='-std=c++2b'
build:macos --host_cxxopt='-std=c++2b'
build:macos --cxxopt='-fno-rtti'
build:macos --host_cxxopt='-fno-rtti'
build:macos --objccopt='-ObjC++'
build:macos --objccopt='-std=c++2b'
build:windows --enable_runfiles
build:windows --action_env=LOCALAPPDATA # Quirk for running vswhere, remove when icu no-longer needed
build:windows --action_env=ProgramData # Quirk for running vswhere, remove when icu no-longer needed
build:windows --cxxopt='/std:c++latest'
build:windows --host_cxxopt='/std:c++latest'
build:windows --cxxopt='/GR-' # Disable rtti.
build:windows --host_cxxopt='/GR-'
build:windows --copt='/permissive-' # Conform to the standard.
build:windows --host_copt='/permissive-'
build:windows --copt='/Zc:__cplusplus' # Report the real supported C++ version, not just C++98.
build:windows --host_copt='/Zc:__cplusplus'
build:windows --copt='-utf-8' # Use UTF-8 as the source and execution character sets.
build:windows --host_copt='-utf-8'
# Special build options
# =========================================================
# https://bazel.build/configure/windows#clang
build:clang-cl --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl
build:clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
build:clang-cl --platforms=//:x64_windows-clang-cl
build:libc++ --cxxopt=-stdlib=libc++
build:libc++ --host_cxxopt=-stdlib=libc++
build:libc++ --cxxopt=-fexperimental-library
build:libc++ --host_cxxopt=-fexperimental-library
build:libc++ --linkopt=-stdlib=libc++
build:libc++ --host_linkopt=-stdlib=libc++
# https://releases.llvm.org/16.0.0/projects/libcxx/docs/ReleaseNotes.html#upcoming-deprecations-and-removals
build:libc++ --copt=-D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES
build:libc++ --host_copt=-D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES
# Some of this is from "Can I run AddressSanitizer with more aggressive diagnostics enabled?"
# on https://github.com/google/sanitizers/wiki/AddressSanitizer#faq and some is from
# https://chromium.googlesource.com/external/github.com/grpc/grpc/+/4e9206f48c91e17f43856b016b12f59dd5118293/tools/bazel.rc
build:asan --strip=never
build:asan --features=asan
build:asan --copt=-fsanitize-address-use-after-scope
build:asan --copt=-fno-omit-frame-pointer
build:asan --action_env=ASAN_OPTIONS=detect_odr_violations=2:detect_leaks=1:strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1
build:asan --action_env=LSAN_OPTIONS=report_objects=1
build:tsan --strip=never
build:tsan --features=tsan
build:tsan --action_env=TSAN_OPTIONS=halt_on_error=1
build:ubsan --strip=never
build:ubsan --features=ubsan
build:ubsan --copt=-fno-omit-frame-pointer
build:ubsan --linkopt=-fsanitize-link-c++-runtime
build:ubsan --host_linkopt=-fsanitize-link-c++-runtime
build:ubsan --action_env=UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1
build:clang-coverage
build:clang-coverage --action_env=BAZEL_USE_LLVM_NATIVE_COVERAGE=1
build:clang-coverage --experimental_generate_llvm_lcov
build:clang16-coverage --config=clang-coverage
build:clang16-coverage --action_env=BAZEL_LLVM_COV=llvm-cov-16
build:clang16-coverage --action_env=GCOV=llvm-profdata-16
build:clang18-coverage --config=clang-coverage
build:clang18-coverage --action_env=BAZEL_LLVM_COV=llvm-cov-18
build:clang18-coverage --action_env=GCOV=llvm-profdata-18
build:clang-tidy --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspect
build:clang-tidy --output_groups=report
build:clang-tidy --@bazel_clang_tidy//:clang_tidy_config=//:clang_tidy_config
# Cross-compilation
# =========================================================
# See: https://github.com/uber/hermetic_cc_toolchain/issues/134
build:zig-cross --sandbox_add_mount_pair=/tmp
# build:zig-cross --sandbox_add_mount_pair=/var/tmp # macOS
# build:zig-cross --sandbox_add_mount_pair=C:\Temp # Windows
build:zig-cross --dynamic_mode=off
# TODO(robinlinden): Make this transitive so we can tag the no-cross targets
# instead of everything depending on no-cross targets.
# * icu's pkgdata stuff doesn't work w/ cross-compilation.
# * sfml links against host libraries: GL, X11.
# * py_test targets have host dependencies.
build:zig-cross --build_tag_filters=-no-cross
build:zig-cross --test_tag_filters=-no-cross
build:zig-cross-musl --config=zig-cross
build:zig-cross-musl --copt=-fPIC
# TODO(robinlinden): asio assumes __GLIBC__ is defined.
build:zig-cross-musl --copt=-Wno-error=undef
build:linux-amd64-musl --config=zig-cross-musl
build:linux-amd64-musl --platforms=@zig_sdk//platform:linux_amd64
build:linux-amd64-musl --extra_toolchains=@zig_sdk//toolchain:linux_amd64_musl
build:linux-aarch64-musl --config=zig-cross-musl
build:linux-aarch64-musl --platforms=@zig_sdk//platform:linux_arm64
build:linux-aarch64-musl --extra_toolchains=@zig_sdk//toolchain:linux_arm64_musl
build:macos-amd64 --config=zig-cross
build:macos-amd64 --platforms=@zig_sdk//platform:darwin_amd64
build:macos-amd64 --extra_toolchains=@zig_sdk//toolchain:darwin_amd64
build:macos-aarch64 --config=zig-cross
build:macos-aarch64 --platforms=@zig_sdk//platform:darwin_aarch64
build:macos-aarch64 --extra_toolchains=@zig_sdk//toolchain:darwin_arm64
build:windows-amd64 --config=zig-cross
build:windows-amd64 --platforms=@zig_sdk//platform:windows_amd64
build:windows-amd64 --extra_toolchains=@zig_sdk//toolchain:windows_amd64
build:wasi-wasm --config=zig-cross
build:wasi-wasm --platforms=@zig_sdk//platform:wasip1_wasm
build:wasi-wasm --extra_toolchains=@zig_sdk//toolchain:wasip1_wasm
# wasi doesn't support exceptions yet:
# https://github.com/WebAssembly/wasi-sdk/tree/f1ebc52a74394cdf885d03bfde13899b3d5c6d2d?tab=readme-ov-file#notable-limitations
build:wasi-wasm --copt=-fno-exceptions
# Fuzzing options
# =========================================================
# https://github.com/bazelbuild/rules_fuzzing says to also set
# @rules_fuzzing//fuzzing:cc_engine_sanitizer=asan or similar which sets things
# like -fsanitize=asan. We don't use this as we set these options ourselves.
# See:
# * https://github.com/bazelbuild/rules_fuzzing/blob/9865504b549e86ccfb4713afcc1914c982567f05/fuzzing/BUILD
# * https://github.com/bazelbuild/rules_fuzzing/blob/9865504b549e86ccfb4713afcc1914c982567f05/fuzzing/private/instrum_opts.bzl
build:libfuzzer --@rules_fuzzing//fuzzing:cc_engine=@rules_fuzzing//fuzzing/engines:libfuzzer
build:libfuzzer --@rules_fuzzing//fuzzing:cc_engine_instrumentation=libfuzzer
build:honggfuzz --@rules_fuzzing//fuzzing:cc_engine=@rules_fuzzing//fuzzing/engines:honggfuzz
build:honggfuzz --@rules_fuzzing//fuzzing:cc_engine_instrumentation=honggfuzz
# Misc configuration
# =========================================================
try-import %workspace%/.bazelrc.local