[llvm] [Bazel] Make LLVM and Clang config headers configurable (PR #126729)

Aaron Siddhartha Mondal via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 16 09:40:22 PST 2025


https://github.com/aaronmondal updated https://github.com/llvm/llvm-project/pull/126729

>From 2c2277f982bb8cacede3e8641f8a4f7d5addba19 Mon Sep 17 00:00:00 2001
From: Aaron Siddhartha Mondal <aaron at tracemachina.com>
Date: Mon, 10 Feb 2025 18:18:02 +0100
Subject: [PATCH] [Bazel] Make LLVM and Clang config headers configurable

This change implements the following flags and provides the
infrastructure for future additions:

    bazel query 'kind(".*_flag", @llvm-project//config:all)'
    @llvm-project//config:LLVM_ENABLE_BACKTRACES
    @llvm-project//config:LLVM_ENABLE_CRASH_DUMPS
    @llvm-project//config:LLVM_ENABLE_CRASH_OVERRIDES
    @llvm-project//config:LLVM_ENABLE_DEBUGLOC_COVERAGE_TRACKING
    @llvm-project//config:LLVM_ENABLE_PLUGINS
    @llvm-project//config:LLVM_ENABLE_ZLIB
    @llvm-project//config:LLVM_ENABLE_ZSTD
    @llvm-project//config:LLVM_HAS_LOGF128
    @llvm-project//config:LLVM_WINDOWS_PREFER_FORWARD_SLASH

For instance:

    bazel build ... \
        -- at llvm-project//config:LLVM_ENABLE_BACKTRACES=false

The following flags have been moved to mirror CMake and simplify
migration to bzlmod:

    @llvm_zlib//:llvm_enable_zlib
    -> @llvm-project//config:LLVM_ENABLE_ZLIB

    @llvm_zstd//:llvm_enable_zstd
    -> @llvm-project//config:LLVM_ENABLE_ZSTD

The overlay now has platform definitions at `@llvm-project//platform`.
You can use these to cross compile the config headers to see how they'd
look like on other systems. For instance:

    bazel build @llvm-project//llvm:config_h \
        --platforms=@llvm-project//platform:aarch64-unknown-linux-gnu

    bazel build @llvm-project//llvm:llvm-config_h \
        --platforms=@llvm-project//platform:x86_64-pc-win32

The new implementation uses the original CMake templates as source of
truth. This makes it easier to detect and prevent drift as unhandled
substitutions tend to turn into compiler errors.

Saves 16 defines on windows and ~35 defines on other platforms which
previously leaked into the command lines of all targets that depended
transitively on the llvm configuration. For a full build of the overlay
this amounts to ~380k fewer defines.
---
 utils/bazel/.bazelrc                          |   8 -
 .../llvm-project-overlay/clang/BUILD.bazel    |  55 +++
 .../clang/include/clang/Config/config.h       | 115 -----
 .../llvm-project-overlay/config/BUILD.bazel   | 177 ++++++++
 .../config/cmakehelpers.bzl                   | 195 +++++++++
 .../llvm-project-overlay/lld/BUILD.bazel      |  10 +-
 .../lldb/source/Plugins/BUILD.bazel           |  12 +-
 .../llvm-project-overlay/llvm/BUILD.bazel     |  71 ++-
 .../llvm-project-overlay/llvm/config.bzl      | 412 +++++++++++++-----
 .../llvm/include/llvm/Config/config.h         | 314 -------------
 .../llvm/include/llvm/Config/llvm-config.h    | 127 ------
 .../llvm-project-overlay/platform/BUILD.bazel |  64 +++
 utils/bazel/llvm_configs/BUILD.bazel          |  30 --
 utils/bazel/llvm_configs/abi-breaking.h.cmake |  62 ---
 utils/bazel/llvm_configs/config.h.cmake       | 300 -------------
 utils/bazel/llvm_configs/llvm-config.h.cmake  | 207 ---------
 utils/bazel/overlay_directories.py            |  15 +-
 utils/bazel/third_party_build/zlib-ng.BUILD   | 120 +++--
 utils/bazel/third_party_build/zstd.BUILD      |  58 +--
 19 files changed, 944 insertions(+), 1408 deletions(-)
 delete mode 100644 utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h
 create mode 100644 utils/bazel/llvm-project-overlay/config/BUILD.bazel
 create mode 100644 utils/bazel/llvm-project-overlay/config/cmakehelpers.bzl
 delete mode 100644 utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h
 delete mode 100644 utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/llvm-config.h
 create mode 100644 utils/bazel/llvm-project-overlay/platform/BUILD.bazel
 delete mode 100644 utils/bazel/llvm_configs/BUILD.bazel
 delete mode 100644 utils/bazel/llvm_configs/abi-breaking.h.cmake
 delete mode 100644 utils/bazel/llvm_configs/config.h.cmake
 delete mode 100644 utils/bazel/llvm_configs/llvm-config.h.cmake

diff --git a/utils/bazel/.bazelrc b/utils/bazel/.bazelrc
index a52e21e87ee0f..6a33b2cb97663 100644
--- a/utils/bazel/.bazelrc
+++ b/utils/bazel/.bazelrc
@@ -58,14 +58,6 @@ build --experimental_cc_shared_library
 # 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
diff --git a/utils/bazel/llvm-project-overlay/clang/BUILD.bazel b/utils/bazel/llvm-project-overlay/clang/BUILD.bazel
index e3b20e43dd220..0600fe324368a 100644
--- a/utils/bazel/llvm-project-overlay/clang/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/clang/BUILD.bazel
@@ -2,6 +2,8 @@
 # See https://llvm.org/LICENSE.txt for license information.
 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
+load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
+load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
 load("@rules_python//python:defs.bzl", "py_binary")
 load(
     "//:vars.bzl",
@@ -13,6 +15,16 @@ load(
 load("//:workspace_root.bzl", "workspace_root")
 load("//llvm:binary_alias.bzl", "binary_alias")
 load("//llvm:cc_plugin_library.bzl", "cc_plugin_library")
+load(
+    "//config:cmakehelpers.bzl",
+    "cmakedefine",
+    "cmakedefine01_off",
+    "cmakedefine01_on",
+    "cmakedefine_sunset",
+    "cmakedefine_unset",
+    "cmakedefine_vset",
+    "cmakedefine_vunset",
+)
 load("//llvm:driver.bzl", "llvm_driver_cc_binary")
 load("//mlir:tblgen.bzl", "gentbl_cc_library", "td_library")
 
@@ -614,6 +626,49 @@ genrule(
     ),
 )
 
+expand_template(
+    name = "config_h",
+    out = "include/clang/Config/config.h",
+    substitutions = (
+        {"${BUG_REPORT_URL}": "https://github.com/llvm/llvm-project/issues/"} |
+        cmakedefine01_on("CLANG_DEFAULT_PIE_ON_LINUX") |
+        {
+            "${CLANG_DEFAULT_LINKER}": "",
+            "${CLANG_DEFAULT_CXX_STDLIB}": "",
+            "${CLANG_DEFAULT_RTLIB}": "",
+            "${CLANG_DEFAULT_UNWINDLIB}": "",
+            "${CLANG_DEFAULT_OBJCOPY}": "objcopy",
+            "${CLANG_DEFAULT_OPENMP_RUNTIME}": "libomp",
+            "${CLANG_SYSTEMZ_DEFAULT_ARCH}": "z10",
+            "${CLANG_INSTALL_LIBDIR_BASENAME}": "lib",
+            "${CLANG_RESOURCE_DIR}": "",
+            "${C_INCLUDE_DIRS}": "",
+        } |
+        cmakedefine_sunset("CLANG_CONFIG_FILE_SYSTEM_DIR") |
+        cmakedefine_sunset("CLANG_CONFIG_FILE_USER_DIR") |
+        {
+            "${DEFAULT_SYSROOT}": "",
+            "${GCC_INSTALL_PREFIX}": "",
+        } |
+        cmakedefine_vunset("CLANG_HAVE_LIBXML") |
+        cmakedefine(
+            "CLANG_HAVE_RLIMITS",
+            disable = "@platforms//os:windows",
+        ) |
+        cmakedefine_vset("CLANG_HAVE_DLFCN_H") |
+        cmakedefine_vset("CLANG_HAVE_DLADDR") |
+        cmakedefine_sunset("HOST_LINK_VERSION") |
+        cmakedefine_unset("ENABLE_LINKER_BUILD_ID") |
+        cmakedefine01_on("ENABLE_X86_RELAX_RELOCATIONS") |
+        cmakedefine01_off("PPC_LINUX_DEFAULT_IEEELONGDOUBLE") |
+        cmakedefine01_off("CLANG_ENABLE_OBJC_REWRITER") |
+        cmakedefine01_on("CLANG_ENABLE_STATIC_ANALYZER") |
+        cmakedefine01_off("CLANG_SPAWN_CC1") |
+        cmakedefine01_off("CLANG_ENABLE_CIR")
+    ),
+    template = "include/clang/Config/config.h.cmake",
+)
+
 cc_library(
     name = "config",
     hdrs = [
diff --git a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h b/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h
deleted file mode 100644
index fd26489ffd5a8..0000000000000
--- a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*===------- clang/Config/config.h - llvm configuration -----------*- C -*-===*/
-/*                                                                            */
-/* Part of the LLVM Project, 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                    */
-/*                                                                            */
-/*===----------------------------------------------------------------------===*/
-
-/* This is a manual port of config.h.cmake for the symbols that do not change
-   based on platform. Those that do change should not be defined here and
-   instead use Bazel cc_library defines. Some attempt has been made to extract
-   such symbols that do vary based on platform (for the platforms we care about)
-   into Bazel defines, but it is by no means complete, so if you see something
-   that looks wrong, it probably is. */
-
-#ifdef CLANG_CONFIG_H
-#error config.h can only be included once
-#else
-#define CLANG_CONFIG_H
-
-/* Bug report URL. */
-#define BUG_REPORT_URL "https://github.com/llvm/llvm-project/issues/"
-
-/* Default to -fPIE and -pie on Linux. */
-#define CLANG_DEFAULT_PIE_ON_LINUX 1
-
-/* Default linker to use. */
-#define CLANG_DEFAULT_LINKER ""
-
-/* Default C++ stdlib to use. */
-#define CLANG_DEFAULT_CXX_STDLIB ""
-
-/* Default runtime library to use. */
-#define CLANG_DEFAULT_RTLIB ""
-
-/* Default unwind library to use. */
-#define CLANG_DEFAULT_UNWINDLIB ""
-
-/* Default objcopy to use */
-#define CLANG_DEFAULT_OBJCOPY "objcopy"
-
-/* Default OpenMP runtime used by -fopenmp. */
-#define CLANG_DEFAULT_OPENMP_RUNTIME "libomp"
-
-/* Default architecture for SystemZ. */
-#define CLANG_SYSTEMZ_DEFAULT_ARCH "z10"
-
-/* Multilib basename for libdir. */
-#define CLANG_INSTALL_LIBDIR_BASENAME "lib"
-
-/* Relative directory for resource files */
-#define CLANG_RESOURCE_DIR ""
-
-/* Directories clang will search for headers */
-#define C_INCLUDE_DIRS ""
-
-/* Directories clang will search for configuration files */
-/* #undef CLANG_CONFIG_FILE_SYSTEM_DIR */
-/* #undef CLANG_CONFIG_FILE_USER_DIR */
-
-/* Default <path> to all compiler invocations for --sysroot=<path>. */
-#define DEFAULT_SYSROOT ""
-
-/* Directory where gcc is installed. */
-#define GCC_INSTALL_PREFIX ""
-
-/* Define if we have libxml2 */
-/* #undef CLANG_HAVE_LIBXML */
-
-/* Define if we have sys/resource.h (rlimits) */
-/* CLANG_HAVE_RLIMITS defined conditionally below */
-
-/* Define if we have dlfcn.h */
-#define CLANG_HAVE_DLFCN_H 1
-
-/* Define if dladdr() is available on this platform. */
-#define CLANG_HAVE_DLADDR 1
-
-/* Linker version detected at compile time. */
-/* #undef HOST_LINK_VERSION */
-
-/* pass --build-id to ld */
-/* #undef ENABLE_LINKER_BUILD_ID */
-
-/* enable x86 relax relocations by default */
-#define ENABLE_X86_RELAX_RELOCATIONS 1
-
-/* enable IEEE binary128 as default long double format on PowerPC Linux. */
-#define PPC_LINUX_DEFAULT_IEEELONGDOUBLE 0
-
-/* Enable the experimental new pass manager by default */
-#define ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER 0
-
-/* Enable each functionality of modules */
-#define CLANG_ENABLE_OBJC_REWRITER 0
-#define CLANG_ENABLE_STATIC_ANALYZER 1
-
-/* Spawn a new process clang.exe for the CC1 tool invocation, when necessary */
-#define CLANG_SPAWN_CC1 0
-
-/* Whether to enable opaque pointers by default */
-#define CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL 1
-
-/* Directly provide definitions here behind platform preprocessor definitions.
- * The preprocessor conditions are sufficient to handle all of the configuration
- * on platforms targeted by Bazel, and defining these here more faithfully
- * matches how the users of this header expect things to work with CMake.
- */
-
-#ifndef _WIN32
-#define CLANG_HAVE_RLIMITS 1
-#endif
-
-#endif
diff --git a/utils/bazel/llvm-project-overlay/config/BUILD.bazel b/utils/bazel/llvm-project-overlay/config/BUILD.bazel
new file mode 100644
index 0000000000000..cbc74c3f69f46
--- /dev/null
+++ b/utils/bazel/llvm-project-overlay/config/BUILD.bazel
@@ -0,0 +1,177 @@
+# 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
+
+"""Configurable build attributes for the overlay.
+
+To view the configurable build attributes in this file:
+
+    bazel query 'kind(".*_flag", @llvm-project//config:all)'
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
+
+# Common config settings mapping to platform triples.
+#
+# See also: //platform:BUILD.bazel.
+#
+# TODO(aaronmondal): Add triples for more useful configurations as per
+#                   `llvm/include/llvm/TargetParser/Triple.h`.
+
+selects.config_setting_group(
+    name = "aarch64-apple-darwin",
+    match_all = [
+        "@platforms//cpu:aarch64",
+        "@platforms//os:macos",
+    ],
+)
+
+selects.config_setting_group(
+    name = "aarch64-unknown-linux-gnu",
+    match_all = [
+        "@platforms//cpu:aarch64",
+        "@platforms//os:linux",
+    ],
+)
+
+selects.config_setting_group(
+    name = "powerpc64le-unknown-linux-gnu",
+    match_all = [
+        "@platforms//cpu:ppc64le",
+        "@platforms//os:linux",
+    ],
+)
+
+selects.config_setting_group(
+    name = "systemz-unknown-linux_gnu",
+    match_all = [
+        "@platforms//cpu:s390x",
+        "@platforms//os:linux",
+    ],
+)
+
+# TODO(aaronmondal): Split this into `x86_64-pc-windows-gnu` and
+#                    `x86_64-pc-windows-msvc`.
+selects.config_setting_group(
+    name = "x86_64-pc-win32",
+    match_all = [
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
+    ],
+)
+
+selects.config_setting_group(
+    name = "x86_64-apple-darwin",
+    match_all = [
+        "@platforms//cpu:x86_64",
+        "@platforms//os:macos",
+    ],
+)
+
+selects.config_setting_group(
+    name = "x86_64-unknown-linux-gnu",
+    match_all = [
+        "@platforms//cpu:x86_64",
+        "@platforms//os:linux",
+    ],
+)
+
+# Useful helpers.
+
+selects.config_setting_group(
+    name = "posix",
+    match_any = [
+        "@platforms//os:linux",
+        "@platforms//os:macos",
+        "@platforms//os:freebsd",
+    ],
+)
+
+# Configurable build attributes for llvm.
+
+# These map to CMake `option` fields on a best-effort basis. The default maps to
+# CMake's `ON` or `OFF` value.
+[
+    (
+        bool_flag(
+            name = option,
+            build_setting_default = default,
+        ),
+        # Only define the opposite of the default value to reduce target count
+        # and prevent accidental default redeclarations.
+        #
+        # This also acts as a failsafe to prevent drift if a default is flipped
+        # as a changed default triggers straightfoward errors in all places
+        # where no longer existing config_settings need to be adjusted.
+        (
+            config_setting(
+                name = "{}_enabled".format(option),
+                flag_values = {":{}".format(option): "true"},
+            ) if not default else config_setting(
+                name = "{}_disabled".format(option),
+                flag_values = {":{}".format(option): "false"},
+            )
+        ),
+    )
+    for option, default in [
+        ("LLVM_ENABLE_BACKTRACES", True),
+        ("LLVM_ENABLE_CRASH_OVERRIDES", True),
+        ("LLVM_ENABLE_CRASH_DUMPS", False),
+
+        # These deviate slightly from CMake in that we use a boolean rather than
+        # ON/OFF/FORCE_ON since in Bazel ON collapses into FORCE_ON anyways.
+        ("LLVM_ENABLE_ZLIB", True),
+        ("LLVM_ENABLE_ZSTD", True),
+        ("LLVM_HAS_LOGF128", False),
+    ]
+]
+
+# Most builds expect this to be disabled by default but MinGW builds expect it
+# enabled by default. We handle this separately to clarify the intent that the
+# default is ambiguous.
+bool_flag(
+    name = "LLVM_WINDOWS_PREFER_FORWARD_SLASH",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "LLVM_WINDOWS_PREFER_FORWARD_SLASH_enabled",
+    flag_values = {":LLVM_WINDOWS_PREFER_FORWARD_SLASH": "true"},
+)
+
+config_setting(
+    name = "LLVM_WINDOWS_PREFER_FORWARD_SLASH_disabled",
+    flag_values = {":LLVM_WINDOWS_PREFER_FORWARD_SLASH": "false"},
+)
+
+string_flag(
+    name = "LLVM_ENABLE_DEBUGLOC_COVERAGE_TRACKING",
+    build_setting_default = "DISABLED",
+    values = [
+        "COVERAGE",
+        "DISABLED",
+    ],
+)
+
+config_setting(
+    name = "LLVM_ENABLE_DEBUGLOC_COVERAGE_TRACKING_coverage",
+    flag_values = {":LLVM_ENABLE_DEBUGLOC_COVERAGE_TRACKING": "COVERAGE"},
+)
+
+bool_flag(
+    name = "LLVM_ENABLE_PLUGINS",
+    # TODO(aaronmondal): This should be enabled by default, but that currently
+    #                    breaks @llvm-project//llvm/unittests:analysis_tests.
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "LLVM_ENABLE_PLUGINS_enabled",
+    flag_values = {":LLVM_ENABLE_PLUGINS": "true"},
+)
+
+config_setting(
+    name = "LLVM_ENABLE_PLUGINS_disabled",
+    flag_values = {":LLVM_ENABLE_PLUGINS": "false"},
+)
diff --git a/utils/bazel/llvm-project-overlay/config/cmakehelpers.bzl b/utils/bazel/llvm-project-overlay/config/cmakehelpers.bzl
new file mode 100644
index 0000000000000..b60b807da7c48
--- /dev/null
+++ b/utils/bazel/llvm-project-overlay/config/cmakehelpers.bzl
@@ -0,0 +1,195 @@
+# 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
+
+"""Helper functions to resolve CMake templates."""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+
+def cmakedefine_sset(define, value):
+    """Translate `#cmakedefine DEFINE "${DEFINE}"` to `#define DEFINE "VALUE"`.
+
+    Args:
+        define: The string of a configurable define that may be set to a string
+        value.
+
+    Returns:
+        A dict like
+        `{'#cmakedefine DEFINE "${DEFINE}"': '#define DEFINE "VALUE"'}`.
+    """
+    return {
+        '#cmakedefine {} "${{{}}}"'.format(
+            define,
+            define,
+        ): '#define {} "{}"'.format(define, value),
+    }
+
+def cmakedefine_sunset(define):
+    """Translate `#cmakedefine DEFINE "${DEFINE}"` to `/* #undef DEFINE */`.
+
+    Args:
+        define: The string of a configurable define that may be set to a string
+        value.
+
+    Returns:
+        A dict like
+        `{'#cmakedefine DEFINE "${DEFINE}"': "/* #undef DEFINE */"}`.
+    """
+    return {
+        '#cmakedefine {} "${{{}}}"'.format(
+            define,
+            define,
+        ): "/* #undef {} */".format(define),
+    }
+
+def cmakedefine_vset(define):
+    """Translate `#cmakedefine DEFINE ${DEFINE}` to `#define DEFINE 1`.
+
+    Args:
+        define: The string of a configurable define that may be set to 1.
+
+    Returns:
+        A dict like `{"#cmakedefine DEFINE ${DEFINE}": "#define DEFINE 1"}`.
+    """
+
+    return {
+        "#cmakedefine {} ${{{}}}".format(
+            define,
+            define,
+        ): "#define {} 1".format(define),
+    }
+
+def cmakedefine_vunset(define):
+    """Translate `#cmakedefine DEFINE ${DEFINE}` to `/* #undef DEFINE */`.
+
+    Args:
+        define: The string of a configurable define that may be set to a value.
+
+    Returns:
+        A dict like `{"#cmakedefine DEFINE ${DEFINE}": "/* #undef DEFINE */"}`.
+    """
+    return {
+        "#cmakedefine {} ${{{}}}".format(
+            define,
+            define,
+        ): "/* #undef {} */".format(define),
+    }
+
+def cmakedefine_set(define):
+    """Translate `#cmakedefine DEFINE` to `#define DEFINE 1`.
+
+    Args:
+        define: The string of a configurable define that may be set or unset.
+
+    Returns:
+        A dict like `{"#cmakedefine DEFINE": "#define DEFINE 1"}`.
+    """
+    return {
+        "#cmakedefine {}".format(
+            define,
+        ): "#define {} 1".format(define),
+    }
+
+def cmakedefine_unset(define):
+    """Translate `#cmakedefine DEFINE` to `/* #undef DEFINE */`.
+
+    Args:
+        define: The string of a configurable define that may be set or unset.
+
+    Returns:
+        A dict like `{"#cmakedefine DEFINE": "/* #undef DEFINE */"}`.
+    """
+    return {
+        "#cmakedefine {}".format(
+            define,
+        ): "/* #undef {} */".format(define),
+    }
+
+def cmakedefine(
+        define,
+        enable = "//conditions:default",
+        disable = "//conditions:default"):
+    """Translate `#cmakedefine DEFINE ${DEFINE}` to `#define DEFINE 1` or
+    `/* #undef DEFINE */`.
+
+    Args:
+        define: The string of a configurable define that may be unset or set to
+                a value.
+        enable: A `Label` or tuple of `Labels` declaring conditions that set
+            the define to 1. Defaults to `//conditions:default`.
+        disable: A `Label` or tuple of `Labels` declaring conditions that leave
+            the define undefined. Defaults to `//conditions:default`.
+
+    Returns:
+        A `selects.with_or` of the structure:
+
+            selects.with_or({
+                enable: {
+                    "#cmakedefine DEFINE ${DEFINE}": "#define DEFINE 1",
+                },
+                disable: {
+                    "#cmakedefine DEFINE ${DEFINE}": "/* #undef DEFINE */",
+                },
+            })
+
+    Raises an error if `enable` and `disable` are both left at their defaults.
+    """
+    return selects.with_or({
+        enable: cmakedefine_vset(define),
+        disable: cmakedefine_vunset(define),
+    })
+
+def cmakedefine01_on(define):
+    """Translate `#cmakedefine01 DEFINE` to `#define DEFINE 1`.
+
+    Args:
+        define: The string of a configurable define that may be 0 or 1.
+
+    Returns:
+        A dict like `{"#cmakedefine01 DEFINE": "#define DEFINE 1"}`.
+    """
+    return {
+        "#cmakedefine01 {}".format(define): "#define {} 1".format(define),
+    }
+
+def cmakedefine01_off(define):
+    """Translate `#cmakedefine01 DEFINE` to `#define DEFINE 0`.
+
+    Args:
+        define: The string of a configurable define that may be 0 or 1.
+
+    Returns:
+        A dict like `{"#cmakedefine01 DEFINE": "#define DEFINE 0"}`.
+    """
+    return {
+        "#cmakedefine01 {}".format(define): "#define {} 0".format(define),
+    }
+
+def cmakedefine01(
+        define,
+        enable = "//conditions:default",
+        disable = "//conditions:default"):
+    """Translate `#cmakedefine01 DEFINE` to `#define DEFINE 1` or
+    `#define DEFINE 0`.
+
+    Args:
+        define: The string of a configurable define that may be set to 0 or 1.
+        enable: A `Label` or tuple of `Labels` declaring conditions that set
+            the define to 1. Defaults to `//conditions:default`.
+        disable: A `Label` or tuple of `Labels` declaring conditions that set
+            the define to 0. Defaults to `//conditions:default`.
+
+    Returns:
+        A `selects.with_or` of the structure:
+
+            selects.with_or({
+                enable: {"#cmakedefine01 DEFINE": "#define DEFINE 1"},
+                disable: {"#cmakedefine01 DEFINE": "#define DEFINE 0"},
+            })
+
+    Raises an error if `enable` and `disable` are both left at their defaults.
+    """
+    return selects.with_or({
+        enable: cmakedefine01_on(define),
+        disable: cmakedefine01_off(define),
+    })
diff --git a/utils/bazel/llvm-project-overlay/lld/BUILD.bazel b/utils/bazel/llvm-project-overlay/lld/BUILD.bazel
index 94bcf68896615..46ddd48771fb6 100644
--- a/utils/bazel/llvm-project-overlay/lld/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/lld/BUILD.bazel
@@ -111,9 +111,13 @@ cc_library(
         "//llvm:TargetParser",
         "//llvm:TransformUtils",
         "//llvm:config",
-        "@llvm_zlib//:zlib",
-        "@llvm_zstd//:zstd",
-    ],
+    ] + select({
+        "//config:LLVM_ENABLE_ZLIB_disabled": [],
+        "//conditions:default": ["@llvm_zlib//:zlib"],
+    }) + select({
+        "//config:LLVM_ENABLE_ZSTD_disabled": [],
+        "//conditions:default": ["@llvm_zstd//:zstd"],
+    }),
 )
 
 gentbl(
diff --git a/utils/bazel/llvm-project-overlay/lldb/source/Plugins/BUILD.bazel b/utils/bazel/llvm-project-overlay/lldb/source/Plugins/BUILD.bazel
index c4775dffca260..2497a8c2d4eab 100644
--- a/utils/bazel/llvm-project-overlay/lldb/source/Plugins/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/lldb/source/Plugins/BUILD.bazel
@@ -493,8 +493,10 @@ cc_library(
         "//llvm:Support",
         "//llvm:TargetParser",
         "//llvm:config",
-        "@llvm_zlib//:zlib",
-    ],
+    ] + select({
+        "//config:LLVM_ENABLE_ZLIB_disabled": [],
+        "//conditions:default": ["@llvm_zlib//:zlib"],
+    }),
 )
 
 cc_library(
@@ -1416,8 +1418,10 @@ cc_library(
         "//lldb:Utility",
         "//llvm:Support",
         "//llvm:config",
-        "@llvm_zlib//:zlib",
-    ],
+    ] + select({
+        "//config:LLVM_ENABLE_ZLIB_disabled": [],
+        "//conditions:default": ["@llvm_zlib//:zlib"],
+    }),
 )
 
 cc_library(
diff --git a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
index dfed324a9cb49..5317d01d8988c 100644
--- a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
@@ -7,7 +7,11 @@ load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
 load("@rules_python//python:defs.bzl", "py_binary")
 load("//mlir:tblgen.bzl", "gentbl_cc_library", "gentbl_filegroup", "td_library")
 load(":binary_alias.bzl", "binary_alias")
-load(":config.bzl", "llvm_config_defines")
+load(
+    ":config.bzl",
+    "CONFIG_H_SUBSTITUTIONS",
+    "LLVM_CONFIG_H_SUBSTITUTIONS",
+)
 load(":driver.bzl", "generate_driver_selects", "generate_driver_tools_def", "llvm_driver_cc_binary", "select_driver_tools")
 load(":enum_targets_gen.bzl", "enum_targets_gen")
 load(":targets.bzl", "llvm_targets")
@@ -153,13 +157,6 @@ expand_template(
     template = "include/llvm/Config/abi-breaking.h.cmake",
 )
 
-# To enable diff testing out of tree
-exports_files([
-    "include/llvm/Config/config.h.cmake",
-    "include/llvm/Config/llvm-config.h.cmake",
-    "include/llvm/Config/abi-breaking.h.cmake",
-])
-
 td_library(
     name = "OptParserTdFiles",
     srcs = ["include/llvm/Option/OptParser.td"],
@@ -171,14 +168,52 @@ llvm_config_target_defines = [
     for t in llvm_targets
 ]
 
+expand_template(
+    name = "config_h",
+    out = "include/llvm/Config/config.h",
+    substitutions = CONFIG_H_SUBSTITUTIONS,
+    template = "include/llvm/Config/config.h.cmake",
+)
+
+expand_template(
+    name = "llvm-config_h",
+    out = "include/llvm/Config/llvm-config.h",
+    substitutions = LLVM_CONFIG_H_SUBSTITUTIONS,
+    template = "include/llvm/Config/llvm-config.h.cmake",
+)
+
 cc_library(
     name = "config",
     hdrs = [
         "include/llvm/Config/abi-breaking.h",
+        "include/llvm/Config/config.h",
         "include/llvm/Config/llvm-config.h",
     ],
     copts = llvm_copts,
-    defines = llvm_config_defines + llvm_config_target_defines,
+    defines = select({
+        "@platforms//os:windows": [
+            "_CRT_SECURE_NO_DEPRECATE",
+            "_CRT_SECURE_NO_WARNINGS",
+            "_CRT_NONSTDC_NO_DEPRECATE",
+            "_CRT_NONSTDC_NO_WARNINGS",
+            "_SCL_SECURE_NO_DEPRECATE",
+            "_SCL_SECURE_NO_WARNINGS",
+            "UNICODE",
+            "_UNICODE",
+        ],
+        "//conditions:default": [
+            "_GNU_SOURCE",
+        ],
+    }) + [
+        # These shouldn't be needed by the C++11 standard, but are for some
+        # platforms (e.g. glibc < 2.18. See
+        # https://sourceware.org/bugzilla/show_bug.cgi?id=15366). These are also
+        # included unconditionally in the CMake build:
+        # https://github.com/llvm/llvm-project/blob/cd0dd8ece8e/llvm/cmake/modules/HandleLLVMOptions.cmake#L907-L909
+        "__STDC_LIMIT_MACROS",
+        "__STDC_CONSTANT_MACROS",
+        "__STDC_FORMAT_MACROS",
+    ],
     includes = ["include"],
     textual_hdrs = [
         "include/llvm/Config/AsmParsers.def",
@@ -316,17 +351,15 @@ cc_library(
         "include/llvm/Support/*.def",
     ]),
     deps = [
-        ":config",
         ":Demangle",
-        # We unconditionally depend on the custom LLVM zlib wrapper. This will
-        # be an empty library unless zlib is enabled, in which case it will
-        # both provide the necessary dependencies and configuration defines.
-        "@llvm_zlib//:zlib",
-        # We unconditionally depend on the custom LLVM zstd wrapper. This will
-        # be an empty library unless zstd is enabled, in which case it will
-        # both provide the necessary dependencies and configuration defines.
-        "@llvm_zstd//:zstd",
-    ],
+        ":config",
+    ] + select({
+        "//config:LLVM_ENABLE_ZLIB_disabled": [],
+        "//conditions:default": ["@llvm_zlib//:zlib"],
+    }) + select({
+        "//config:LLVM_ENABLE_ZSTD_disabled": [],
+        "//conditions:default": ["@llvm_zstd//:zstd"],
+    }),
 )
 
 # Note: although FileCheck (the binary) is a test utility, some non-test
diff --git a/utils/bazel/llvm-project-overlay/llvm/config.bzl b/utils/bazel/llvm-project-overlay/llvm/config.bzl
index 6e703d22e7756..8a993a0e5113e 100644
--- a/utils/bazel/llvm-project-overlay/llvm/config.bzl
+++ b/utils/bazel/llvm-project-overlay/llvm/config.bzl
@@ -2,8 +2,9 @@
 # See https://llvm.org/LICENSE.txt for license information.
 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
-"""Defines variables that use selects to configure LLVM based on platform."""
+"""Substitutions for use in templates related to the LLVM configuration."""
 
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load(
     "//:vars.bzl",
     "LLVM_VERSION_MAJOR",
@@ -11,109 +12,314 @@ load(
     "LLVM_VERSION_PATCH",
     "PACKAGE_VERSION",
 )
+load(
+    "//config:cmakehelpers.bzl",
+    "cmakedefine",
+    "cmakedefine01",
+    "cmakedefine01_off",
+    "cmakedefine01_on",
+    "cmakedefine_set",
+    "cmakedefine_sset",
+    "cmakedefine_sunset",
+    "cmakedefine_unset",
+    "cmakedefine_vset",
+    "cmakedefine_vunset",
+)
+load("//llvm:targets.bzl", "llvm_targets")
 
-def native_arch_defines(arch, triple):
-    return [
-        r'LLVM_NATIVE_ARCH=\"{}\"'.format(arch),
-        "LLVM_NATIVE_ASMPARSER=LLVMInitialize{}AsmParser".format(arch),
-        "LLVM_NATIVE_ASMPRINTER=LLVMInitialize{}AsmPrinter".format(arch),
-        "LLVM_NATIVE_DISASSEMBLER=LLVMInitialize{}Disassembler".format(arch),
-        "LLVM_NATIVE_TARGET=LLVMInitialize{}Target".format(arch),
-        "LLVM_NATIVE_TARGETINFO=LLVMInitialize{}TargetInfo".format(arch),
-        "LLVM_NATIVE_TARGETMC=LLVMInitialize{}TargetMC".format(arch),
-        "LLVM_NATIVE_TARGETMCA=LLVMInitialize{}TargetMCA".format(arch),
-        r'LLVM_HOST_TRIPLE=\"{}\"'.format(triple),
-        r'LLVM_DEFAULT_TARGET_TRIPLE=\"{}\"'.format(triple),
-    ]
-
-posix_defines = [
-    "LLVM_ON_UNIX=1",
-    "HAVE_BACKTRACE=1",
-    "BACKTRACE_HEADER=<execinfo.h>",
-    r'LTDL_SHLIB_EXT=\".so\"',
-    r'LLVM_PLUGIN_EXT=\".so\"',
-    "LLVM_ENABLE_THREADS=1",
-    "HAVE_DEREGISTER_FRAME=1",
-    "HAVE_LIBPTHREAD=1",
-    "HAVE_PTHREAD_GETNAME_NP=1",
-    "HAVE_PTHREAD_H=1",
-    "HAVE_PTHREAD_SETNAME_NP=1",
-    "HAVE_REGISTER_FRAME=1",
-    "HAVE_SETENV_R=1",
-    "HAVE_STRERROR_R=1",
-    "HAVE_SYSEXITS_H=1",
-    "HAVE_UNISTD_H=1",
-]
-
-linux_defines = posix_defines + [
-    "_GNU_SOURCE",
-    "HAVE_MALLINFO=1",
-    "HAVE_SBRK=1",
-    "HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC=1",
-]
-
-macos_defines = posix_defines + [
-    "HAVE_MACH_MACH_H=1",
-    "HAVE_MALLOC_MALLOC_H=1",
-    "HAVE_MALLOC_ZONE_STATISTICS=1",
-    "HAVE_PROC_PID_RUSAGE=1",
-    "HAVE_UNW_ADD_DYNAMIC_FDE=1",
-]
-
-win32_defines = [
-    # Windows system library specific defines.
-    "_CRT_SECURE_NO_DEPRECATE",
-    "_CRT_SECURE_NO_WARNINGS",
-    "_CRT_NONSTDC_NO_DEPRECATE",
-    "_CRT_NONSTDC_NO_WARNINGS",
-    "_SCL_SECURE_NO_DEPRECATE",
-    "_SCL_SECURE_NO_WARNINGS",
-    "UNICODE",
-    "_UNICODE",
+CONFIG_H_SUBSTITUTIONS = (
+    {"${BUG_REPORT_URL}": "https://github.com/llvm/llvm-project/issues/"} |
+    cmakedefine01(
+        "ENABLE_BACKTRACES",
+        disable = "//config:LLVM_ENABLE_BACKTRACES_disabled",
+    ) |
+    cmakedefine01(
+        "ENABLE_CRASH_OVERRIDES",
+        disable = "//config:LLVM_ENABLE_CRASH_OVERRIDES_disabled",
+    ) |
+    cmakedefine01(
+        "LLVM_ENABLE_CRASH_DUMPS",
+        enable = "//config:LLVM_ENABLE_CRASH_DUMPS_enabled",
+    ) |
+    cmakedefine01(
+        "ENABLE_DEBUGLOC_COVERAGE_TRACKING",
+        enable = "//config:LLVM_ENABLE_DEBUGLOC_COVERAGE_TRACKING_coverage",
+    ) |
+    cmakedefine01(
+        "LLVM_WINDOWS_PREFER_FORWARD_SLASH",
+        enable = (
+            "@bazel_tools//tools/cpp:mingw",
+            "//config:LLVM_WINDOWS_PREFER_FORWARD_SLASH_enabled",
+        ),
+        disable = (
+            "//config:LLVM_WINDOWS_PREFER_FORWARD_SLASH_disabled",
+            "//conditions:default",
+        ),
+    ) |
+    cmakedefine("HAVE_BACKTRACE", enable = "//config:posix") |
+    {"${BACKTRACE_HEADER}": "execinfo.h"} |
+    cmakedefine_unset("HAVE_CRASHREPORTERCLIENT_H") |
+    cmakedefine01_off("HAVE_CRASHREPORTER_INFO") |
+    cmakedefine01_off("HAVE_DECL_ARC4RANDOM") |
+    cmakedefine01_on("HAVE_DECL_FE_ALL_EXCEPT") |
+    cmakedefine01_on("HAVE_DECL_FE_INEXACT") |
+    cmakedefine01_off("HAVE_DECL_STRERROR_S") |
+    cmakedefine_vset("HAVE_DLOPEN") |
+    cmakedefine("HAVE_REGISTER_FRAME", enable = "//config:posix") |
+    cmakedefine("HAVE_DEREGISTER_FRAME", enable = "//config:posix") |
+    cmakedefine("HAVE_UNW_ADD_DYNAMIC_FDE", enable = "@platforms//os:macos") |
+    cmakedefine_vunset("HAVE_FFI_CALL") |
+    cmakedefine_vunset("HAVE_FFI_FFI_H") |
+    cmakedefine_vunset("HAVE_FFI_H") |
+    cmakedefine_vset("HAVE_FUTIMENS") |
+    cmakedefine_vset("HAVE_FUTIMES") |
+    cmakedefine_vset("HAVE_GETPAGESIZE") |
+    cmakedefine_vset("HAVE_GETRUSAGE") |
+    {"#cmakedefine HAVE_ISATTY 1": "#define HAVE_ISATTY 1"} |
+    cmakedefine_vunset("HAVE_LIBEDIT") |
+    # TODO: Wire this up Exegesis and remove custom logic.
+    cmakedefine_vunset("HAVE_LIBPFM") |
+    cmakedefine_vunset("LIBPFM_HAS_FIELD_CYCLES") |
+    cmakedefine_vunset("HAVE_LIBPSAPI") |
+    cmakedefine("HAVE_LIBPTHREAD", enable = "//config:posix") |
+    cmakedefine("HAVE_PTHREAD_GETNAME_NP", enable = "//config:posix") |
+    cmakedefine("HAVE_PTHREAD_SETNAME_NP", enable = "//config:posix") |
+    cmakedefine_vunset("HAVE_PTHREAD_GET_NAME_NP") |  # TODO: Likely wrong?
+    cmakedefine_vunset("HAVE_PTHREAD_SET_NAME_NP") |  # TODO: Likely wrong?
+    cmakedefine("HAVE_MACH_MACH_H", enable = "@platforms//os:macos") |
+    cmakedefine_vunset("HAVE_MALLCTL") |
+    cmakedefine("HAVE_MALLINFO", enable = "@platforms//os:linux") |
+    # TODO(aaronmondal): Make configurable and enable by default.
+    cmakedefine_vunset("HAVE_MALLINFO2") |
+    cmakedefine("HAVE_MALLOC_MALLOC_H", enable = "@platforms//os:macos") |
+    cmakedefine(
+        "HAVE_MALLOC_ZONE_STATISTICS",
+        enable = "@platforms//os:macos",
+    ) |
+    cmakedefine_vset("HAVE_POSIX_SPAWN") |
+    cmakedefine_vset("HAVE_PREAD") |
+    cmakedefine("HAVE_PTHREAD_H", enable = "//config:posix") |
+    cmakedefine_vset("HAVE_PTHREAD_MUTEX_LOCK") |
+    cmakedefine_vset("HAVE_PTHREAD_RWLOCK_INIT") |
+    cmakedefine("HAVE_SBRK", enable = "@platforms//os:linux") |
+    cmakedefine("HAVE_SETENV", enable = "//config:posix") |
+    cmakedefine_vset("HAVE_SIGALTSTACK") |
+    cmakedefine("HAVE_STRERROR_R", enable = "//config:posix") |
+    cmakedefine_vset("HAVE_SYSCONF") |
+    cmakedefine_vset("HAVE_SYS_MMAN_H") |
+    cmakedefine_vunset("HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC") |
+    cmakedefine(
+        "HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC",
+        enable = "@platforms//os:linux",
+    ) |
+    cmakedefine("HAVE_UNISTD_H", enable = "//config:posix") |
+    cmakedefine_vunset("HAVE_VALGRIND_VALGRIND_H") |
+    cmakedefine_vunset("HAVE__ALLOCA") |
+    cmakedefine_vunset("HAVE__CHSIZE_S") |
+    cmakedefine_vset("HAVE__UNWIND_BACKTRACE") |
+    cmakedefine_vunset("HAVE___ALLOCA") |
+    cmakedefine_vunset("HAVE___ASHLDI3") |
+    cmakedefine_vunset("HAVE___ASHRDI3") |
+    cmakedefine_vunset("HAVE___CHKSTK") |
+    cmakedefine_vunset("HAVE___CHKSTK_MS") |
+    cmakedefine_vunset("HAVE___CMPDI2") |
+    cmakedefine_vunset("HAVE___DIVDI3") |
+    cmakedefine_vunset("HAVE___FIXDFDI") |
+    cmakedefine_vunset("HAVE___FIXSFDI") |
+    cmakedefine_vunset("HAVE___FLOATDIDF") |
+    cmakedefine_vunset("HAVE___LSHRDI3") |
+    cmakedefine_vunset("HAVE___MAIN") |
+    cmakedefine_vunset("HAVE___MODDI3") |
+    cmakedefine_vunset("HAVE___UDIVDI3") |
+    cmakedefine_vunset("HAVE___UMODDI3") |
+    cmakedefine_vunset("HAVE____CHKSTK") |
+    cmakedefine_vunset("HAVE____CHKSTK_MS") |
+    cmakedefine_sunset("HOST_LINK_VERSION") |
+    cmakedefine_sunset("LLVM_TARGET_TRIPLE_ENV") |
+    cmakedefine01_on("LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO") |
+    cmakedefine01_on("LLVM_VERSION_PRINTER_SHOW_BUILD_CONFIG") |
+    cmakedefine_vunset("LLVM_ENABLE_LIBXML2") |
+    select({
+        "@platforms//os:windows": cmakedefine_sset("LTDL_SHLIB_EXT", ".dll"),
+        "@platforms//os:macos": cmakedefine_sset("LTDL_SHLIB_EXT", ".dylib"),
+        "//conditions:default": cmakedefine_sset("LTDL_SHLIB_EXT", ".so"),
+    }) |
+    select({
+        "@platforms//os:windows": cmakedefine_sset("LLVM_PLUGIN_EXT", ".dll"),
+        "@platforms//os:macos": cmakedefine_sset("LLVM_PLUGIN_EXT", ".dylib"),
+        "//conditions:default": cmakedefine_sset("LLVM_PLUGIN_EXT", ".so"),
+    }) |
+    cmakedefine_sset(
+        "PACKAGE_BUGREPORT",
+        "https://github.com/llvm/llvm-project/issues/",
+    ) |
+    cmakedefine_sset("PACKAGE_NAME", "LLVM") |
+    cmakedefine_sset(
+        "PACKAGE_STRING",
+        '" PACKAGE_NAME " " LLVM_VERSION_STRING "',
+    ) |
+    cmakedefine_sset("PACKAGE_VERSION", '" LLVM_VERSION_STRING "') |
+    cmakedefine_sunset("PACKAGE_VENDOR") |
+    select({
+        "@platforms//os:windows": cmakedefine_sset("stricmp", "_stricmp"),
+        "//conditions:default": cmakedefine_vunset("stricmp"),
+    }) |
+    select({
+        "@platforms//os:windows": cmakedefine_sset("strdup", "_strdup"),
+        "//conditions:default": cmakedefine_vunset("strdup"),
+    }) |
+    cmakedefine01_off("LLVM_GISEL_COV_ENABLED") |
+    cmakedefine_sunset("LLVM_GISEL_COV_PREFIX") |
+    cmakedefine01_off("LLVM_SUPPORT_XCODE_SIGNPOSTS") |
+    select({
+        "@platforms//os:macos": {
+            "#cmakedefine HAVE_PROC_PID_RUSAGE 1": "#define HAVE_PROC_PID_RUSAGE 1",
+        },
+        "//conditions:default": {
+            "#cmakedefine HAVE_PROC_PID_RUSAGE 1": "/* undef HAVE_PROC_PID_RUSAGE */",
+        },
+    }) |
+    cmakedefine(
+        "HAVE_BUILTIN_THREAD_POINTER",
+        enable = "@platforms//os:linux",
+        disable = (
+            # HAVE_BUILTIN_THREAD_POINTER is true for on Linux outside of ppc64
+            # for all recent toolchains.
+            "//config:powerpc64le-unknown-linux-gnu",
+            "//conditions:default",
+        ),
+    ) |
+    cmakedefine_vset("HAVE_GETAUXVAL")
+)
 
-    # LLVM features
-    r'LTDL_SHLIB_EXT=\".dll\"',
-    r'LLVM_PLUGIN_EXT=\".dll\"',
+# TODO(aaronmondal): Consider reimplementing `@platforms` in a way that
+#                    bidirectionally maps to llvm/TargetParser/Triple.h.
+TRIPLES = [
+    "aarch64-apple-darwin",
+    "aarch64-unknown-linux-gnu",
+    "powerpc64le-unknown-linux-gnu",
+    "systemz-unknown-linux_gnu",
+    "x86_64-apple-darwin",
+    "x86_64-pc-win32",
+    "x86_64-unknown-linux-gnu",
 ]
 
-# TODO: We should switch to platforms-based config settings to make this easier
-# to express.
-os_defines = select({
-    "@bazel_tools//src/conditions:windows": win32_defines,
-    "@bazel_tools//src/conditions:darwin": macos_defines,
-    "@bazel_tools//src/conditions:freebsd": posix_defines,
-    "//conditions:default": linux_defines,
-})
-
-# HAVE_BUILTIN_THREAD_POINTER is true for on Linux (outside of ppc64) for
-# all recent toolchains. Add it here by default on Linux as we can't perform a
-# configure time check.
-builtin_thread_pointer = select({
-    "@bazel_tools//src/conditions:linux_ppc64le": [],
-    "@bazel_tools//src/conditions:linux": ["HAVE_BUILTIN_THREAD_POINTER"],
-    "//conditions:default": [],
-})
-
-# TODO: We should split out host vs. target here.
-llvm_config_defines = os_defines + builtin_thread_pointer + select({
-    "@bazel_tools//src/conditions:windows": native_arch_defines("X86", "x86_64-pc-win32"),
-    "@bazel_tools//src/conditions:darwin_arm64": native_arch_defines("AArch64", "arm64-apple-darwin"),
-    "@bazel_tools//src/conditions:darwin_x86_64": native_arch_defines("X86", "x86_64-unknown-darwin"),
-    "@bazel_tools//src/conditions:linux_aarch64": native_arch_defines("AArch64", "aarch64-unknown-linux-gnu"),
-    "@bazel_tools//src/conditions:linux_ppc64le": native_arch_defines("PowerPC", "powerpc64le-unknown-linux-gnu"),
-    "@bazel_tools//src/conditions:linux_s390x": native_arch_defines("SystemZ", "systemz-unknown-linux_gnu"),
-    "//conditions:default": native_arch_defines("X86", "x86_64-unknown-linux-gnu"),
-}) + [
-    "LLVM_VERSION_MAJOR={}".format(LLVM_VERSION_MAJOR),
-    "LLVM_VERSION_MINOR={}".format(LLVM_VERSION_MINOR),
-    "LLVM_VERSION_PATCH={}".format(LLVM_VERSION_PATCH),
-    r'LLVM_VERSION_STRING=\"{}\"'.format(PACKAGE_VERSION),
-    # These shouldn't be needed by the C++11 standard, but are for some
-    # platforms (e.g. glibc < 2.18. See
-    # https://sourceware.org/bugzilla/show_bug.cgi?id=15366). These are also
-    # included unconditionally in the CMake build:
-    # https://github.com/llvm/llvm-project/blob/cd0dd8ece8e/llvm/cmake/modules/HandleLLVMOptions.cmake#L907-L909
-    "__STDC_LIMIT_MACROS",
-    "__STDC_CONSTANT_MACROS",
-    "__STDC_FORMAT_MACROS",
-]
+LLVM_CONFIG_H_SUBSTITUTIONS = (
+    cmakedefine_unset("LLVM_ENABLE_DUMP") |
+    # TODO(aaronmondal): Make this independent of the host triple.
+    select({
+        "//config:{}".format(triple): {"${LLVM_DEFAULT_TARGET_TRIPLE}": triple}
+        for triple in TRIPLES
+    }) |
+    cmakedefine01_on("LLVM_ENABLE_THREADS") |
+    cmakedefine01_on("LLVM_HAS_ATOMICS") |
+    select({
+        "//config:{}".format(triple): cmakedefine_sset(
+            "LLVM_HOST_TRIPLE",
+            triple,
+        )
+        for triple in TRIPLES
+    }) |
+    select({
+        "@platforms//cpu:{}".format(cpu): {
+            "#cmakedefine LLVM_NATIVE_ARCH ${LLVM_NATIVE_ARCH}": "#define LLVM_NATIVE_ARCH {}".format(arch),
+            "#cmakedefine LLVM_NATIVE_ASMPARSER LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser": "#define LLVM_NATIVE_ASMPARSER LLVMInitialize{}AsmParser".format(arch),
+            "#cmakedefine LLVM_NATIVE_ASMPRINTER LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter": "#define LLVM_NATIVE_ASMPRINTER LLVMInitialize{}AsmPrinter".format(arch),
+            "#cmakedefine LLVM_NATIVE_DISASSEMBLER LLVMInitialize${LLVM_NATIVE_ARCH}Disassembler": "#define LLVM_NATIVE_DISASSEMBLER LLVMInitialize{}Disassembler".format(arch),
+            "#cmakedefine LLVM_NATIVE_TARGET LLVMInitialize${LLVM_NATIVE_ARCH}Target": "#define LLVM_NATIVE_TARGET LLVMInitialize{}Target".format(arch),
+            "#cmakedefine LLVM_NATIVE_TARGETINFO LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo": "#define LLVM_NATIVE_TARGETINFO LLVMInitialize{}TargetInfo".format(arch),
+            "#cmakedefine LLVM_NATIVE_TARGETMC LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC": "#define LLVM_NATIVE_TARGETMC LLVMInitialize{}TargetMC".format(arch),
+            "#cmakedefine LLVM_NATIVE_TARGETMCA LLVMInitialize${LLVM_NATIVE_ARCH}TargetMCA": "#define LLVM_NATIVE_TARGETMCA LLVMInitialize{}TargetMCA".format(arch),
+        }
+        for (cpu, arch) in [
+            ("x86_64", "X86"),
+            ("aarch64", "AArch64"),
+            ("ppc64le", "PowerPC"),
+            ("s390x", "SystemZ"),
+        ]
+    }) |
+    {
+        "#cmakedefine01 LLVM_HAS_{}_TARGET".format(
+            target,
+        ): "#define LLVM_HAS_{}_TARGET {}".format(
+            target,
+            1 if target in llvm_targets else 0,
+        )
+        for target in [
+            "AARCH64",
+            "AMDGPU",
+            "ARC",
+            "ARM",
+            "AVR",
+            "BPF",
+            "CSKY",
+            "DIRECTX",
+            "HEXAGON",
+            "LANAI",
+            "LOONGARCH",
+            "M68K",
+            "MIPS",
+            "MSP430",
+            "NVPTX",
+            "POWERPC",
+            "RISCV",
+            "SPARC",
+            "SPIRV",
+            "SYSTEMZ",
+            "VE",
+            "WEBASSEMBLY",
+            "X86",
+            "XCORE",
+            "XTENSA",
+        ]
+    } |
+    cmakedefine("LLVM_ON_UNIX", enable = "//config:posix") |
+    cmakedefine01_off("LLVM_USE_INTEL_JITEVENTS") |
+    cmakedefine01_off("LLVM_USE_OPROFILE") |
+    cmakedefine01_off("LLVM_USE_PERF") |
+    {
+        "${LLVM_VERSION_MAJOR}": LLVM_VERSION_MAJOR,
+        "${LLVM_VERSION_MINOR}": LLVM_VERSION_MINOR,
+        "${LLVM_VERSION_PATCH}": LLVM_VERSION_PATCH,
+        "${PACKAGE_VERSION}": PACKAGE_VERSION,
+    } |
+    cmakedefine01_off("LLVM_FORCE_ENABLE_STATS") |
+    cmakedefine_vunset("LLVM_WITH_Z3") |
+    cmakedefine_vunset("LLVM_ENABLE_CURL") |
+    cmakedefine_vunset("LLVM_ENABLE_HTTPLIB") |
+    cmakedefine01(
+        "LLVM_ENABLE_ZLIB",
+        disable = "//config:LLVM_ENABLE_ZLIB_disabled",
+    ) |
+    cmakedefine01(
+        "LLVM_ENABLE_ZSTD",
+        disable = "//config:LLVM_ENABLE_ZSTD_disabled",
+    ) |
+    cmakedefine_unset("LLVM_HAVE_TFLITE") |
+    cmakedefine("HAVE_SYSEXITS_H", enable = "//config:posix") |
+    cmakedefine_unset("LLVM_BUILD_LLVM_DYLIB") |
+    cmakedefine_unset("LLVM_BUILD_SHARED_LIBS") |
+    cmakedefine_vunset("LLVM_FORCE_USE_OLD_TOOLCHAIN") |
+    cmakedefine01_on("LLVM_UNREACHABLE_OPTIMIZE") |
+    cmakedefine01_off("LLVM_ENABLE_DIA_SDK") |
+    selects.with_or({
+        # Note: Technically enabled for dynamic builds on Windows, but that's
+        #       currently disabled globally in Bazel.
+        (
+            "@platforms//os:windows",
+            "//config:LLVM_ENABLE_PLUGINS_disabled",
+        ): cmakedefine_unset("LLVM_ENABLE_PLUGINS"),
+        # TODO(aaronmondal): The CMake build seems to have a slightly different
+        #                    intention for "OS390" but that doesn't seem to be a
+        #                    valid CMake option. Fix or clarify this in CMake.
+        (
+            "//conditions:default",
+            "//config:LLVM_ENABLE_PLUGINS_enabled",
+        ): cmakedefine_set("LLVM_ENABLE_PLUGINS"),
+    }) |
+    select({
+        "//config:LLVM_HAS_LOGF128_enabled": cmakedefine_set("LLVM_HAS_LOGF128"),
+        "//conditions:default": cmakedefine_unset("LLVM_HAS_LOGF128"),
+    }) |
+    cmakedefine_vunset("LLVM_BUILD_TELEMETRY")
+)
diff --git a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h b/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h
deleted file mode 100644
index 93695f8e26d27..0000000000000
--- a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h
+++ /dev/null
@@ -1,314 +0,0 @@
-/*===------- llvm/Config/config.h - llvm configuration ------------*- C -*-===*/
-/*                                                                            */
-/* Part of the LLVM Project, 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                    */
-/*                                                                            */
-/*===----------------------------------------------------------------------===*/
-
-/* This is a manual port of config.h.cmake for the symbols that do not change
-   based on platform. Those that do change should not be defined here and
-   instead use Bazel cc_library defines. Some attempt has been made to extract
-   such symbols that do vary based on platform (for the platforms we care about)
-   into Bazel defines, but it is by no means complete, so if you see something
-   that looks wrong, it probably is. */
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-// Include this header only under the llvm source tree.
-// This is a private header.
-
-/* Exported configuration */
-#include "llvm/Config/llvm-config.h"
-
-/* Bug report URL. */
-#define BUG_REPORT_URL "https://github.com/llvm/llvm-project/issues/"
-
-/* Define to 1 to enable backtraces, and to 0 otherwise. */
-#define ENABLE_BACKTRACES 1
-
-/* Define to 1 to enable crash overrides, and to 0 otherwise. */
-#define ENABLE_CRASH_OVERRIDES 1
-
-/* Define to 1 to enable crash memory dumps, and to 0 otherwise. */
-#define LLVM_ENABLE_CRASH_DUMPS 0
-
-/* Define to 1 to prefer forward slashes on Windows, and to 0 prefer
-   backslashes. */
-#define LLVM_WINDOWS_PREFER_FORWARD_SLASH 0
-
-/* Define to 1 if you have the `backtrace' function. */
-/* HAVE_BACKTRACE defined in Bazel */
-
-/* BACKTRACE_HEADER defined in Bazel */
-
-/* Define to 1 if you have the <CrashReporterClient.h> header file. */
-/* HAVE_CRASHREPORTERCLIENT_H defined in Bazel */
-
-/* can use __crashreporter_info__ */
-/* HAVE_CRASHREPORTER_INFO  defined in Bazel */
-
-/* Define to 1 if you have the declaration of `arc4random', and to 0 if you
-   don't. */
-#define HAVE_DECL_ARC4RANDOM 0
-
-/* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you
-   don't. */
-#define HAVE_DECL_FE_ALL_EXCEPT 1
-
-/* Define to 1 if you have the declaration of `FE_INEXACT', and to 0 if you
-   don't. */
-#define HAVE_DECL_FE_INEXACT 1
-
-/* Define to 1 if you have the declaration of `strerror_s', and to 0 if you
-   don't. */
-#define HAVE_DECL_STRERROR_S 0
-
-/* Define if dlopen() is available on this platform. */
-#define HAVE_DLOPEN 1
-
-/* Define to 1 if we can register EH frames on this platform. */
-/* HAVE_REGISTER_FRAME defined in Bazel*/
-
-/* Define to 1 if we can deregister EH frames on this platform. */
-/* HAVE_DEREGISTER_FRAME defined in Bazel*/
-
-/* Define if __unw_add_dynamic_fde() is available on this platform. */
-/* HAVE_UNW_ADD_DYNAMIC_FDE defined in Bazel */
-
-/* Define if libffi is available on this platform. */
-/* #undef HAVE_FFI_CALL */
-
-/* Define to 1 if you have the <ffi/ffi.h> header file. */
-/* #undef HAVE_FFI_FFI_H */
-
-/* Define to 1 if you have the <ffi.h> header file. */
-/* #undef HAVE_FFI_H */
-
-/* Define to 1 if you have the `futimens' function. */
-#define HAVE_FUTIMENS 1
-
-/* Define to 1 if you have the `futimes' function. */
-#define HAVE_FUTIMES 1
-
-/* Define to 1 if you have the `getpagesize' function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define to 1 if you have the `getrusage' function. */
-#define HAVE_GETRUSAGE 1
-
-/* Define to 1 if you have the `isatty' function. */
-#define HAVE_ISATTY 1
-
-/* Define to 1 if you have the `edit' library (-ledit). */
-/* #undef HAVE_LIBEDIT */
-
-/* Define to 1 if you have the `pfm' library (-lpfm). */
-/* #undef HAVE_LIBPFM */
-
-/* Define to 1 if the `perf_branch_entry' struct has field cycles. */
-/* #undef LIBPFM_HAS_FIELD_CYCLES */
-
-/* Define to 1 if you have the `psapi' library (-lpsapi). */
-/* #undef HAVE_LIBPSAPI */
-
-/* Define to 1 if you have the `pthread' library (-lpthread). */
-#define HAVE_LIBPTHREAD 1
-
-/* Define to 1 if you have the `pthread_getname_np' function. */
-#define HAVE_PTHREAD_GETNAME_NP 1
-
-/* Define to 1 if you have the `pthread_setname_np' function. */
-#define HAVE_PTHREAD_SETNAME_NP 1
-
-/* Define to 1 if you have the <mach/mach.h> header file. */
-/* HAVE_MACH_MACH_H defined in Bazel */
-
-/* Define to 1 if you have the `mallctl' function. */
-/* #undef HAVE_MALLCTL */
-
-/* Define to 1 if you have the `mallinfo' function. */
-/* HAVE_MALLINFO defined in Bazel */
-
-/* Define to 1 if you have the <malloc/malloc.h> header file. */
-/* HAVE_MALLOC_MALLOC_H defined in Bazel */
-
-/* Define to 1 if you have the `malloc_zone_statistics' function. */
-/* HAVE_MALLOC_ZONE_STATISTICS defined in Bazel */
-
-/* Define to 1 if you have the `posix_spawn' function. */
-#define HAVE_POSIX_SPAWN 1
-
-/* Define to 1 if you have the `pread' function. */
-#define HAVE_PREAD 1
-
-/* Define to 1 if you have the <pthread.h> header file. */
-/* HAVE_PTHREAD_H defined in Bazel */
-
-/* Have pthread_mutex_lock */
-#define HAVE_PTHREAD_MUTEX_LOCK 1
-
-/* Have pthread_rwlock_init */
-#define HAVE_PTHREAD_RWLOCK_INIT 1
-
-/* Define to 1 if you have the `sbrk' function. */
-/* HAVE_SBRK defined in Bazel */
-
-/* Define to 1 if you have the `setenv' function. */
-/* HAVE_SETENV defined in Bazel */
-
-/* Define to 1 if you have the `sigaltstack' function. */
-#define HAVE_SIGALTSTACK 1
-
-/* Define to 1 if you have the `strerror_r' function. */
-/* HAVE_STRERROR_R defined in Bazel */
-
-/* Define to 1 if you have the `sysconf' function. */
-#define HAVE_SYSCONF 1
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#define HAVE_SYS_MMAN_H 1
-
-/* Define to 1 if stat struct has st_mtimespec member .*/
-/* #undef HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC */
-
-/* Define to 1 if stat struct has st_mtim member. */
-/* HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC defined in Bazel */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-/* HAVE_UNISTD_H defined in Bazel */
-
-/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
-/* #undef HAVE_VALGRIND_VALGRIND_H */
-
-/* Have host's _alloca */
-/* #undef HAVE__ALLOCA */
-
-/* Define to 1 if you have the `_chsize_s' function. */
-/* #undef HAVE__CHSIZE_S */
-
-/* Define to 1 if you have the `_Unwind_Backtrace' function. */
-#define HAVE__UNWIND_BACKTRACE 1
-
-/* Have host's __alloca */
-/* #undef HAVE___ALLOCA */
-
-/* Have host's __ashldi3 */
-/* #undef HAVE___ASHLDI3 */
-
-/* Have host's __ashrdi3 */
-/* #undef HAVE___ASHRDI3 */
-
-/* Have host's __chkstk */
-/* #undef HAVE___CHKSTK */
-
-/* Have host's __chkstk_ms */
-/* #undef HAVE___CHKSTK_MS */
-
-/* Have host's __cmpdi2 */
-/* #undef HAVE___CMPDI2 */
-
-/* Have host's __divdi3 */
-/* #undef HAVE___DIVDI3 */
-
-/* Have host's __fixdfdi */
-/* #undef HAVE___FIXDFDI */
-
-/* Have host's __fixsfdi */
-/* #undef HAVE___FIXSFDI */
-
-/* Have host's __floatdidf */
-/* #undef HAVE___FLOATDIDF */
-
-/* Have host's __lshrdi3 */
-/* #undef HAVE___LSHRDI3 */
-
-/* Have host's __main */
-/* #undef HAVE___MAIN */
-
-/* Have host's __moddi3 */
-/* #undef HAVE___MODDI3 */
-
-/* Have host's __udivdi3 */
-/* #undef HAVE___UDIVDI3 */
-
-/* Have host's __umoddi3 */
-/* #undef HAVE___UMODDI3 */
-
-/* Have host's ___chkstk */
-/* #undef HAVE____CHKSTK */
-
-/* Have host's ___chkstk_ms */
-/* #undef HAVE____CHKSTK_MS */
-
-/* Linker version detected at compile time. */
-/* #undef HOST_LINK_VERSION */
-
-/* Define if zlib compression is available */
-/* LLVM_ENABLE_ZLIB defined in Bazel */
-
-/* Define if overriding target triple is enabled */
-/* #undef LLVM_TARGET_TRIPLE_ENV */
-
-/* Whether tools show host and target info when invoked with --version */
-#define LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO 1
-
-/* Whether tools show optional build config flags when invoked with --version */
-#define LLVM_VERSION_PRINTER_SHOW_BUILD_CONFIG 1
-
-/* Define if libxml2 is supported on this platform. */
-/* #undef LLVM_ENABLE_LIBXML2 */
-
-/* Define to the extension used for shared libraries, say, ".so". */
-/* LTDL_SHLIB_EXT defined in Bazel */
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "https://github.com/llvm/llvm-project/issues/"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "LLVM"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING PACKAGE_NAME " " LLVM_VERSION_STRING
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION LLVM_VERSION_STRING
-
-/* Define to the vendor of this package. */
-/* #undef PACKAGE_VENDOR */
-
-/* Define to a function implementing stricmp */
-/* stricmp defined conditionally below. */
-
-/* Define to a function implementing strdup */
-/* strdup defined conditionally below. */
-
-/* Whether GlobalISel rule coverage is being collected */
-#define LLVM_GISEL_COV_ENABLED 0
-
-/* Define to the default GlobalISel coverage file prefix */
-/* #undef LLVM_GISEL_COV_PREFIX */
-
-/* Whether Timers signpost passes in Xcode Instruments */
-#define LLVM_SUPPORT_XCODE_SIGNPOSTS 0
-
-/* HAVE_PROC_PID_RUSAGE defined in Bazel */
-
-#define HAVE_GETAUXVAL 1
-
-/* Directly provide definitions here behind platform preprocessor definitions.
- * The preprocessor conditions are sufficient to handle all of the configuration
- * on platforms targeted by Bazel, and defining these here more faithfully
- * matches how the users of this header expect things to work with CMake.
- * FIXME: We should consider moving other platform defines to use this technique
- * as well.
- */
-
-#ifdef _WIN32
-#define stricmp _stricmp
-#define strdup _strdup
-#endif
-
-#endif
diff --git a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/llvm-config.h b/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/llvm-config.h
deleted file mode 100644
index 5240b8299c109..0000000000000
--- a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/llvm-config.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*===------- llvm/Config/llvm-config.h - llvm configuration -------*- C -*-===*/
-/*                                                                            */
-/* Part of the LLVM Project, 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                    */
-/*                                                                            */
-/*===----------------------------------------------------------------------===*/
-
-/* This is a manual port of config.h.cmake for the symbols that do not change
-   based on platform. Those that do change should not be defined here and
-   instead use Bazel cc_library defines. Some attempt has been made to extract
-   such symbols that do vary based on platform (for the platforms we care about)
-   into Bazel defines, but it is by no means complete, so if you see something
-   that looks wrong, it probably is. */
-
-
-/* This file enumerates variables from the LLVM configuration so that they
-   can be in exported headers and won't override package specific directives.
-   This is a C header that can be included in the llvm-c headers. */
-
-#ifndef LLVM_CONFIG_H
-#define LLVM_CONFIG_H
-
-/* Define if LLVM_ENABLE_DUMP is enabled */
-/* #undef LLVM_ENABLE_DUMP */
-
-/* Target triple LLVM will generate code for by default */
-/* LLVM_DEFAULT_TARGET_TRIPLE defined in Bazel */
-
-/* Define if threads enabled */
-#define LLVM_ENABLE_THREADS 1
-
-/* Has gcc/MSVC atomic intrinsics */
-#define LLVM_HAS_ATOMICS 1
-
-/* Host triple LLVM will be executed on */
-/* LLVM_HOST_TRIPLE defined in Bazel */
-
-/* LLVM architecture name for the native architecture, if available */
-/* LLVM_NATIVE_ARCH defined in Bazel */
-
-/* LLVM name for the native AsmParser init function, if available */
-/* LLVM_NATIVE_ASMPARSER defined in Bazel */
-
-/* LLVM name for the native AsmPrinter init function, if available */
-/* LLVM_NATIVE_ASMPRINTER defined in Bazel */
-
-/* LLVM name for the native Disassembler init function, if available */
-/* LLVM_NATIVE_DISASSEMBLER defined in Bazel */
-
-/* LLVM name for the native Target init function, if available */
-/* LLVM_NATIVE_TARGET defined in Bazel */
-
-/* LLVM name for the native TargetInfo init function, if available */
-/* LLVM_NATIVE_TARGETINFO defined in Bazel */
-
-/* LLVM name for the native target MC init function, if available */
-/* LLVM_NATIVE_TARGETMC defined in Bazel */
-
-/* LLVM name for the native target MCA init function, if available */
-/* LLVM_NATIVE_TARGETMCA defined in Bazel */
-
-/* Define if this is Unixish platform */
-/* LLVM_ON_UNIX defined in Bazel */
-
-/* Define if we have the Intel JIT API runtime support library */
-#define LLVM_USE_INTEL_JITEVENTS 0
-
-/* Define if we have the oprofile JIT-support library */
-#define LLVM_USE_OPROFILE 0
-
-/* Define if we have the perf JIT-support library */
-#define LLVM_USE_PERF 0
-
-/* Major version of the LLVM API */
-/* #undef LLVM_VERSION_MAJOR */
-
-/* Minor version of the LLVM API */
-/* #undef LLVM_VERSION_MINOR */
-
-/* Patch version of the LLVM API */
-/* #undef LLVM_VERSION_PATCH */
-
-/* LLVM version string */
-/* #undef LLVM_VERSION_STRING */
-
-/* Whether LLVM records statistics for use with GetStatistics(),
- * PrintStatistics() or PrintStatisticsJSON()
- */
-#define LLVM_FORCE_ENABLE_STATS 0
-
-/* Define if we have z3 and want to build it */
-/* #undef LLVM_WITH_Z3 */
-
-/* Define if we have curl and want to use it */
-/* #undef LLVM_ENABLE_CURL */
-
-/* Define if we have cpp-httplib and want to use it */
-/* #undef LLVM_ENABLE_HTTPLIB */
-
-/* Define if LLVM was built with a dependency to the tensorflow compiler */
-/* #undef LLVM_HAVE_TF_AOT */
-
-/* Define to 1 if you have the <sysexits.h> header file. */
-/* HAVE_SYSEXITS_H defined in Bazel */
-
-/* Define if the xar_open() function is supported this platform. */
-/* #undef HAVE_LIBXAR */
-
-/* Define if building libLLVM shared library */
-/* #undef LLVM_BUILD_LLVM_DYLIB */
-
-/* Define if building LLVM with BUILD_SHARED_LIBS */
-/* #undef LLVM_BUILD_SHARED_LIBS */
-
-/* Define if building LLVM with LLVM_FORCE_USE_OLD_TOOLCHAIN_LIBS */
-/* #undef LLVM_FORCE_USE_OLD_TOOLCHAIN ${LLVM_FORCE_USE_OLD_TOOLCHAIN} */
-
-/* Define if llvm_unreachable should be optimized with undefined behavior
- * in non assert builds */
-#define LLVM_UNREACHABLE_OPTIMIZE 1
-
-/* Define to 1 if you have the DIA SDK installed, and to 0 if you don't. */
-#define LLVM_ENABLE_DIA_SDK 0
-
-#endif
diff --git a/utils/bazel/llvm-project-overlay/platform/BUILD.bazel b/utils/bazel/llvm-project-overlay/platform/BUILD.bazel
new file mode 100644
index 0000000000000..a7a9600764264
--- /dev/null
+++ b/utils/bazel/llvm-project-overlay/platform/BUILD.bazel
@@ -0,0 +1,64 @@
+# 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
+
+"""Targetable platforms for the Bazel build."""
+
+# TODO(aaronmondal): Add triples for more useful platforms as per
+#                   `llvm/include/llvm/TargetParser/Triple.h`.
+
+platform(
+    name = "aarch64-apple-darwin",
+    constraint_values = [
+        "@platforms//cpu:aarch64",
+        "@platforms//os:macos",
+    ],
+)
+
+platform(
+    name = "aarch64-unknown-linux-gnu",
+    constraint_values = [
+        "@platforms//cpu:aarch64",
+        "@platforms//os:linux",
+    ],
+)
+
+platform(
+    name = "powerpc64le-unknown-linux-gnu",
+    constraint_values = [
+        "@platforms//cpu:ppc64le",
+        "@platforms//os:linux",
+    ],
+)
+
+platform(
+    name = "systemz-unknown-linux_gnu",
+    constraint_values = [
+        "@platforms//cpu:s390x",
+        "@platforms//os:linux",
+    ],
+)
+
+platform(
+    name = "x86_64-pc-win32",
+    constraint_values = [
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
+    ],
+)
+
+platform(
+    name = "x86_64-apple-darwin",
+    constraint_values = [
+        "@platforms//cpu:x86_64",
+        "@platforms//os:macos",
+    ],
+)
+
+platform(
+    name = "x86_64-unknown-linux-gnu",
+    constraint_values = [
+        "@platforms//cpu:x86_64",
+        "@platforms//os:linux",
+    ],
+)
diff --git a/utils/bazel/llvm_configs/BUILD.bazel b/utils/bazel/llvm_configs/BUILD.bazel
deleted file mode 100644
index 5a4f9970c0636..0000000000000
--- a/utils/bazel/llvm_configs/BUILD.bazel
+++ /dev/null
@@ -1,30 +0,0 @@
-# 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
-
-# These diff tests ensure that the current Bazel configuration does not drift
-# from the configuration in the .cmake files, since we don't alway use them
-# directly (and even if we did we wouldn't necessarily pick up changes there).
-# These are literal change-detector tests. We perform diff testing here since
-# it isn't really part of building LLVM and we don't want to include the config
-# copies in the workspace used by dependent projects.
-
-load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
-
-diff_test(
-    name = "diff_config.h.cmake",
-    file1 = "@llvm-project//llvm:include/llvm/Config/config.h.cmake",
-    file2 = "config.h.cmake",
-)
-
-diff_test(
-    name = "diff_llvm-config.h.cmake",
-    file1 = "@llvm-project//llvm:include/llvm/Config/llvm-config.h.cmake",
-    file2 = "llvm-config.h.cmake",
-)
-
-diff_test(
-    name = "diff_abi-breaking.h.cmake",
-    file1 = "@llvm-project//llvm:include/llvm/Config/abi-breaking.h.cmake",
-    file2 = "abi-breaking.h.cmake",
-)
diff --git a/utils/bazel/llvm_configs/abi-breaking.h.cmake b/utils/bazel/llvm_configs/abi-breaking.h.cmake
deleted file mode 100644
index 2d27e02b1d545..0000000000000
--- a/utils/bazel/llvm_configs/abi-breaking.h.cmake
+++ /dev/null
@@ -1,62 +0,0 @@
-/*===------- llvm/Config/abi-breaking.h - llvm configuration -------*- C -*-===*/
-/*                                                                            */
-/* Part of the LLVM Project, 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                    */
-/*                                                                            */
-/*===----------------------------------------------------------------------===*/
-
-/* This file controls the C++ ABI break introduced in LLVM public header. */
-
-#ifndef LLVM_ABI_BREAKING_CHECKS_H
-#define LLVM_ABI_BREAKING_CHECKS_H
-
-/* Define to enable checks that alter the LLVM C++ ABI */
-#cmakedefine01 LLVM_ENABLE_ABI_BREAKING_CHECKS
-
-/* Define to enable reverse iteration of unordered llvm containers */
-#cmakedefine01 LLVM_ENABLE_REVERSE_ITERATION
-
-/* Allow selectively disabling link-time mismatch checking so that header-only
-   ADT content from LLVM can be used without linking libSupport. */
-#if !defined(LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING) || !LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING
-
-// ABI_BREAKING_CHECKS protection: provides link-time failure when clients build
-// mismatch with LLVM
-#if defined(_MSC_VER)
-// Use pragma with MSVC
-#define LLVM_XSTR(s) LLVM_STR(s)
-#define LLVM_STR(s) #s
-#pragma detect_mismatch("LLVM_ENABLE_ABI_BREAKING_CHECKS", LLVM_XSTR(LLVM_ENABLE_ABI_BREAKING_CHECKS))
-#undef LLVM_XSTR
-#undef LLVM_STR
-#elif defined(_WIN32) || defined(__CYGWIN__) // Win32 w/o #pragma detect_mismatch
-// FIXME: Implement checks without weak.
-#elif defined(__cplusplus)
-#if !(defined(_AIX) && defined(__GNUC__) && !defined(__clang__))
-#define LLVM_HIDDEN_VISIBILITY __attribute__ ((visibility("hidden")))
-#else
-// GCC on AIX does not support visibility attributes. Symbols are not
-// exported by default on AIX.
-#define LLVM_HIDDEN_VISIBILITY
-#endif
-namespace llvm {
-#if LLVM_ENABLE_ABI_BREAKING_CHECKS
-extern int EnableABIBreakingChecks;
-LLVM_HIDDEN_VISIBILITY
-__attribute__((weak)) int *VerifyEnableABIBreakingChecks =
-    &EnableABIBreakingChecks;
-#else
-extern int DisableABIBreakingChecks;
-LLVM_HIDDEN_VISIBILITY
-__attribute__((weak)) int *VerifyDisableABIBreakingChecks =
-    &DisableABIBreakingChecks;
-#endif
-}
-#undef LLVM_HIDDEN_VISIBILITY
-#endif // _MSC_VER
-
-#endif // LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING
-
-#endif
diff --git a/utils/bazel/llvm_configs/config.h.cmake b/utils/bazel/llvm_configs/config.h.cmake
deleted file mode 100644
index 835201f2a45b0..0000000000000
--- a/utils/bazel/llvm_configs/config.h.cmake
+++ /dev/null
@@ -1,300 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-// Include this header only under the llvm source tree.
-// This is a private header.
-
-/* Exported configuration */
-#include "llvm/Config/llvm-config.h"
-
-/* Bug report URL. */
-#define BUG_REPORT_URL "${BUG_REPORT_URL}"
-
-/* Define to 1 to enable backtraces, and to 0 otherwise. */
-#cmakedefine01 ENABLE_BACKTRACES
-
-/* Define to 1 to enable crash overrides, and to 0 otherwise. */
-#cmakedefine01 ENABLE_CRASH_OVERRIDES
-
-/* Define to 1 to enable crash memory dumps, and to 0 otherwise. */
-#cmakedefine01 LLVM_ENABLE_CRASH_DUMPS
-
-/* Define to 1 to enable expensive checks for debug location coverage checking,
-   and to 0 otherwise. */
-#cmakedefine01 ENABLE_DEBUGLOC_COVERAGE_TRACKING
-
-/* Define to 1 to prefer forward slashes on Windows, and to 0 prefer
-   backslashes. */
-#cmakedefine01 LLVM_WINDOWS_PREFER_FORWARD_SLASH
-
-/* Define to 1 if you have the `backtrace' function. */
-#cmakedefine HAVE_BACKTRACE ${HAVE_BACKTRACE}
-
-#define BACKTRACE_HEADER <${BACKTRACE_HEADER}>
-
-/* Define to 1 if you have the <CrashReporterClient.h> header file. */
-#cmakedefine HAVE_CRASHREPORTERCLIENT_H
-
-/* can use __crashreporter_info__ */
-#cmakedefine01 HAVE_CRASHREPORTER_INFO
-
-/* Define to 1 if you have the declaration of `arc4random', and to 0 if you
-   don't. */
-#cmakedefine01 HAVE_DECL_ARC4RANDOM
-
-/* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you
-   don't. */
-#cmakedefine01 HAVE_DECL_FE_ALL_EXCEPT
-
-/* Define to 1 if you have the declaration of `FE_INEXACT', and to 0 if you
-   don't. */
-#cmakedefine01 HAVE_DECL_FE_INEXACT
-
-/* Define to 1 if you have the declaration of `strerror_s', and to 0 if you
-   don't. */
-#cmakedefine01 HAVE_DECL_STRERROR_S
-
-/* Define if dlopen() is available on this platform. */
-#cmakedefine HAVE_DLOPEN ${HAVE_DLOPEN}
-
-/* Define to 1 if we can register EH frames on this platform. */
-#cmakedefine HAVE_REGISTER_FRAME ${HAVE_REGISTER_FRAME}
-
-/* Define to 1 if we can deregister EH frames on this platform. */
-#cmakedefine HAVE_DEREGISTER_FRAME ${HAVE_DEREGISTER_FRAME}
-
-/* Define if __unw_add_dynamic_fde() is available on this platform. */
-#cmakedefine HAVE_UNW_ADD_DYNAMIC_FDE ${HAVE_UNW_ADD_DYNAMIC_FDE}
-
-/* Define if libffi is available on this platform. */
-#cmakedefine HAVE_FFI_CALL ${HAVE_FFI_CALL}
-
-/* Define to 1 if you have the <ffi/ffi.h> header file. */
-#cmakedefine HAVE_FFI_FFI_H ${HAVE_FFI_FFI_H}
-
-/* Define to 1 if you have the <ffi.h> header file. */
-#cmakedefine HAVE_FFI_H ${HAVE_FFI_H}
-
-/* Define to 1 if you have the `futimens' function. */
-#cmakedefine HAVE_FUTIMENS ${HAVE_FUTIMENS}
-
-/* Define to 1 if you have the `futimes' function. */
-#cmakedefine HAVE_FUTIMES ${HAVE_FUTIMES}
-
-/* Define to 1 if you have the `getpagesize' function. */
-#cmakedefine HAVE_GETPAGESIZE ${HAVE_GETPAGESIZE}
-
-/* Define to 1 if you have the `getrusage' function. */
-#cmakedefine HAVE_GETRUSAGE ${HAVE_GETRUSAGE}
-
-/* Define to 1 if you have the `isatty' function. */
-#cmakedefine HAVE_ISATTY 1
-
-/* Define to 1 if you have the `edit' library (-ledit). */
-#cmakedefine HAVE_LIBEDIT ${HAVE_LIBEDIT}
-
-/* Define to 1 if you have the `pfm' library (-lpfm). */
-#cmakedefine HAVE_LIBPFM ${HAVE_LIBPFM}
-
-/* Define to 1 if the `perf_branch_entry' struct has field cycles. */
-#cmakedefine LIBPFM_HAS_FIELD_CYCLES ${LIBPFM_HAS_FIELD_CYCLES}
-
-/* Define to 1 if you have the `psapi' library (-lpsapi). */
-#cmakedefine HAVE_LIBPSAPI ${HAVE_LIBPSAPI}
-
-/* Define to 1 if you have the `pthread' library (-lpthread). */
-#cmakedefine HAVE_LIBPTHREAD ${HAVE_LIBPTHREAD}
-
-/* Define to 1 if you have the `pthread_getname_np' function. */
-#cmakedefine HAVE_PTHREAD_GETNAME_NP ${HAVE_PTHREAD_GETNAME_NP}
-
-/* Define to 1 if you have the `pthread_setname_np' function. */
-#cmakedefine HAVE_PTHREAD_SETNAME_NP ${HAVE_PTHREAD_SETNAME_NP}
-
-/* Define to 1 if you have the `pthread_get_name_np' function. */
-#cmakedefine HAVE_PTHREAD_GET_NAME_NP ${HAVE_PTHREAD_GET_NAME_NP}
-
-/* Define to 1 if you have the `pthread_set_name_np' function. */
-#cmakedefine HAVE_PTHREAD_SET_NAME_NP ${HAVE_PTHREAD_SET_NAME_NP}
-
-/* Define to 1 if you have the <mach/mach.h> header file. */
-#cmakedefine HAVE_MACH_MACH_H ${HAVE_MACH_MACH_H}
-
-/* Define to 1 if you have the `mallctl' function. */
-#cmakedefine HAVE_MALLCTL ${HAVE_MALLCTL}
-
-/* Define to 1 if you have the `mallinfo' function. */
-#cmakedefine HAVE_MALLINFO ${HAVE_MALLINFO}
-
-/* Define to 1 if you have the `mallinfo2' function. */
-#cmakedefine HAVE_MALLINFO2 ${HAVE_MALLINFO2}
-
-/* Define to 1 if you have the <malloc/malloc.h> header file. */
-#cmakedefine HAVE_MALLOC_MALLOC_H ${HAVE_MALLOC_MALLOC_H}
-
-/* Define to 1 if you have the `malloc_zone_statistics' function. */
-#cmakedefine HAVE_MALLOC_ZONE_STATISTICS ${HAVE_MALLOC_ZONE_STATISTICS}
-
-/* Define to 1 if you have the `posix_spawn' function. */
-#cmakedefine HAVE_POSIX_SPAWN ${HAVE_POSIX_SPAWN}
-
-/* Define to 1 if you have the `pread' function. */
-#cmakedefine HAVE_PREAD ${HAVE_PREAD}
-
-/* Define to 1 if you have the <pthread.h> header file. */
-#cmakedefine HAVE_PTHREAD_H ${HAVE_PTHREAD_H}
-
-/* Have pthread_mutex_lock */
-#cmakedefine HAVE_PTHREAD_MUTEX_LOCK ${HAVE_PTHREAD_MUTEX_LOCK}
-
-/* Have pthread_rwlock_init */
-#cmakedefine HAVE_PTHREAD_RWLOCK_INIT ${HAVE_PTHREAD_RWLOCK_INIT}
-
-/* Define to 1 if you have the `sbrk' function. */
-#cmakedefine HAVE_SBRK ${HAVE_SBRK}
-
-/* Define to 1 if you have the `setenv' function. */
-#cmakedefine HAVE_SETENV ${HAVE_SETENV}
-
-/* Define to 1 if you have the `sigaltstack' function. */
-#cmakedefine HAVE_SIGALTSTACK ${HAVE_SIGALTSTACK}
-
-/* Define to 1 if you have the `strerror_r' function. */
-#cmakedefine HAVE_STRERROR_R ${HAVE_STRERROR_R}
-
-/* Define to 1 if you have the `sysconf' function. */
-#cmakedefine HAVE_SYSCONF ${HAVE_SYSCONF}
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#cmakedefine HAVE_SYS_MMAN_H ${HAVE_SYS_MMAN_H}
-
-/* Define to 1 if stat struct has st_mtimespec member .*/
-#cmakedefine HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC ${HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC}
-
-/* Define to 1 if stat struct has st_mtim member. */
-#cmakedefine HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC ${HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC}
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H}
-
-/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
-#cmakedefine HAVE_VALGRIND_VALGRIND_H ${HAVE_VALGRIND_VALGRIND_H}
-
-/* Have host's _alloca */
-#cmakedefine HAVE__ALLOCA ${HAVE__ALLOCA}
-
-/* Define to 1 if you have the `_chsize_s' function. */
-#cmakedefine HAVE__CHSIZE_S ${HAVE__CHSIZE_S}
-
-/* Define to 1 if you have the `_Unwind_Backtrace' function. */
-#cmakedefine HAVE__UNWIND_BACKTRACE ${HAVE__UNWIND_BACKTRACE}
-
-/* Have host's __alloca */
-#cmakedefine HAVE___ALLOCA ${HAVE___ALLOCA}
-
-/* Have host's __ashldi3 */
-#cmakedefine HAVE___ASHLDI3 ${HAVE___ASHLDI3}
-
-/* Have host's __ashrdi3 */
-#cmakedefine HAVE___ASHRDI3 ${HAVE___ASHRDI3}
-
-/* Have host's __chkstk */
-#cmakedefine HAVE___CHKSTK ${HAVE___CHKSTK}
-
-/* Have host's __chkstk_ms */
-#cmakedefine HAVE___CHKSTK_MS ${HAVE___CHKSTK_MS}
-
-/* Have host's __cmpdi2 */
-#cmakedefine HAVE___CMPDI2 ${HAVE___CMPDI2}
-
-/* Have host's __divdi3 */
-#cmakedefine HAVE___DIVDI3 ${HAVE___DIVDI3}
-
-/* Have host's __fixdfdi */
-#cmakedefine HAVE___FIXDFDI ${HAVE___FIXDFDI}
-
-/* Have host's __fixsfdi */
-#cmakedefine HAVE___FIXSFDI ${HAVE___FIXSFDI}
-
-/* Have host's __floatdidf */
-#cmakedefine HAVE___FLOATDIDF ${HAVE___FLOATDIDF}
-
-/* Have host's __lshrdi3 */
-#cmakedefine HAVE___LSHRDI3 ${HAVE___LSHRDI3}
-
-/* Have host's __main */
-#cmakedefine HAVE___MAIN ${HAVE___MAIN}
-
-/* Have host's __moddi3 */
-#cmakedefine HAVE___MODDI3 ${HAVE___MODDI3}
-
-/* Have host's __udivdi3 */
-#cmakedefine HAVE___UDIVDI3 ${HAVE___UDIVDI3}
-
-/* Have host's __umoddi3 */
-#cmakedefine HAVE___UMODDI3 ${HAVE___UMODDI3}
-
-/* Have host's ___chkstk */
-#cmakedefine HAVE____CHKSTK ${HAVE____CHKSTK}
-
-/* Have host's ___chkstk_ms */
-#cmakedefine HAVE____CHKSTK_MS ${HAVE____CHKSTK_MS}
-
-/* Linker version detected at compile time. */
-#cmakedefine HOST_LINK_VERSION "${HOST_LINK_VERSION}"
-
-/* Define if overriding target triple is enabled */
-#cmakedefine LLVM_TARGET_TRIPLE_ENV "${LLVM_TARGET_TRIPLE_ENV}"
-
-/* Whether tools show host and target info when invoked with --version */
-#cmakedefine01 LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO
-
-/* Whether tools show optional build config flags when invoked with --version */
-#cmakedefine01 LLVM_VERSION_PRINTER_SHOW_BUILD_CONFIG
-
-/* Define if libxml2 is supported on this platform. */
-#cmakedefine LLVM_ENABLE_LIBXML2 ${LLVM_ENABLE_LIBXML2}
-
-/* Define to the extension used for shared libraries, say, ".so". */
-#cmakedefine LTDL_SHLIB_EXT "${LTDL_SHLIB_EXT}"
-
-/* Define to the extension used for plugin libraries, say, ".so". */
-#cmakedefine LLVM_PLUGIN_EXT "${LLVM_PLUGIN_EXT}"
-
-/* Define to the address where bug reports for this package should be sent. */
-#cmakedefine PACKAGE_BUGREPORT "${PACKAGE_BUGREPORT}"
-
-/* Define to the full name of this package. */
-#cmakedefine PACKAGE_NAME "${PACKAGE_NAME}"
-
-/* Define to the full name and version of this package. */
-#cmakedefine PACKAGE_STRING "${PACKAGE_STRING}"
-
-/* Define to the version of this package. */
-#cmakedefine PACKAGE_VERSION "${PACKAGE_VERSION}"
-
-/* Define to the vendor of this package. */
-#cmakedefine PACKAGE_VENDOR "${PACKAGE_VENDOR}"
-
-/* Define to a function implementing stricmp */
-#cmakedefine stricmp ${stricmp}
-
-/* Define to a function implementing strdup */
-#cmakedefine strdup ${strdup}
-
-/* Whether GlobalISel rule coverage is being collected */
-#cmakedefine01 LLVM_GISEL_COV_ENABLED
-
-/* Define to the default GlobalISel coverage file prefix */
-#cmakedefine LLVM_GISEL_COV_PREFIX "${LLVM_GISEL_COV_PREFIX}"
-
-/* Whether Timers signpost passes in Xcode Instruments */
-#cmakedefine01 LLVM_SUPPORT_XCODE_SIGNPOSTS
-
-#cmakedefine HAVE_PROC_PID_RUSAGE 1
-
-#cmakedefine HAVE_BUILTIN_THREAD_POINTER ${HAVE_BUILTIN_THREAD_POINTER}
-
-#cmakedefine HAVE_GETAUXVAL ${HAVE_GETAUXVAL}
-
-#endif
diff --git a/utils/bazel/llvm_configs/llvm-config.h.cmake b/utils/bazel/llvm_configs/llvm-config.h.cmake
deleted file mode 100644
index 239f9dd3f38db..0000000000000
--- a/utils/bazel/llvm_configs/llvm-config.h.cmake
+++ /dev/null
@@ -1,207 +0,0 @@
-/*===------- llvm/Config/llvm-config.h - llvm configuration -------*- C -*-===*/
-/*                                                                            */
-/* Part of the LLVM Project, 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                    */
-/*                                                                            */
-/*===----------------------------------------------------------------------===*/
-
-/* This file enumerates variables from the LLVM configuration so that they
-   can be in exported headers and won't override package specific directives.
-   This is a C header that can be included in the llvm-c headers. */
-
-#ifndef LLVM_CONFIG_H
-#define LLVM_CONFIG_H
-
-/* Define if LLVM_ENABLE_DUMP is enabled */
-#cmakedefine LLVM_ENABLE_DUMP
-
-/* Target triple LLVM will generate code for by default */
-/* Doesn't use `cmakedefine` because it is allowed to be empty. */
-#define LLVM_DEFAULT_TARGET_TRIPLE "${LLVM_DEFAULT_TARGET_TRIPLE}"
-
-/* Define if threads enabled */
-#cmakedefine01 LLVM_ENABLE_THREADS
-
-/* Has gcc/MSVC atomic intrinsics */
-#cmakedefine01 LLVM_HAS_ATOMICS
-
-/* Host triple LLVM will be executed on */
-#cmakedefine LLVM_HOST_TRIPLE "${LLVM_HOST_TRIPLE}"
-
-/* LLVM architecture name for the native architecture, if available */
-#cmakedefine LLVM_NATIVE_ARCH ${LLVM_NATIVE_ARCH}
-
-/* LLVM name for the native AsmParser init function, if available */
-#cmakedefine LLVM_NATIVE_ASMPARSER LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser
-
-/* LLVM name for the native AsmPrinter init function, if available */
-#cmakedefine LLVM_NATIVE_ASMPRINTER LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter
-
-/* LLVM name for the native Disassembler init function, if available */
-#cmakedefine LLVM_NATIVE_DISASSEMBLER LLVMInitialize${LLVM_NATIVE_ARCH}Disassembler
-
-/* LLVM name for the native Target init function, if available */
-#cmakedefine LLVM_NATIVE_TARGET LLVMInitialize${LLVM_NATIVE_ARCH}Target
-
-/* LLVM name for the native TargetInfo init function, if available */
-#cmakedefine LLVM_NATIVE_TARGETINFO LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo
-
-/* LLVM name for the native target MC init function, if available */
-#cmakedefine LLVM_NATIVE_TARGETMC LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC
-
-/* LLVM name for the native target MCA init function, if available */
-#cmakedefine LLVM_NATIVE_TARGETMCA LLVMInitialize${LLVM_NATIVE_ARCH}TargetMCA
-
-/* Define if the AArch64 target is built in */
-#cmakedefine01 LLVM_HAS_AARCH64_TARGET
-
-/* Define if the AMDGPU target is built in */
-#cmakedefine01 LLVM_HAS_AMDGPU_TARGET
-
-/* Define if the ARC target is built in */
-#cmakedefine01 LLVM_HAS_ARC_TARGET
-
-/* Define if the ARM target is built in */
-#cmakedefine01 LLVM_HAS_ARM_TARGET
-
-/* Define if the AVR target is built in */
-#cmakedefine01 LLVM_HAS_AVR_TARGET
-
-/* Define if the BPF target is built in */
-#cmakedefine01 LLVM_HAS_BPF_TARGET
-
-/* Define if the CSKY target is built in */
-#cmakedefine01 LLVM_HAS_CSKY_TARGET
-
-/* Define if the DirectX target is built in */
-#cmakedefine01 LLVM_HAS_DIRECTX_TARGET
-
-/* Define if the Hexagon target is built in */
-#cmakedefine01 LLVM_HAS_HEXAGON_TARGET
-
-/* Define if the Lanai target is built in */
-#cmakedefine01 LLVM_HAS_LANAI_TARGET
-
-/* Define if the LoongArch target is built in */
-#cmakedefine01 LLVM_HAS_LOONGARCH_TARGET
-
-/* Define if the M68k target is built in */
-#cmakedefine01 LLVM_HAS_M68K_TARGET
-
-/* Define if the Mips target is built in */
-#cmakedefine01 LLVM_HAS_MIPS_TARGET
-
-/* Define if the MSP430 target is built in */
-#cmakedefine01 LLVM_HAS_MSP430_TARGET
-
-/* Define if the NVPTX target is built in */
-#cmakedefine01 LLVM_HAS_NVPTX_TARGET
-
-/* Define if the PowerPC target is built in */
-#cmakedefine01 LLVM_HAS_POWERPC_TARGET
-
-/* Define if the RISCV target is built in */
-#cmakedefine01 LLVM_HAS_RISCV_TARGET
-
-/* Define if the Sparc target is built in */
-#cmakedefine01 LLVM_HAS_SPARC_TARGET
-
-/* Define if the SPIRV target is built in */
-#cmakedefine01 LLVM_HAS_SPIRV_TARGET
-
-/* Define if the SystemZ target is built in */
-#cmakedefine01 LLVM_HAS_SYSTEMZ_TARGET
-
-/* Define if the VE target is built in */
-#cmakedefine01 LLVM_HAS_VE_TARGET
-
-/* Define if the WebAssembly target is built in */
-#cmakedefine01 LLVM_HAS_WEBASSEMBLY_TARGET
-
-/* Define if the X86 target is built in */
-#cmakedefine01 LLVM_HAS_X86_TARGET
-
-/* Define if the XCore target is built in */
-#cmakedefine01 LLVM_HAS_XCORE_TARGET
-
-/* Define if the Xtensa target is built in */
-#cmakedefine01 LLVM_HAS_XTENSA_TARGET
-
-/* Define if this is Unixish platform */
-#cmakedefine LLVM_ON_UNIX ${LLVM_ON_UNIX}
-
-/* Define if we have the Intel JIT API runtime support library */
-#cmakedefine01 LLVM_USE_INTEL_JITEVENTS
-
-/* Define if we have the oprofile JIT-support library */
-#cmakedefine01 LLVM_USE_OPROFILE
-
-/* Define if we have the perf JIT-support library */
-#cmakedefine01 LLVM_USE_PERF
-
-/* Major version of the LLVM API */
-#define LLVM_VERSION_MAJOR ${LLVM_VERSION_MAJOR}
-
-/* Minor version of the LLVM API */
-#define LLVM_VERSION_MINOR ${LLVM_VERSION_MINOR}
-
-/* Patch version of the LLVM API */
-#define LLVM_VERSION_PATCH ${LLVM_VERSION_PATCH}
-
-/* LLVM version string */
-#define LLVM_VERSION_STRING "${PACKAGE_VERSION}"
-
-/* Whether LLVM records statistics for use with GetStatistics(),
- * PrintStatistics() or PrintStatisticsJSON()
- */
-#cmakedefine01 LLVM_FORCE_ENABLE_STATS
-
-/* Define if we have z3 and want to build it */
-#cmakedefine LLVM_WITH_Z3 ${LLVM_WITH_Z3}
-
-/* Define if we have curl and want to use it */
-#cmakedefine LLVM_ENABLE_CURL ${LLVM_ENABLE_CURL}
-
-/* Define if we have cpp-httplib and want to use it */
-#cmakedefine LLVM_ENABLE_HTTPLIB ${LLVM_ENABLE_HTTPLIB}
-
-/* Define if zlib compression is available */
-#cmakedefine01 LLVM_ENABLE_ZLIB
-
-/* Define if zstd compression is available */
-#cmakedefine01 LLVM_ENABLE_ZSTD
-
-/* Define if LLVM is using tflite */
-#cmakedefine LLVM_HAVE_TFLITE
-
-/* Define to 1 if you have the <sysexits.h> header file. */
-#cmakedefine HAVE_SYSEXITS_H ${HAVE_SYSEXITS_H}
-
-/* Define if building libLLVM shared library */
-#cmakedefine LLVM_BUILD_LLVM_DYLIB
-
-/* Define if building LLVM with BUILD_SHARED_LIBS */
-#cmakedefine LLVM_BUILD_SHARED_LIBS
-
-/* Define if building LLVM with LLVM_FORCE_USE_OLD_TOOLCHAIN_LIBS */
-#cmakedefine LLVM_FORCE_USE_OLD_TOOLCHAIN ${LLVM_FORCE_USE_OLD_TOOLCHAIN}
-
-/* Define if llvm_unreachable should be optimized with undefined behavior
- * in non assert builds */
-#cmakedefine01 LLVM_UNREACHABLE_OPTIMIZE
-
-/* Define to 1 if you have the DIA SDK installed, and to 0 if you don't. */
-#cmakedefine01 LLVM_ENABLE_DIA_SDK
-
-/* Define if plugins enabled */
-#cmakedefine LLVM_ENABLE_PLUGINS
-
-/* Define if logf128 is available */
-#cmakedefine LLVM_HAS_LOGF128
-
-/* Define if building LLVM with LLVM_BUILD_TELEMETRY */
-#cmakedefine LLVM_BUILD_TELEMETRY ${LLVM_BUILD_TELEMETRY}
-
-#endif
diff --git a/utils/bazel/overlay_directories.py b/utils/bazel/overlay_directories.py
index 526a78e978e5d..53933ce54bcfa 100755
--- a/utils/bazel/overlay_directories.py
+++ b/utils/bazel/overlay_directories.py
@@ -86,12 +86,15 @@ def main(args):
                 os.path.join(args.overlay, relpath), os.path.join(args.target, relpath)
             )
 
-        for src_entry in os.listdir(os.path.join(args.src, rel_root)):
-            if src_entry not in dirs:
-                relpath = os.path.join(rel_root, src_entry)
-                _symlink_abs(
-                    os.path.join(args.src, relpath), os.path.join(args.target, relpath)
-                )
+        src_path = os.path.join(args.src, rel_root)
+        if os.path.isdir(src_path):
+            for src_entry in os.listdir(src_path):
+                if src_entry not in dirs:
+                    relpath = os.path.join(rel_root, src_entry)
+                    _symlink_abs(
+                        os.path.join(args.src, relpath),
+                        os.path.join(args.target, relpath),
+                    )
 
 
 if __name__ == "__main__":
diff --git a/utils/bazel/third_party_build/zlib-ng.BUILD b/utils/bazel/third_party_build/zlib-ng.BUILD
index 055261acb0f69..bbf37127634e2 100644
--- a/utils/bazel/third_party_build/zlib-ng.BUILD
+++ b/utils/bazel/third_party_build/zlib-ng.BUILD
@@ -10,16 +10,6 @@ package(
     licenses = ["notice"],
 )
 
-bool_flag(
-    name = "llvm_enable_zlib",
-    build_setting_default = True,
-)
-
-config_setting(
-    name = "llvm_zlib_enabled",
-    flag_values = {":llvm_enable_zlib": "true"},
-)
-
 genrule(
     # The input template is identical to the CMake output.
     name = "zconf_gen",
@@ -30,61 +20,55 @@ genrule(
 
 cc_library(
     name = "zlib",
-    srcs = select({
-        ":llvm_zlib_enabled": [
-            "adler32.c",
-            "adler32_p.h",
-            "chunkset.c",
-            "chunkset_tpl.h",
-            "compare258.c",
-            "compress.c",
-            "crc32.c",
-            "crc32_comb.c",
-            "crc32_comb_tbl.h",
-            "crc32_p.h",
-            "crc32_tbl.h",
-            "deflate.c",
-            "deflate.h",
-            "deflate_fast.c",
-            "deflate_medium.c",
-            "deflate_p.h",
-            "deflate_quick.c",
-            "deflate_slow.c",
-            "fallback_builtins.h",
-            "functable.c",
-            "functable.h",
-            "infback.c",
-            "inffast.c",
-            "inffast.h",
-            "inffixed_tbl.h",
-            "inflate.c",
-            "inflate.h",
-            "inflate_p.h",
-            "inftrees.c",
-            "inftrees.h",
-            "insert_string.c",
-            "insert_string_tpl.h",
-            "match_tpl.h",
-            "trees.c",
-            "trees.h",
-            "trees_emit.h",
-            "trees_tbl.h",
-            "uncompr.c",
-            "zbuild.h",
-            "zendian.h",
-            "zutil.c",
-            "zutil.h",
-            "zutil_p.h",
-        ],
-        "//conditions:default": [],
-    }),
-    hdrs = select({
-        ":llvm_zlib_enabled": [
-            "zlib.h",
-            ":zconf_gen",
-        ],
-        "//conditions:default": [],
-    }),
+    srcs = [
+        "adler32.c",
+        "adler32_p.h",
+        "chunkset.c",
+        "chunkset_tpl.h",
+        "compare258.c",
+        "compress.c",
+        "crc32.c",
+        "crc32_comb.c",
+        "crc32_comb_tbl.h",
+        "crc32_p.h",
+        "crc32_tbl.h",
+        "deflate.c",
+        "deflate.h",
+        "deflate_fast.c",
+        "deflate_medium.c",
+        "deflate_p.h",
+        "deflate_quick.c",
+        "deflate_slow.c",
+        "fallback_builtins.h",
+        "functable.c",
+        "functable.h",
+        "infback.c",
+        "inffast.c",
+        "inffast.h",
+        "inffixed_tbl.h",
+        "inflate.c",
+        "inflate.h",
+        "inflate_p.h",
+        "inftrees.c",
+        "inftrees.h",
+        "insert_string.c",
+        "insert_string_tpl.h",
+        "match_tpl.h",
+        "trees.c",
+        "trees.h",
+        "trees_emit.h",
+        "trees_tbl.h",
+        "uncompr.c",
+        "zbuild.h",
+        "zendian.h",
+        "zutil.c",
+        "zutil.h",
+        "zutil_p.h",
+    ],
+    hdrs = [
+        "zlib.h",
+        ":zconf_gen",
+    ],
     copts = [
         "-std=c11",
         "-DZLIB_COMPAT",
@@ -95,12 +79,6 @@ cc_library(
         # here to improve performance. Native instructions aren't enabled in
         # the default config for reproducibility.
     ],
-    defines = select({
-        ":llvm_zlib_enabled": [
-            "LLVM_ENABLE_ZLIB=1",
-        ],
-        "//conditions:default": [],
-    }),
     # Clang includes zlib with angled instead of quoted includes, so we need
     # strip_include_prefix here.
     strip_include_prefix = ".",
diff --git a/utils/bazel/third_party_build/zstd.BUILD b/utils/bazel/third_party_build/zstd.BUILD
index 7d022d4226de1..4f760272c26a5 100644
--- a/utils/bazel/third_party_build/zstd.BUILD
+++ b/utils/bazel/third_party_build/zstd.BUILD
@@ -9,46 +9,26 @@ package(
     licenses = ["notice"],
 )
 
-bool_flag(
-    name = "llvm_enable_zstd",
-    build_setting_default = True,
-)
-
-config_setting(
-    name = "llvm_zstd_enabled",
-    flag_values = {":llvm_enable_zstd": "true"},
-)
-
 cc_library(
     name = "zstd",
-    srcs = select({
-        ":llvm_zstd_enabled": glob([
-            "lib/common/*.c",
-            "lib/common/*.h",
-            "lib/compress/*.c",
-            "lib/compress/*.h",
-            "lib/decompress/*.c",
-            "lib/decompress/*.h",
-            "lib/decompress/*.S",
-            "lib/dictBuilder/*.c",
-            "lib/dictBuilder/*.h",
-        ]),
-        "//conditions:default": [],
-    }),
-    hdrs = select({
-        ":llvm_zstd_enabled": [
-            "lib/zdict.h",
-            "lib/zstd.h",
-            "lib/zstd_errors.h",
-        ],
-        "//conditions:default": [],
-    }),
-    defines = select({
-        ":llvm_zstd_enabled": [
-            "LLVM_ENABLE_ZSTD=1",
-            "ZSTD_MULTITHREAD",
-        ],
-        "//conditions:default": [],
-    }),
+    srcs = glob([
+        "lib/common/*.c",
+        "lib/common/*.h",
+        "lib/compress/*.c",
+        "lib/compress/*.h",
+        "lib/decompress/*.c",
+        "lib/decompress/*.h",
+        "lib/decompress/*.S",
+        "lib/dictBuilder/*.c",
+        "lib/dictBuilder/*.h",
+    ]),
+    hdrs = [
+        "lib/zdict.h",
+        "lib/zstd.h",
+        "lib/zstd_errors.h",
+    ],
+    defines = [
+        "ZSTD_MULTITHREAD",
+    ],
     strip_include_prefix = "lib",
 )



More information about the llvm-commits mailing list