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