diff --git a/.bazelrc b/.bazelrc index e34eb6beff1..8705e555f35 100644 --- a/.bazelrc +++ b/.bazelrc @@ -129,7 +129,7 @@ build:linux --jobs=200 build --remote_cache=grpcs://sodalite.cluster.engflow.com build --bes_backend=grpcs://sodalite.cluster.engflow.com build --bes_results_url=https://sodalite.cluster.engflow.com/invocation/ -build --experimental_remote_cache_compression=true +build --remote_cache_compression=true build --grpc_keepalive_time=30s build --nolegacy_important_outputs build --bes_keywords=repo:mongo @@ -156,7 +156,7 @@ build:local --bes_backend= build:local --bes_results_url= build:local --tls_client_certificate= build:local --tls_client_key= -build:local --experimental_remote_cache_compression=false +build:local --remote_cache_compression=false build:local --grpc_keepalive_time=0s build:local --legacy_important_outputs build:local --jobs=auto @@ -174,18 +174,17 @@ build:public-release --bes_backend= build:public-release --bes_results_url= build:public-release --tls_client_certificate= build:public-release --tls_client_key= -build:public-release --experimental_remote_cache_compression=false +build:public-release --remote_cache_compression=false build:public-release --grpc_keepalive_time=0s build:public-release --legacy_important_outputs # Avoid failing builds when BES metadata fails to upload. common --bes_upload_mode=fully_async -# TODO SERVER-89593 -# Renable after bazel 7.0 due to query bug: -# https://github.com/bazelbuild/bazel/issues/10902 # Enable Build without the Bytes -# common --remote_download_outputs=toplevel +common --remote_download_outputs=toplevel + +common --enable_bzlmod=false # Default Mongo Version if a version is not specified. build --define=MONGO_VERSION=8.1.0-alpha @@ -205,6 +204,9 @@ 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.workstation diff --git a/.bazelversion b/.bazelversion index 686330a9ff6..253fd3f4f8a 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1,3 +1,3 @@ -6.4.0 -# TODO(SERVER-86050): s390x and ppc64le are using custom built Bazel v6.4.0 binaries +7.2.1 +# TODO(SERVER-86050): s390x and ppc64le are using custom built Bazel v7.2.1 binaries # Do not update this without updating the custom built binaries until Bazelisk is supported on s390x & ppc64le. diff --git a/.gitignore b/.gitignore index b0e16220ded..6f7ba49eaa8 100644 --- a/.gitignore +++ b/.gitignore @@ -279,11 +279,14 @@ buildifier .bazelrc.local .bazelrc.gitinfo .bazelrc.workstation +.bazelrc.xcode .bazel_info_for_ninja.txt .ninja_last_command_line_targets.txt bazel/coverity/analysis/BUILD.bazel .bazel_include_info.json .bazel_header_list_cache +MODULE.bazel +MODULE.bazel.lock # generated configs for external fixture suites docker_compose/ diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index 37f8109d7b6..800a881f63d 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -1,4 +1,23 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +# Apple cc toolchain needs to be loaded before regular cc toolchain or else Apple will just use regular cc toolchain +http_archive( + name = "build_bazel_apple_support", + sha256 = "b53f6491e742549f13866628ddffcc75d1f3b2d6987dc4f14a16b242113c890b", + url = "https://github.com/bazelbuild/apple_support/releases/download/1.17.1/apple_support.1.17.1.tar.gz", +) + +load( + "@build_bazel_apple_support//lib:repositories.bzl", + "apple_support_dependencies", +) + +apple_support_dependencies() + +load("@bazel_features//:deps.bzl", "bazel_features_deps") + +bazel_features_deps() + load("//bazel/platforms:local_config_platform.bzl", "setup_local_config_platform") load("//bazel/toolchains:mongo_toolchain.bzl", "toolchain_download") @@ -17,7 +36,7 @@ http_archive( ], ) -setup_local_config_platform(name = "local_config_platform") +setup_local_config_platform(name = "internal_platforms_do_not_use") toolchain_download(name = "mongo_toolchain") diff --git a/bazel/config/BUILD.bazel b/bazel/config/BUILD.bazel index b3743153b7e..26adab4e1f4 100644 --- a/bazel/config/BUILD.bazel +++ b/bazel/config/BUILD.bazel @@ -194,7 +194,7 @@ config_setting( name = "linux_ppc64le", constraint_values = [ "@platforms//os:linux", - "@platforms//cpu:ppc64le", + "@platforms//cpu:ppc", ], ) @@ -259,7 +259,7 @@ selects.config_setting_group( match_any = [ "@platforms//cpu:aarch64", "@platforms//cpu:x86_64", - "@platforms//cpu:ppc64le", + "@platforms//cpu:ppc", ], ) @@ -848,7 +848,7 @@ selects.config_setting_group( name = "_tcmalloc_gperf_auto_supported", match_any = [ "@platforms//os:windows", - "@platforms//cpu:ppc64le", + "@platforms//cpu:ppc", "@platforms//cpu:s390x", ], ) diff --git a/bazel/docs/architecture/ppc64le_build_from_source.md b/bazel/docs/architecture/ppc64le_build_from_source.md index 6f008409815..58665e56649 100644 --- a/bazel/docs/architecture/ppc64le_build_from_source.md +++ b/bazel/docs/architecture/ppc64le_build_from_source.md @@ -8,12 +8,12 @@ Bazel usually comes with a built-in JDK. However, the tooling used to build the On the MongoDB PPC64LE Evergreen static hosts and dev hosts, the OpenJDK 11 installation exists at: -/usr/lib/jvm/java-11-openjdk-11.0.4.11-2.el8.ppc64le +/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.ppc64le To compile with on these platforms, the developer must set JAVA_HOME before invoking Bazel. -# Bazel v6.4.0 Compilation Steps +# Bazel v7.2.1 Compilation Steps - curl -O -L https://github.com/bazelbuild/bazel/releases/download/6.4.0/bazel-6.4.0-dist.zip - unzip bazel-6.4.0-dist.zip - JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.4.11-2.el8.ppc64le ./compile.sh + curl -O -L https://github.com/bazelbuild/bazel/releases/download/7.2.1/bazel-7.2.1-dist.zip + unzip bazel-7.2.1-dist.zip + JAVA_HOME=/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.ppc64le ./compile.sh diff --git a/bazel/docs/architecture/s390x_build_from_source.md b/bazel/docs/architecture/s390x_build_from_source.md index 41e0344c2e2..e9c88ef5051 100644 --- a/bazel/docs/architecture/s390x_build_from_source.md +++ b/bazel/docs/architecture/s390x_build_from_source.md @@ -8,12 +8,12 @@ Bazel usually comes with a built-in JDK. However, the tooling used to build the On the MongoDB S390X Evergreen static hosts and dev hosts, the OpenJDK 11 installation exists at: -/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.s390x +/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.s390x To compile with on these platforms, the developer must set JAVA_HOME before invoking Bazel. -# Bazel v6.4.0 Compilation Steps +# Bazel v7.2.1 Compilation Steps - curl -O -L https://github.com/bazelbuild/bazel/releases/download/6.4.0/bazel-6.4.0-dist.zip - unzip bazel-6.4.0-dist.zip - JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.s390x ./compile.sh + curl -O -L https://github.com/bazelbuild/bazel/releases/download/7.2.1/bazel-7.2.1-dist.zip + unzip bazel-7.2.1-dist.zip + JAVA_HOME=/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.s390x ./compile.sh diff --git a/bazel/mongo_src_rules.bzl b/bazel/mongo_src_rules.bzl index 9477a654baa..f2a2d49a043 100644 --- a/bazel/mongo_src_rules.bzl +++ b/bazel/mongo_src_rules.bzl @@ -1329,7 +1329,7 @@ def force_includes_copt(package_name, name): if package_name.startswith("src/mongo"): basic_h = "mongo/platform/basic.h" return select({ - "@platforms//os:windows": ["/FI", basic_h], + "@platforms//os:windows": ["/FI" + basic_h], "//conditions:default": ["-include", basic_h], }) @@ -1341,7 +1341,7 @@ def force_includes_copt(package_name, name): "//bazel/config:linux_x86_64": ["-include", "third_party/mozjs/platform/x86_64/linux/build/js-config.h"], "//bazel/config:macos_aarch64": ["-include", "third_party/mozjs/platform/aarch64/macOS/build/js-config.h"], "//bazel/config:macos_x86_64": ["-include", "third_party/mozjs/platform/x86_64/macOS/build/js-config.h"], - "//bazel/config:windows_x86_64": ["/FI", "third_party/mozjs/platform/x86_64/windows/build/js-config.h"], + "//bazel/config:windows_x86_64": ["/FI" + "third_party/mozjs/platform/x86_64/windows/build/js-config.h"], }) return [] diff --git a/bazel/platforms/BUILD.bazel b/bazel/platforms/BUILD.bazel index b36665e7a8a..b6b06f97c05 100644 --- a/bazel/platforms/BUILD.bazel +++ b/bazel/platforms/BUILD.bazel @@ -98,7 +98,7 @@ platform( platform( name = "linux_ppc64le", constraint_values = [ - "@platforms//cpu:ppc64le", + "@platforms//cpu:ppc", "@platforms//os:linux", ], ) @@ -114,7 +114,7 @@ platform( platform( name = "rhel8_ppc64le", constraint_values = [ - "@platforms//cpu:ppc64le", + "@platforms//cpu:ppc", "@platforms//os:linux", ":use_mongo_toolchain", ], diff --git a/bazel/platforms/local_config_platform.bzl b/bazel/platforms/local_config_platform.bzl index 300fd1110f6..42b262bed3b 100644 --- a/bazel/platforms/local_config_platform.bzl +++ b/bazel/platforms/local_config_platform.bzl @@ -12,7 +12,7 @@ _ARCH_MAP = { "amd64": "@platforms//cpu:x86_64", "aarch64": "@platforms//cpu:arm64", "x86_64": "@platforms//cpu:x86_64", - "ppc64le": "@platforms//cpu:ppc64le", + "ppc64le": "@platforms//cpu:ppc", "s390x": "@platforms//cpu:s390x", } @@ -85,18 +85,24 @@ def _setup_local_config_platform(ctx): } ctx.template( - "BUILD.bazel", + "host/BUILD.bazel", ctx.attr.build_tpl, substitutions = substitutions, ) ctx.template( - "constraints.bzl", + "host/constraints.bzl", ctx.attr.constraints_tpl, substitutions = substitutions, ) - return result + ctx.template( + "host/extension.bzl", + ctx.attr.extension_tpl, + substitutions = substitutions, + ) + + return None setup_local_config_platform = repository_rule( implementation = _setup_local_config_platform, @@ -109,6 +115,10 @@ setup_local_config_platform = repository_rule( default = "//bazel/platforms:local_config_platform_constraints.bzl", doc = "Template modeling the builtin local config platform constraints file.", ), + "extension_tpl": attr.label( + default = "//bazel/platforms:local_config_platform_extension.bzl", + doc = "Template modeling the builtin local config platform constraints file.", + ), }, environ = ["USE_NATIVE_TOOLCHAIN"], ) diff --git a/bazel/platforms/local_config_platform_extension.bzl b/bazel/platforms/local_config_platform_extension.bzl new file mode 100644 index 00000000000..6bdc4cfb292 --- /dev/null +++ b/bazel/platforms/local_config_platform_extension.bzl @@ -0,0 +1,66 @@ +def _translate_cpu(arch): + if arch in ["i386", "i486", "i586", "i686", "i786", "x86"]: + return "x86_32" + if arch in ["amd64", "x86_64", "x64"]: + return "x86_64" + if arch in ["ppc", "ppc64", "ppc64le"]: + return "ppc" + if arch in ["arm", "armv7l"]: + return "arm" + if arch in ["aarch64"]: + return "aarch64" + if arch in ["s390x", "s390"]: + return "s390x" + if arch in ["mips64el", "mips64"]: + return "mips64" + if arch in ["riscv64"]: + return "riscv64" + return None + +def _translate_os(os): + if os.startswith("mac os"): + return "osx" + if os.startswith("freebsd"): + return "freebsd" + if os.startswith("openbsd"): + return "openbsd" + if os.startswith("linux"): + return "linux" + if os.startswith("windows"): + return "windows" + return None + +def _host_platform_repo_impl(rctx): + cpu = _translate_cpu(rctx.os.arch) + os = _translate_os(rctx.os.name) + + cpu = "" if cpu == None else " '@platforms//cpu:%s',\n" % cpu + os = "" if os == None else " '@platforms//os:%s',\n" % os + + rctx.file("BUILD.bazel", """ +# DO NOT EDIT: automatically generated BUILD file +exports_files(["constraints.bzl"]) +""") + + rctx.file("constraints.bzl", """ +# DO NOT EDIT: automatically generated constraints list +HOST_CONSTRAINTS = [ +%s%s] +""" % (cpu, os)) + +host_platform_repo = repository_rule( + implementation = _host_platform_repo_impl, + doc = """Generates constraints for the host platform. The constraints.bzl +file contains a single HOST_CONSTRAINTS variable, which is a +list of strings, each of which is a label to a constraint_value +for the host platform.""", +) + +def _host_platform_impl(_mctx): + host_platform_repo(name = "host_platform") + +host_platform = module_extension( + implementation = _host_platform_impl, + doc = """Generates a host_platform_repo repo named +host_platform, containing constraints for the host platform.""", +) diff --git a/bazel/separate_debug.bzl b/bazel/separate_debug.bzl index de03b73722b..efd52b3f618 100644 --- a/bazel/separate_debug.bzl +++ b/bazel/separate_debug.bzl @@ -3,6 +3,7 @@ load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") WITH_DEBUG_SUFFIX = "_with_debug" CC_SHARED_LIBRARY_SUFFIX = "_shared" SHARED_ARCHIVE_SUFFIX = "_shared_archive" +MAC_DEBUG_FOLDER_EXTENSION = ".dSYM" def get_inputs_and_outputs(ctx, shared_ext, static_ext, debug_ext): """ @@ -35,7 +36,10 @@ def get_inputs_and_outputs(ctx, shared_ext, static_ext, debug_ext): if shared_lib: basename = shared_lib.basename[:-len(WITH_DEBUG_SUFFIX + shared_ext + CC_SHARED_LIBRARY_SUFFIX)] if ctx.attr.enabled: - debug_info = ctx.actions.declare_file(basename + shared_ext + debug_ext) + if debug_ext == MAC_DEBUG_FOLDER_EXTENSION: + debug_info = ctx.actions.declare_directory(basename + shared_ext + debug_ext) + else: + debug_info = ctx.actions.declare_file(basename + shared_ext + debug_ext) else: debug_info = None output_bin = ctx.actions.declare_file(basename + shared_ext) @@ -49,7 +53,10 @@ def get_inputs_and_outputs(ctx, shared_ext, static_ext, debug_ext): basename = program_bin.basename[:-len(WITH_DEBUG_SUFFIX)] if ctx.attr.enabled: - debug_info = ctx.actions.declare_file(basename + debug_ext) + if debug_ext == MAC_DEBUG_FOLDER_EXTENSION: + debug_info = ctx.actions.declare_directory(basename + debug_ext) + else: + debug_info = ctx.actions.declare_file(basename + debug_ext) else: debug_info = None output_bin = ctx.actions.declare_file(basename) @@ -292,7 +299,7 @@ def linux_extraction(ctx, cc_toolchain, inputs): def macos_extraction(ctx, cc_toolchain, inputs): outputs = [] unstripped_static_bin = None - input_bin, output_bin, debug_info, static_lib = get_inputs_and_outputs(ctx, ".dylib", ".a", ".dSYM") + input_bin, output_bin, debug_info, static_lib = get_inputs_and_outputs(ctx, ".dylib", ".a", MAC_DEBUG_FOLDER_EXTENSION) input_file = ctx.attr.binary_with_debug.files.to_list() if input_bin: diff --git a/bazel/toolchains/mongo_toolchain.BUILD b/bazel/toolchains/mongo_toolchain.BUILD index f59bf72540b..19c5c80d846 100644 --- a/bazel/toolchains/mongo_toolchain.BUILD +++ b/bazel/toolchains/mongo_toolchain.BUILD @@ -36,7 +36,7 @@ mongo_cc_toolchain_config( name = "cc_gcc_toolchain_config", bin_dirs = COMMON_BINDIRS, compiler = "gcc", - cpu = "{platforms_arch}", + cpu = "{bazel_toolchain_cpu}", cxx_builtin_include_directories = COMMON_BUILTIN_INCLUDE_DIRECTORIES, extra_ldflags = LINK_FLAGS, includes = GCC_INCLUDE_DIRS + COMMON_INCLUDE_DIRECTORIES + COMMON_BUILTIN_INCLUDE_DIRECTORIES, @@ -65,7 +65,7 @@ mongo_cc_toolchain_config( name = "cc_clang_toolchain_config", bin_dirs = COMMON_BINDIRS, compiler = "clang", - cpu = "{platforms_arch}", + cpu = "{bazel_toolchain_cpu}", cxx_builtin_include_directories = COMMON_BUILTIN_INCLUDE_DIRECTORIES, extra_ldflags = LINK_FLAGS, includes = CLANG_INCLUDE_DIRS + COMMON_INCLUDE_DIRECTORIES + COMMON_BUILTIN_INCLUDE_DIRECTORIES, @@ -112,12 +112,12 @@ toolchain( name = "mongo_toolchain", exec_compatible_with = [ "@platforms//os:linux", - "@platforms//cpu:{platforms_arch}", + "@platforms//cpu:{bazel_toolchain_cpu}", "@//bazel/platforms:use_mongo_toolchain", ], target_compatible_with = [ "@platforms//os:linux", - "@platforms//cpu:{platforms_arch}", + "@platforms//cpu:{bazel_toolchain_cpu}", "@//bazel/platforms:use_mongo_toolchain", ], toolchain = ":cc_mongo_toolchain", diff --git a/bazel/toolchains/mongo_toolchain.bzl b/bazel/toolchains/mongo_toolchain.bzl index 2c65b0508c8..dd05fdc98a9 100644 --- a/bazel/toolchains/mongo_toolchain.bzl +++ b/bazel/toolchains/mongo_toolchain.bzl @@ -11,7 +11,7 @@ _OS_MAP = { _ARCH_MAP = { "aarch64": "@platforms//cpu:arm64", "x86_64": "@platforms//cpu:x86_64", - "ppc64le": "@platforms//cpu:ppc64le", + "ppc64le": "@platforms//cpu:ppc", "s390x": "@platforms//cpu:s390x", } @@ -57,7 +57,7 @@ def _toolchain_download(ctx): elif arch == "x86_64": substitutions = { "{platforms_arch}": "x86_64", - "{bazel_toolchain_cpu}": "k8", + "{bazel_toolchain_cpu}": "x86_64", "{arch}": arch, } elif arch == "ppc64le": diff --git a/bazel/toolchains/python_toolchain.bzl b/bazel/toolchains/python_toolchain.bzl index 0f12c4cc231..389f759b684 100644 --- a/bazel/toolchains/python_toolchain.bzl +++ b/bazel/toolchains/python_toolchain.bzl @@ -12,7 +12,7 @@ _ARCH_MAP = { "amd64": "@platforms//cpu:x86_64", "aarch64": "@platforms//cpu:arm64", "x86_64": "@platforms//cpu:x86_64", - "ppc64le": "@platforms//cpu:ppc64le", + "ppc64le": "@platforms//cpu:ppc", "s390x": "@platforms//cpu:s390x", } diff --git a/buildscripts/bazel_scons_diff.py b/buildscripts/bazel_scons_diff.py index 3e76af8fbc5..acb1f3ba1b8 100644 --- a/buildscripts/bazel_scons_diff.py +++ b/buildscripts/bazel_scons_diff.py @@ -405,9 +405,9 @@ def main(): # Set JAVA_HOME on ppc & s390x architectures global bazel_env_settings if platform.machine().lower() == "ppc64le": - bazel_env_settings["JAVA_HOME"] = "/usr/lib/jvm/java-11-openjdk-11.0.4.11-2.el8.ppc64le" + bazel_env_settings["JAVA_HOME"] = "/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.ppc64le" elif platform.machine().lower() == "s390x": - bazel_env_settings["JAVA_HOME"] = "/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.s390x" + bazel_env_settings["JAVA_HOME"] = "/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.s390x" target_type_map = {} for scons_target in args.scons_targets: diff --git a/buildscripts/install_bazel.py b/buildscripts/install_bazel.py index df7f01d6005..07548694d46 100644 --- a/buildscripts/install_bazel.py +++ b/buildscripts/install_bazel.py @@ -10,8 +10,8 @@ import urllib.request from retry import retry _S3_HASH_MAPPING = { - "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-6.4.0-ppc64le": "dd21c75817533ff601bf797e64f0eb2f7f6b813af26c829f0bda30e328caef46", - "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-6.4.0-s390x": "6d72eabc1789b041bbe4cfc033bbac4491ec9938ef6da9899c0188ecf270a7f4", + "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-7.2.1-ppc64le": "4ecc7f1396b8d921c6468b34cc8ed356c4f2dbe8a154c25d681a61ccb5dfc9cb", + "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-7.2.1-s390x": "2f5f7fd747620d96e885766a4027347c75c0f455c68219211a00e72fc6413be9", "https://mdb-build-public.s3.amazonaws.com/bazelisk-binaries/v1.19.0/bazelisk-darwin-amd64": "f2ba5f721a995b54bab68c6b76a340719888aa740310e634771086b6d1528ecd", "https://mdb-build-public.s3.amazonaws.com/bazelisk-binaries/v1.19.0/bazelisk-darwin-arm64": "69fa21cd2ccffc2f0970c21aa3615484ba89e3553ecce1233a9d8ad9570d170e", "https://mdb-build-public.s3.amazonaws.com/bazelisk-binaries/v1.19.0/bazelisk-linux-amd64": "d28b588ac0916abd6bf02defb5433f6eddf7cba35ffa808eabb65a44aab226f7", @@ -72,7 +72,7 @@ def install_bazel(binary_directory: str) -> str: print( "Warning: Bazelisk is not supported on this platform. Installing Bazel directly instead." ) - s3_path = f"https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-6.4.0-{normalized_arch}" + s3_path = f"https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-7.2.1-{normalized_arch}" _download_path_with_retry(s3_path, binary_path) _verify_s3_hash(s3_path, binary_path) diff --git a/evergreen/bazel_compile.sh b/evergreen/bazel_compile.sh index 56d78b0eeb7..4e7960115d3 100755 --- a/evergreen/bazel_compile.sh +++ b/evergreen/bazel_compile.sh @@ -42,9 +42,9 @@ fi # Set the JAVA_HOME directories for ppc64le and s390x since their bazel binaries are not compiled with a built-in JDK. # TODO(SERVER-86050): remove the branch once bazelisk is built on s390x & ppc64le if [[ $ARCH == "ppc64le" ]]; then - export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.4.11-2.el8.ppc64le" + export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.ppc64le" elif [[ $ARCH == "s390x" ]]; then - export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.s390x" + export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.s390x" fi # TODO(SERVER-86050): remove the branch once bazelisk is built on s390x & ppc64le diff --git a/evergreen/bazel_run.sh b/evergreen/bazel_run.sh index e5064dfc41e..7f7adc506e9 100644 --- a/evergreen/bazel_run.sh +++ b/evergreen/bazel_run.sh @@ -45,9 +45,9 @@ fi # Set the JAVA_HOME directories for ppc64le and s390x since their bazel binaries are not compiled with a built-in JDK. if [[ $ARCH == "ppc64le" ]]; then - export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.4.11-2.el8.ppc64le" + export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.ppc64le" elif [[ $ARCH == "s390x" ]]; then - export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.s390x" + export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.s390x" fi # Print command being run to file that can be uploaded diff --git a/evergreen/bazel_scons_diff.sh b/evergreen/bazel_scons_diff.sh index ad91db15cb2..78e7630ccaa 100644 --- a/evergreen/bazel_scons_diff.sh +++ b/evergreen/bazel_scons_diff.sh @@ -36,9 +36,9 @@ fi # Set the JAVA_HOME directories for ppc64le and s390x since their bazel binaries are not compiled with a built-in JDK. if [[ $ARCH == "ppc64le" ]]; then - export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.4.11-2.el8.ppc64le" + export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.ppc64le" elif [[ $ARCH == "s390x" ]]; then - export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.s390x" + export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.s390x" fi eval ${compile_env} $python ./buildscripts/bazel_scons_diff.py \ diff --git a/evergreen/get_bazelisk.sh b/evergreen/get_bazelisk.sh index ccaf4bb8fd8..0cf8478137a 100755 --- a/evergreen/get_bazelisk.sh +++ b/evergreen/get_bazelisk.sh @@ -36,7 +36,7 @@ mkdir -p $TMPDIR # TODO(SERVER-86050): remove the branch once bazelisk is built on s390x & ppc64le if [[ $ARCH == "ppc64le" ]] || [[ $ARCH == "s390x" ]]; then - REMOTE_PATH=https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-6.4.0-${ARCH} + REMOTE_PATH=https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-7.2.1-${ARCH} LOCAL_PATH=$TMPDIR/bazel else REMOTE_PATH=https://mdb-build-public.s3.amazonaws.com/bazelisk-binaries/v1.19.0/bazelisk-${OS}-${ARCH}${EXT} diff --git a/site_scons/site_tools/integrate_bazel.py b/site_scons/site_tools/integrate_bazel.py index 5ad0f69771c..9044cec9d7d 100644 --- a/site_scons/site_tools/integrate_bazel.py +++ b/site_scons/site_tools/integrate_bazel.py @@ -74,8 +74,8 @@ _DISTRO_PATTERN_MAP = { } _S3_HASH_MAPPING = { - "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-6.4.0-ppc64le": "dd21c75817533ff601bf797e64f0eb2f7f6b813af26c829f0bda30e328caef46", - "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-6.4.0-s390x": "6d72eabc1789b041bbe4cfc033bbac4491ec9938ef6da9899c0188ecf270a7f4", + "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-7.2.1-ppc64le": "4ecc7f1396b8d921c6468b34cc8ed356c4f2dbe8a154c25d681a61ccb5dfc9cb", + "https://mdb-build-public.s3.amazonaws.com/bazel-binaries/bazel-7.2.1-s390x": "2f5f7fd747620d96e885766a4027347c75c0f455c68219211a00e72fc6413be9", "https://mdb-build-public.s3.amazonaws.com/bazelisk-binaries/v1.19.0/bazelisk-darwin-amd64": "f2ba5f721a995b54bab68c6b76a340719888aa740310e634771086b6d1528ecd", "https://mdb-build-public.s3.amazonaws.com/bazelisk-binaries/v1.19.0/bazelisk-darwin-arm64": "69fa21cd2ccffc2f0970c21aa3615484ba89e3553ecce1233a9d8ad9570d170e", "https://mdb-build-public.s3.amazonaws.com/bazelisk-binaries/v1.19.0/bazelisk-linux-amd64": "d28b588ac0916abd6bf02defb5433f6eddf7cba35ffa808eabb65a44aab226f7", @@ -172,7 +172,9 @@ def bazel_builder_action( # So we will do the renaming of dwarf file to what scons expects here, before we copy to scons tree substring_end = str(t).find(".dSYM/") + 5 t = str(t)[:substring_end] - s = Globals.bazel_output(t) + # This is declared as an output folder, so bazel appends (TreeArtifact) to it + s = Globals.bazel_output(t + " (TreeArtifact)") + s = str(s).removesuffix(" (TreeArtifact)") dwarf_info_base = os.path.splitext(os.path.splitext(os.path.basename(t))[0])[0] dwarf_sym_with_debug = os.path.join( s, f"Contents/Resources/DWARF/{dwarf_info_base}_shared_with_debug.dylib" @@ -186,12 +188,20 @@ def bazel_builder_action( s, f"Contents/Resources/DWARF/{dwarf_info_base}_with_debug" ) dwarf_sym = os.path.join(s, f"Contents/Resources/DWARF/{dwarf_info_base}") - # rename the file for scons - shutil.copy(dwarf_sym_with_debug, dwarf_sym) # copy the whole dSYM in one operation. Clean any existing files that might be in the way. + print(f"Moving .dSYM from {s} over to {t}.") shutil.rmtree(str(t), ignore_errors=True) shutil.copytree(s, str(t)) + # we want to change the permissions back to normal permissions on the folders copied rather than read only + os.chmod(t, 0o755) + for root, dirs, files in os.walk(t): + for name in files: + os.chmod(os.path.join(root, name), 0o755) + for name in dirs: + os.chmod(os.path.join(root, name), 0o755) + # shouldn't write our own files to the bazel directory, renaming file for scons + shutil.copy(dwarf_sym_with_debug.replace(s, t), dwarf_sym.replace(s, t)) else: s = Globals.bazel_output(t) shutil.copy(s, str(t)) @@ -898,11 +908,11 @@ def setup_bazel_env_vars() -> None: # Set the JAVA_HOME directories for ppc64le and s390x since their bazel binaries are not compiled with a built-in JDK. if platform.machine().lower() == "ppc64le": Globals.bazel_env_variables["JAVA_HOME"] = ( - "/usr/lib/jvm/java-11-openjdk-11.0.4.11-2.el8.ppc64le" + "/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.ppc64le" ) elif platform.machine().lower() == "s390x": Globals.bazel_env_variables["JAVA_HOME"] = ( - "/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.s390x" + "/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.el8.s390x" ) diff --git a/src/mongo/db/fts/unicode/BUILD.bazel b/src/mongo/db/fts/unicode/BUILD.bazel index 2421e14d0ba..5f2345aec9c 100644 --- a/src/mongo/db/fts/unicode/BUILD.bazel +++ b/src/mongo/db/fts/unicode/BUILD.bazel @@ -71,7 +71,7 @@ mongo_cc_library( ] + select({ "@platforms//cpu:x86_64": ["byte_vector_sse2.h"], "@platforms//cpu:aarch64": ["byte_vector_neon.h"], - "@platforms//cpu:ppc64le": ["byte_vector_altivec.h"], + "@platforms//cpu:ppc": ["byte_vector_altivec.h"], "//conditions:default": [], }), deps = [ diff --git a/src/third_party/IntelRDFPMathLib20U1/BUILD.bazel b/src/third_party/IntelRDFPMathLib20U1/BUILD.bazel index 18ec68e798b..5e9adc29d01 100644 --- a/src/third_party/IntelRDFPMathLib20U1/BUILD.bazel +++ b/src/third_party/IntelRDFPMathLib20U1/BUILD.bazel @@ -74,6 +74,11 @@ IGNORE_WARNINGS_COPT = select({ "//conditions:default": ["-w"], }) +DYNAMIC_LOOKUP_LINKOPT = select({ + "@platforms//os:macos": ["-Wl,-undefined,dynamic_lookup"], + "//conditions:default": [""], +}) + INTEL_RDFP_FLOAT128_INTERNAL_HEADERS = [ "LIBRARY/float128/architecture.h", "LIBRARY/float128/assert.h", @@ -132,6 +137,7 @@ mongo_cc_library( "LIBRARY/float128/dpml_log.c", ] + INTEL_RDFP_FLOAT128_INTERNAL_HEADERS, copts = IGNORE_WARNINGS_COPT, + linkopts = DYNAMIC_LOOKUP_LINKOPT, local_defines = INTEL_RDFP_MATHLIB_DEFINES + [ "LOG1P=1", "efi2=1", diff --git a/src/third_party/mozjs/BUILD.bazel b/src/third_party/mozjs/BUILD.bazel index babb383b9b9..64cbff2a05f 100644 --- a/src/third_party/mozjs/BUILD.bazel +++ b/src/third_party/mozjs/BUILD.bazel @@ -47,8 +47,7 @@ PLATFORM_INCLUDES = select({ PLATFORM_COPTS = select({ config: [ - "/FI" if os == "windows" else "-include", - "$(location platform/{}/{}/build/js-confdefs.h)".format(arch, os), + ("/FI" if os == "windows" else "-include") + "$(location platform/{}/{}/build/js-confdefs.h)".format(arch, os), ] + (["-mavx2"] if arch == "x86_64" and os != "windows" else []) for config, (arch, os) in PLATFORMS.items() } | { @@ -297,6 +296,10 @@ mongo_cc_library( "include", "mongo_sources", ] + PLATFORM_INCLUDES, + linkopts = select({ + "@platforms//os:macos": ["-Wl,-undefined,dynamic_lookup"], + "//conditions:default": [""], + }), local_defines = [ "IMPL_MFBT=1", "U_NO_DEFAULT_INCLUDE_UTF_HEADERS=1", diff --git a/src/third_party/unwind/BUILD.bazel b/src/third_party/unwind/BUILD.bazel index 198385625f1..8ba65d25d90 100644 --- a/src/third_party/unwind/BUILD.bazel +++ b/src/third_party/unwind/BUILD.bazel @@ -98,7 +98,7 @@ mongo_cc_library( "dist/src/x86_64/is_fpreg.c", "dist/src/x86_64/regname.c", ], - "@platforms//cpu:ppc64le": [ + "@platforms//cpu:ppc": [ "dist/src/ppc/Lget_proc_info.c", "dist/src/ppc/Lget_save_loc.c", "dist/src/ppc/Linit_local.c", @@ -142,7 +142,7 @@ mongo_cc_library( "dist/src/x86_64/getcontext.S", "dist/src/x86_64/setcontext.S", ], - "@platforms//cpu:ppc64le": [], + "@platforms//cpu:ppc": [], "@platforms//cpu:s390x": [ "dist/src/s390x/getcontext.S", "dist/src/s390x/setcontext.S", @@ -171,7 +171,7 @@ mongo_cc_library( "-Isrc/third_party/unwind/platform/linux_x86_64/build/include", "-Isrc/third_party/unwind/dist/include/tdep-x86_64", ], - "@platforms//cpu:ppc64le": [ + "@platforms//cpu:ppc": [ "-Isrc/third_party/unwind/platform/linux_ppc64le/build/include", "-Isrc/third_party/unwind/dist/include/tdep-ppc64", ], @@ -204,14 +204,10 @@ mongo_cc_library( "no_warn_non_virtual_detour", ], includes = select({ - "@platforms//cpu:{}".format(cpu): ["platform/linux_{}/install/include".format(cpu)] - for cpu in [ - "aarch64", - "x86_64", - "ppc64le", - "s390x", - ] - } | { + "@platforms//cpu:aarch64": ["platform/linux_aarch64/install/include"], + "@platforms//cpu:x86_64": ["platform/linux_x86_64/install/include"], + "@platforms//cpu:ppc": ["platform/linux_ppc64le/install/include"], + "@platforms//cpu:s390x": ["platform/linux_s390x/install/include"], "//conditions:default": [], }), local_defines = [ diff --git a/src/third_party/wiredtiger/BUILD.bazel b/src/third_party/wiredtiger/BUILD.bazel index e38d52f8326..70fba3deb40 100644 --- a/src/third_party/wiredtiger/BUILD.bazel +++ b/src/third_party/wiredtiger/BUILD.bazel @@ -102,7 +102,7 @@ mongo_cc_library( ] + select({ "@platforms//cpu:aarch64": WT_FILELIST_ARM64_HOST, "@platforms//cpu:x86_64": WT_FILELIST_X86_HOST, - "@platforms//cpu:ppc64le": WT_FILELIST_POWERPC_HOST, + "@platforms//cpu:ppc": WT_FILELIST_POWERPC_HOST, "@platforms//cpu:s390x": [ WT_FILELIST_ZSERIES_HOST[0], ":wiredtiger_s390x_checksum_index_1", diff --git a/tools/bazel b/tools/bazel index 405997ce1c2..04844903ae5 100755 --- a/tools/bazel +++ b/tools/bazel @@ -3,6 +3,12 @@ # Whenever Bazel is invoked, it first calls this script setting "BAZEL_REAL" to the path of the real Bazel binary. # Use this file as a wrapper for any logic that should run before bazel itself is executed. +# WARNING : If you run //:compiledb target, you can not print to stdout in this file as it will fail with +# "Bazel aquery failed." because it is reading this files stdout as aquery output + +bazel_real="$BAZEL_REAL" +bazelrc_xcode_lines=() + if [[ -z "${BAZELISK_SKIP_WRAPPER}" ]]; then echo "You're not using Bazelisk, which is recommended for a consistent build environment." >&2 echo "Your version of Bazel may be mismatched with the version intended to be used to build MongoDB." >&2 @@ -18,4 +24,18 @@ if [ -d .git ]; then echo "build --define GIT_COMMIT_HASH=$(git rev-parse HEAD)" > .bazelrc.gitinfo fi -$BAZEL_REAL "$@" +if [[ $OSTYPE == darwin* ]]; then + echo "Running on Apple (darwin), creating .bazelrc for xcode settings." >&2 + xcode_path=$(xcode-select -p) >&2 + xcode_version=$(xcodebuild -version | tail -1 | cut -d " " -f3) >&2 + xcode_build_number=$(/usr/bin/xcodebuild -version 2>/dev/null | tail -1 | cut -d " " -f3) >&2 + + bazelrc_lines+=("startup --host_jvm_args=-Xdock:name=$xcode_path") >&2 + bazelrc_lines+=("build --xcode_version=$xcode_version") >&2 + bazelrc_lines+=("build --repo_env=USE_CLANG_CL=$xcode_version") >&2 + bazelrc_lines+=("build --repo_env=DEVELOPER_DIR=$xcode_path") >&2 +fi + +printf '%s\n' "${bazelrc_xcode_lines[@]}" > .bazelrc.xcode + +exec "$bazel_real" "$@"