mirror of https://github.com/mongodb/mongo
434 lines
18 KiB
Plaintext
434 lines
18 KiB
Plaintext
# Reference docs: https://bazel.build/run/bazelrc
|
|
|
|
# coverity need to use the local command without remote execution auto
|
|
# enabled.
|
|
info --config=local
|
|
|
|
# Don't use legacy toolchain resolution.
|
|
common --incompatible_enable_cc_toolchain_resolution
|
|
|
|
# Improves build performance after first clean pull by
|
|
# about 1 minute on developer machines
|
|
common --experimental_remote_merkle_tree_cache
|
|
|
|
# allow multiple execution infos to be set
|
|
common --incompatible_modify_execution_info_additive
|
|
|
|
# This makes builds more hermetic by preventing environment variables from leaking into the execution of rules
|
|
common --incompatible_strict_action_env=true
|
|
|
|
# allows us to use python rules. This is needed because of the bug:
|
|
# https://github.com/bazelbuild/bazel/issues/4327
|
|
common --experimental_inprocess_symlink_creation
|
|
|
|
# cc_library transitively propagates link opts. The build uses cc_shared_library to avoid this when linking
|
|
# dynamically.
|
|
common --experimental_cc_shared_library
|
|
|
|
# Reuse sandboxes to save sandbox execution and deletion times.
|
|
common --experimental_reuse_sandbox_directories
|
|
|
|
# Disabled until we do the work to move over to bzlmod
|
|
common --enable_bzlmod=false
|
|
|
|
# Enable Build without the Bytes
|
|
common --remote_download_outputs=toplevel
|
|
|
|
# Files we always want to download for debugging and error checking
|
|
common --remote_download_regex=.*\.(dwo|h|cpp)$
|
|
|
|
common:macos --repo_env=BAZEL_NO_APPLE_CPP_TOOLCHAIN=1
|
|
|
|
common:windows --features=-compiler_param_file
|
|
|
|
|
|
# while in hybrid build state, using local unsandboxed linking should be faster. When most of our link
|
|
# targets have been converted (i.e. unittest binaries) and we can BWOB, remote linking should be faster
|
|
# in those cases:
|
|
common --strategy=CppLink=local
|
|
common --strategy=CppArchive=local
|
|
common --strategy=SolibSymlink=local
|
|
common --strategy=StripDebuginfo=local
|
|
common --strategy=ExtractDebuginfo=local
|
|
common --strategy=TestRunner=local
|
|
common --modify_execution_info=^(TestRunner|CppLink|CppArchive|SolibSymlink|ExtractDebuginfo|StripDebuginfo)$=+no-remote-cache
|
|
|
|
# Aliases for config flags
|
|
common --flag_alias=linkstatic=//bazel/config:linkstatic
|
|
common --flag_alias=compiler_type=//bazel/config:compiler_type
|
|
common --flag_alias=linker=//bazel/config:linker
|
|
common --flag_alias=use_gdbserver=//bazel/config:use_gdbserver
|
|
common --flag_alias=libunwind=//bazel/config:libunwind
|
|
common --flag_alias=spider_monkey_dbg=//bazel/config:spider_monkey_dbg
|
|
common --flag_alias=allocator=//bazel/config:allocator
|
|
common --flag_alias=use_lldbserver=//bazel/config:use_lldbserver
|
|
common --flag_alias=opt=//bazel/config:opt
|
|
common --flag_alias=dbg=//bazel/config:dbg
|
|
common --flag_alias=debug_symbols=//bazel/config:debug_symbols
|
|
common --flag_alias=thin_lto=//bazel/config:thin_lto
|
|
common --flag_alias=separate_debug=//bazel/config:separate_debug
|
|
common --flag_alias=use_wait_for_debugger=//bazel/config:use_wait_for_debugger
|
|
common --flag_alias=use_ocsp_stapling=//bazel/config:use_ocsp_stapling
|
|
common --flag_alias=use_disable_ref_track=//bazel/config:use_disable_ref_track
|
|
common --flag_alias=use_wiredtiger=//bazel/config:use_wiredtiger
|
|
common --flag_alias=use_glibcxx_debug=//bazel/config:use_glibcxx_debug
|
|
common --flag_alias=use_tracing_profiler=//bazel/config:use_tracing_profiler
|
|
common --flag_alias=build_otel=//bazel/config:build_otel
|
|
common --flag_alias=use_libcxx=//bazel/config:use_libcxx
|
|
common --flag_alias=detect_odr_violations=//bazel/config:detect_odr_violations
|
|
common --flag_alias=shared_archive=//bazel/config:shared_archive
|
|
common --flag_alias=skip_archive=//bazel/config:skip_archive
|
|
common --flag_alias=streams_release_build=//bazel/config:streams_release_build
|
|
common --flag_alias=disable_streams=//bazel/config:disable_streams
|
|
common --flag_alias=release=//bazel/config:release
|
|
common --flag_alias=build_enterprise=//bazel/config:build_enterprise
|
|
common --flag_alias=visibility_support=//bazel/config:visibility_support
|
|
common --flag_alias=disable_warnings_as_errors=//bazel/config:disable_warnings_as_errors
|
|
common --flag_alias=gcov=//bazel/config:gcov
|
|
common --flag_alias=pgo_profile=//bazel/config:pgo_profile
|
|
common --flag_alias=server_js=//bazel/config:server_js
|
|
common --flag_alias=ssl=//bazel/config:ssl
|
|
common --flag_alias=js_engine=//bazel/config:js_engine
|
|
common --flag_alias=use_sasl_client=//bazel/config:use_sasl_client
|
|
common --flag_alias=enterprise_feature_all=//bazel/config:enterprise_feature_all
|
|
common --flag_alias=link_timeout=//bazel/config:link_timeout
|
|
common --flag_alias=compress_debug_compile=//bazel/config:compress_debug_compile
|
|
common --flag_alias=include_mongot=//bazel/config:include_mongot
|
|
# This flag will only work if you pass it on the command line as it is parsed by bazelisk pre-bazel script
|
|
common --flag_alias=include_autogenerated_targets=//bazel/config:include_autogenerated_targets
|
|
common --flag_alias=bolt=//bazel/config:bolt
|
|
common --flag_alias=dwarf_version=//bazel/config:dwarf_version
|
|
common --flag_alias=http_client=//bazel/config:http_client
|
|
common --flag_alias=developer_dir=//bazel/config:developer_dir
|
|
common --flag_alias=asan=//bazel/config:asan
|
|
common --flag_alias=fsan=//bazel/config:fsan
|
|
common --flag_alias=msan=//bazel/config:msan
|
|
common --flag_alias=lsan=//bazel/config:lsan
|
|
common --flag_alias=tsan=//bazel/config:tsan
|
|
common --flag_alias=ubsan=//bazel/config:ubsan
|
|
common --flag_alias=dbg_level=//bazel/config:dbg_level
|
|
common --flag_alias=mongo_toolchain_version=//bazel/config:mongo_toolchain_version
|
|
|
|
#############################################################################################################################
|
|
# BUILD 'PROFILES' - this is the area to set up configurations of flags to be used by developers.
|
|
# --enable_platform_specific_config=true is passed to every profile so more hardware specific
|
|
# configurations can override the defaults in these profiles. These represent the only supported flag configurations,
|
|
# and should be the only thing passed on the command line in most scenarios
|
|
|
|
# Every profile should explicitly specify every option used by every other profile, with the exception of the
|
|
# profile modifiers
|
|
|
|
# The base profiles are fast, opt and debug - these reflect the output directories artifacts will get placed into
|
|
# and match the bazel compilation modes
|
|
|
|
# Should a profile modify another profile, it should be named {original_profile}_{modifier_name} - example fast_static
|
|
|
|
# You can use .bazelrc.local to modify the default build type you want to use locally
|
|
|
|
# Current Profiles:
|
|
# fastbuild
|
|
# dbg
|
|
# dbg_san
|
|
# dbg_tsan
|
|
# opt
|
|
|
|
# Bazel will by default strip on fastbuild, if we want stripping we will handle it ourselves
|
|
common --strip=never
|
|
|
|
# Current default profile - fastbuild - this matches the config options of fastbuild. It does not just set --config=fastbuild
|
|
# To avoid the bazel warning about passing multiple configs
|
|
common -c fastbuild
|
|
common --fission=yes
|
|
common --//bazel/config:compress_debug_compile=True
|
|
common --//bazel/config:opt=off
|
|
common --//bazel/config:dbg=True
|
|
common --//bazel/config:dbg_level=1
|
|
common --//bazel/config:debug_symbols=True
|
|
common --//bazel/config:separate_debug=False
|
|
common --//bazel/config:compiler_type=clang
|
|
common --//bazel/config:linkstatic=True
|
|
common --//bazel/config:build_enterprise=True
|
|
common --//bazel/config:release=False
|
|
common --//bazel/config:skip_archive=True
|
|
common --//bazel/config:allocator=auto
|
|
common --//bazel/config:asan=False
|
|
common --//bazel/config:tsan=False
|
|
common --//bazel/config:ubsan=False
|
|
common --//bazel/config:libunwind=auto
|
|
common --jobs=300
|
|
common:macos --jobs=auto
|
|
common:windows --jobs=auto
|
|
common --enable_platform_specific_config=true
|
|
|
|
# Profile for building fast with minimal debuggability - the build is fast ##################################################
|
|
--config=fastbuild
|
|
common:fastbuild -c fastbuild
|
|
common:fastbuild --fission=yes
|
|
common:fastbuild --//bazel/config:compress_debug_compile=True
|
|
common:fastbuild --//bazel/config:opt=off
|
|
common:fastbuild --//bazel/config:dbg=True
|
|
common:fastbuild --//bazel/config:dbg_level=1
|
|
common:fastbuild --//bazel/config:debug_symbols=True
|
|
common:fastbuild --//bazel/config:separate_debug=False
|
|
common:fastbuild --//bazel/config:compiler_type=clang
|
|
common:fastbuild --//bazel/config:linkstatic=True
|
|
common:fastbuild --//bazel/config:build_enterprise=True
|
|
common:fastbuild --//bazel/config:release=False
|
|
common:fastbuild --//bazel/config:skip_archive=True
|
|
common:fastbuild --//bazel/config:allocator=auto
|
|
common:fastbuild --//bazel/config:asan=False
|
|
common:fastbuild --//bazel/config:tsan=False
|
|
common:fastbuild --//bazel/config:ubsan=False
|
|
common:fastbuild --//bazel/config:libunwind=auto
|
|
common:fastbuild --enable_platform_specific_config=true
|
|
|
|
# Profile for building highly debuggable code - the build is slow, the code is slow, the binaries are large #################
|
|
--config=dbg
|
|
common:dbg -c dbg
|
|
common:dbg --fission=yes
|
|
common:dbg --//bazel/config:compress_debug_compile=True
|
|
common:dbg --//bazel/config:opt=off
|
|
common:dbg --//bazel/config:dbg=True
|
|
common:dbg --//bazel/config:dbg_level=2
|
|
common:dbg --//bazel/config:debug_symbols=True
|
|
common:dbg --//bazel/config:separate_debug=False
|
|
common:dbg --//bazel/config:compiler_type=clang
|
|
common:dbg --//bazel/config:linkstatic=True
|
|
common:dbg --//bazel/config:build_enterprise=True
|
|
common:dbg --//bazel/config:release=False
|
|
common:dbg --//bazel/config:skip_archive=True
|
|
common:dbg --//bazel/config:allocator=auto
|
|
common:dbg --//bazel/config:asan=False
|
|
common:dbg --//bazel/config:tsan=False
|
|
common:dbg --//bazel/config:ubsan=False
|
|
common:dbg --//bazel/config:libunwind=auto
|
|
common:dbg --enable_platform_specific_config=true
|
|
|
|
# Build with address and undefined sanitizers
|
|
--config=dbg_aubsan
|
|
common:dbg_aubsan --config=dbg
|
|
common:dbg_aubsan --//bazel/config:opt=debug
|
|
common:dbg_aubsan --//bazel/config:linkstatic=False
|
|
common:dbg_aubsan --//bazel/config:allocator=system
|
|
common:dbg_aubsan --//bazel/config:asan=True
|
|
common:dbg_aubsan --//bazel/config:ubsan=True
|
|
common:dbg_aubsan --enable_platform_specific_config=true
|
|
|
|
# Build with thread sanitizers
|
|
--config=dbg_tsan
|
|
common:dbg_tsan --config=dbg
|
|
common:dbg_tsan --//bazel/config:opt=debug
|
|
common:dbg_tsan --//bazel/config:linkstatic=False
|
|
common:dbg_tsan --//bazel/config:allocator=system
|
|
common:dbg_tsan --//bazel/config:tsan=True
|
|
common:dbg_tsan --//bazel/config:libunwind=off
|
|
common:dbg_tsan --//bazel/config:skip_archive=False
|
|
common:dbg_tsan --enable_platform_specific_config=true
|
|
|
|
# Profile for building optimized code - the build is slow, the code is fast #################################################
|
|
--config=opt
|
|
common:opt -c opt
|
|
common:opt --fission=yes
|
|
common:opt --//bazel/config:compress_debug_compile=True
|
|
common:opt --//bazel/config:opt=on
|
|
common:opt --//bazel/config:dbg=False
|
|
common:opt --//bazel/config:dbg_level=2
|
|
common:opt --//bazel/config:debug_symbols=True
|
|
common:opt --//bazel/config:separate_debug=False
|
|
common:opt --//bazel/config:compiler_type=gcc
|
|
common:opt --//bazel/config:linkstatic=True
|
|
common:opt --//bazel/config:build_enterprise=True
|
|
common:opt --//bazel/config:release=False
|
|
common:opt --//bazel/config:skip_archive=True
|
|
common:opt --//bazel/config:allocator=auto
|
|
common:opt --//bazel/config:asan=False
|
|
common:opt --//bazel/config:tsan=False
|
|
common:opt --//bazel/config:ubsan=False
|
|
common:opt --//bazel/config:libunwind=auto
|
|
common:opt --enable_platform_specific_config=true
|
|
|
|
# TODO: Build the code as we would release it
|
|
# common:opt_release --config=opt
|
|
# common:opt_release --//bazel/config:separate_debug=True
|
|
# common:opt_release --//bazel/config:build_enterprise=True
|
|
# common:opt_release --//bazel/config:release=True
|
|
# TODO: Open Source community build flags
|
|
# common:community
|
|
#############################################################################################################################
|
|
|
|
--config=remote_link
|
|
common:remote_link --strategy=CppLink=remote
|
|
common:remote_link --strategy=CppArchive=remote
|
|
common:remote_link --strategy=SolibSymlink=remote
|
|
common:remote_link --strategy=ExtractDebugInfo=remote
|
|
common:remote_link --strategy=StripDebugInfo=remote
|
|
common:remote_link --features=-thin_archive
|
|
|
|
# Coverage
|
|
coverage --config=dbg
|
|
coverage --compiler_type=clang
|
|
coverage --linkstatic=False
|
|
coverage --combined_report=lcov
|
|
coverage --experimental_use_llvm_covmap
|
|
coverage --experimental_generate_llvm_lcov
|
|
coverage --remote_download_outputs=all
|
|
coverage --config=no-remote-exec
|
|
coverage --fission=no
|
|
|
|
# Don't detect the native toolchain on linux, only use the hermetic toolchains.
|
|
# Opt out of this by passing --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=0 on the command line.
|
|
common:linux --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
|
|
|
|
# Disable the default compiler flags to avoid certain flags that conflict with flags we setup.
|
|
common:windows --features=-smaller_binary
|
|
common:windows --features=-frame_pointer
|
|
common:windows --features=-opt
|
|
common:windows --features=-dbg
|
|
common:windows --features=-fastbuild
|
|
common:windows --features=-dynamic_link_msvcrt
|
|
|
|
# Only use fission and debug compression on Linux
|
|
common:windows --fission=no
|
|
common:windows --//bazel/config:compress_debug_compile=False
|
|
common:macos --fission=no
|
|
common:macos --//bazel/config:compress_debug_compile=False
|
|
|
|
# Dynamic linking on Windows (DLL generation) is currently not supported.
|
|
common:windows --//bazel/config:linkstatic=True
|
|
|
|
# The only Windows compiler we support is MSVC.
|
|
common:windows --//bazel/config:compiler_type=msvc
|
|
|
|
# Windows and MacOS do not use the custom toolchain config, so the compiler flags need to be set here.
|
|
common:macos --cxxopt=-std=c++20
|
|
common:windows --cxxopt=/std:c++20
|
|
|
|
# Set the windows version to win10 by default
|
|
# TODO(SERVER-87654): We may want to add support for other Windows versions in the future.
|
|
common:windows --cxxopt=-D_WIN32_WINNT=0x0A00
|
|
common:windows --cxxopt=-DBOOST_USE_WINAPI_VERSION=0x0A00
|
|
common:windows --cxxopt=-DNTDDI_VERSION=0x0A000000
|
|
# TODO(SERVER-93585): Remove this and fix s2 to work with Bazel's default which
|
|
# sets COMPILER_MSVC on windows.
|
|
common:windows --cxxopt=-UCOMPILER_MSVC
|
|
|
|
# Remote execution and caching is the default, but only mongodb employees will be able to access
|
|
# the engflow cluster. External builders should use the --config=local option
|
|
|
|
# Enable remote build execution:
|
|
common:linux --remote_executor=grpcs://sodalite.cluster.engflow.com
|
|
|
|
# Enable remote cache (also necessary for remote build execution):
|
|
common --remote_cache=grpcs://sodalite.cluster.engflow.com
|
|
common --bes_backend=grpcs://sodalite.cluster.engflow.com
|
|
common --bes_results_url=https://sodalite.cluster.engflow.com/invocation/
|
|
common --remote_cache_compression=true
|
|
common --grpc_keepalive_time=30s
|
|
common --nolegacy_important_outputs
|
|
common --bes_keywords=repo:mongo
|
|
common --remote_upload_local_results=False
|
|
|
|
# Settings specific for clang-tidy
|
|
--config=clang-tidy
|
|
common:clang-tidy --//bazel/config:clang_tidy_toolchain_version=v4
|
|
common:clang-tidy --config=dbg
|
|
common:clang-tidy --build_tag_filters=-third_party,-mongo-tidy-tests
|
|
common:clang-tidy --//bazel/config:compiler_type=clang
|
|
common:clang-tidy --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspect
|
|
common:clang-tidy --output_groups=report
|
|
common:clang-tidy --@bazel_clang_tidy//:clang_tidy_config=//:clang_tidy_config_strict
|
|
common:clang-tidy --@bazel_clang_tidy//:clang_tidy_executable=//:clang_tidy
|
|
common:clang-tidy --@bazel_clang_tidy//:clang_tidy_additional_deps=//:toolchain_files
|
|
common:clang-tidy --@bazel_clang_tidy//:clang_tidy_plugin_deps=//src/mongo/tools/mongo_tidy_checks:mongo_tidy_checks
|
|
|
|
# clang-tidy config using the v4 toolchain
|
|
--config=clang-tidy-v4
|
|
common:clang-tidy-v4 --config=clang-tidy
|
|
common:clang-tidy --//bazel/config:mongo_toolchain_version=v4
|
|
|
|
# clang-tidy config using the v5 toolchain
|
|
--config=clang-tidy-v5
|
|
common:clang-tidy-v5 --config=clang-tidy
|
|
common:clang-tidy-v5 --//bazel/config:mongo_toolchain_version=v5
|
|
common:clang-tidy-v5 --//bazel/config:clang_tidy_toolchain_version=v5
|
|
|
|
--config=mod-scanner
|
|
common:mod-scanner --config=dbg
|
|
common:mod-scanner --build_tag_filters=-third_party,-mongo-tidy-tests
|
|
common:mod-scanner --//bazel/config:compiler_type=clang
|
|
common:mod-scanner --//bazel/config:mongo_toolchain_version=v5
|
|
common:mod-scanner --output_groups=report
|
|
common:mod-scanner --aspects //modules_poc:mod_scanner.bzl%mod_scanner_aspect
|
|
common:mod-scanner --remote_download_regex=.*\.mod_scanner_decls.json$
|
|
|
|
# if you don't have access to the remote execution cluster above, use the local config
|
|
# described below.
|
|
# pass local config to SCons like:
|
|
# > buildscripts/scons.py BAZEL_FLAGS=--config=local <others args>
|
|
# or if invoking bazel directly pass "--config=local" on the bazel command line
|
|
--config=local
|
|
common:local --remote_executor=
|
|
common:local --remote_cache=
|
|
common:local --bes_backend=
|
|
common:local --bes_results_url=
|
|
common:local --tls_client_certificate=
|
|
common:local --tls_client_key=
|
|
common:local --remote_cache_compression=false
|
|
common:local --grpc_keepalive_time=0s
|
|
common:local --legacy_important_outputs
|
|
common:local --jobs=auto
|
|
|
|
# Disable remote execution but keep remote cache enabled
|
|
--config=no-remote-exec
|
|
common:no-remote-exec --remote_executor=
|
|
common:no-remote-exec --jobs=auto
|
|
|
|
# Disable remote execution and caching for public releases
|
|
--config=public-release
|
|
common:public-release --remote_executor=
|
|
common:public-release --remote_cache=
|
|
common:public-release --bes_backend=
|
|
common:public-release --bes_results_url=
|
|
common:public-release --tls_client_certificate=
|
|
common:public-release --tls_client_key=
|
|
common:public-release --remote_cache_compression=false
|
|
common:public-release --grpc_keepalive_time=0s
|
|
common:public-release --legacy_important_outputs
|
|
|
|
--config=fission
|
|
common:fission --fission=yes
|
|
common:fission --remote_download_regex=.*\.dwo$
|
|
|
|
# Avoid failing builds when BES metadata fails to upload.
|
|
common --bes_upload_mode=fully_async
|
|
|
|
# Default Mongo Version if a version is not specified.
|
|
common --define=MONGO_VERSION=8.1.0-alpha
|
|
|
|
# Default distmod if not specified.
|
|
common --define=MONGO_DISTMOD=""
|
|
|
|
# Default if .git directory is not present
|
|
common --define=GIT_COMMIT_HASH="nogitversion"
|
|
|
|
# TODO(WT-12780): delete this once wiredtiger switches to /.bazelrc.evergreen.
|
|
try-import %workspace%/.bazelrc.evergreen_engflow_creds
|
|
|
|
# Evergreen settings, ex. in evergreen this will set the key/cert options for access to the cluster
|
|
try-import %workspace%/.bazelrc.evergreen
|
|
|
|
# Import settings for selecting the right xcode version on mac
|
|
try-import %workspace%/.bazelrc.xcode
|
|
|
|
# local default dev settings
|
|
try-import %workspace%/.bazelrc.common_bes
|
|
|
|
# local git version info
|
|
try-import %workspace%/.bazelrc.git
|
|
|
|
# Used for build profiles and any settings a user wants to consistently use
|
|
try-import %workspace%/.bazelrc.local
|
|
|
|
# Flag as built with bazelisk
|
|
try-import %workspace%/.bazelrc.bazelisk
|