blob: fba538489f907709e6c98cc8500b4d2f10799d71 [file] [log] [blame]
diff --git a/utils/bazel/configure.bzl b/utils/bazel/configure.bzl
index 4c5ab8bd0972..44de2da1a136 100644
--- a/utils/bazel/configure.bzl
+++ b/utils/bazel/configure.bzl
@@ -70,6 +70,11 @@ def _overlay_directories(repository_ctx):
))
def _llvm_configure_impl(repository_ctx):
+ # Force this repository rule to update if any of the overlay
+ # sources change.
+ for target in repository_ctx.attr._srcs:
+ repository_ctx.path(target)
+
_overlay_directories(repository_ctx)
# Create a starlark file with the requested LLVM targets.
@@ -86,6 +91,16 @@ llvm_configure = repository_rule(
configure = True,
attrs = {
"targets": attr.string_list(default = DEFAULT_TARGETS),
+ "_srcs": attr.label_list(default = [
+ Label("//utils/bazel/llvm-project-overlay/clang:BUILD.bazel"),
+ Label("//utils/bazel/llvm-project-overlay/libunwind:BUILD.bazel"),
+ Label("//utils/bazel/llvm-project-overlay/llvm:binary_alias.bzl"),
+ Label("//utils/bazel/llvm-project-overlay/llvm:BUILD.bazel"),
+ Label("//utils/bazel/llvm-project-overlay/llvm:cc_plugin_library.bzl"),
+ Label("//utils/bazel/llvm-project-overlay/llvm:config.bzl"),
+ Label("//utils/bazel/llvm-project-overlay/llvm:tblgen.bzl"),
+ Label("//utils/bazel/llvm-project-overlay/llvm:template_rule.bzl"),
+ ]),
},
)
diff --git a/utils/bazel/llvm-project-overlay/clang/BUILD.bazel b/utils/bazel/llvm-project-overlay/clang/BUILD.bazel
index a2b1e0f33073..0c1abe607b58 100644
--- a/utils/bazel/llvm-project-overlay/clang/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/clang/BUILD.bazel
@@ -5,6 +5,7 @@
load("//llvm:tblgen.bzl", "gentbl")
load("//llvm:binary_alias.bzl", "binary_alias")
load("//llvm:cc_plugin_library.bzl", "cc_plugin_library")
+load("//llvm:config.bzl", "llvm_stdcxx_copts")
package(
default_visibility = ["//visibility:public"],
@@ -28,7 +29,7 @@ cc_binary(
]),
copts = [
"$(STACK_FRAME_UNLIMITED)",
- ],
+ ] + llvm_stdcxx_copts,
stamp = 0,
deps = [
"//llvm:Support",
@@ -391,8 +392,8 @@ cc_library(
cc_library(
name = "basic",
srcs = [
- "include/clang/Basic/Version.inc",
"include/VCSVersion.inc",
+ "include/clang/Basic/Version.inc",
] + glob([
"lib/Basic/*.cpp",
"lib/Basic/*.c",
@@ -406,7 +407,7 @@ cc_library(
copts = [
"-DHAVE_VCS_VERSION_INC",
"$(STACK_FRAME_UNLIMITED)",
- ],
+ ] + llvm_stdcxx_copts,
includes = ["include"],
textual_hdrs = [
"include/clang/Basic/arm_fp16.inc",
@@ -471,6 +472,7 @@ cc_library(
hdrs = glob([
"include/clang/Lex/*.h",
]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":basic",
@@ -711,7 +713,7 @@ cc_library(
# headers such as `CXXABI.h`.
"-I$(GENDIR)/external/llvm-project/clang/lib/AST",
"-I$(GENDIR)/external/llvm-project/clang/lib/AST/Interp",
- ],
+ ] + llvm_stdcxx_copts,
textual_hdrs = [
"include/clang/AST/AttrImpl.inc",
"include/clang/AST/AttrNodeTraverse.inc",
@@ -763,6 +765,7 @@ cc_library(
"include/clang/Index/*.h",
"include/clang-c/*.h",
]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -786,6 +789,7 @@ cc_library(
hdrs = glob([
"include/clang/Analysis/**/*.h",
]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
textual_hdrs = glob([
"include/clang/Analysis/**/*.def",
@@ -844,7 +848,7 @@ cc_library(
"include/clang/Sema/*.h",
"include/clang-c/*.h",
]),
- copts = ["$(STACK_FRAME_UNLIMITED)"],
+ copts = ["$(STACK_FRAME_UNLIMITED)"] + llvm_stdcxx_copts,
includes = ["include"],
textual_hdrs = [
"include/clang/Sema/AttrParsedAttrImpl.inc",
@@ -911,6 +915,7 @@ cc_library(
"include/clang/Parse/AttrParserStringSwitches.inc",
"include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc",
] + glob(["include/clang/Parse/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -932,6 +937,7 @@ cc_library(
"lib/ASTMatchers/*.h",
]),
hdrs = glob(["include/clang/ASTMatchers/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -948,7 +954,7 @@ cc_library(
"lib/ASTMatchers/Dynamic/*.h",
]),
hdrs = glob(["include/clang/ASTMatchers/Dynamic/*.h"]),
- copts = ["$(STACK_FRAME_UNLIMITED)"],
+ copts = ["$(STACK_FRAME_UNLIMITED)"] + llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -966,6 +972,7 @@ cc_library(
"lib/Rewrite/*.h",
]),
hdrs = glob(["include/clang/Rewrite/Core/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -982,6 +989,7 @@ cc_library(
"lib/Testing/*.cpp",
]),
hdrs = glob(["include/clang/Testing/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":basic",
@@ -996,6 +1004,7 @@ cc_library(
"lib/Tooling/Core/*.h",
]),
hdrs = glob(["include/clang/Tooling/Core/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -1018,6 +1027,7 @@ cc_library(
hdrs = glob([
"include/clang/Tooling/*.h",
]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -1042,6 +1052,7 @@ cc_library(
hdrs = glob([
"include/clang/Tooling/Inclusions/**/*.h",
]),
+ copts = llvm_stdcxx_copts,
deps = [
":basic",
":lex",
@@ -1061,6 +1072,7 @@ cc_library(
"include/clang/Tooling/Refactoring/**/*.h",
"include/clang/Tooling/Refactoring/**/*.def",
]),
+ copts = llvm_stdcxx_copts,
deps = [
":ast",
":ast_matchers",
@@ -1094,6 +1106,7 @@ cc_library(
name = "tooling_syntax",
srcs = glob(["lib/Tooling/Syntax/**/*.cpp"]),
hdrs = glob(["include/clang/Tooling/Syntax/**/*.h"]),
+ copts = llvm_stdcxx_copts,
deps = [
":ast",
":basic",
@@ -1108,6 +1121,7 @@ cc_library(
name = "tooling_dependency_scanning",
srcs = glob(["lib/Tooling/DependencyScanning/**/*.cpp"]),
hdrs = glob(["include/clang/Tooling/DependencyScanning/**/*.h"]),
+ copts = llvm_stdcxx_copts,
deps = [
":basic",
":codegen",
@@ -1123,6 +1137,7 @@ cc_library(
name = "transformer",
srcs = glob(["lib/Tooling/Transformer/**/*.cpp"]),
hdrs = glob(["include/clang/Tooling/Transformer/**/*.h"]),
+ copts = llvm_stdcxx_copts,
deps = [
":ast",
":ast_matchers",
@@ -1138,6 +1153,7 @@ cc_library(
name = "ast-diff",
srcs = glob(["lib/Tooling/ASTDiff/*.cpp"]),
hdrs = glob(["include/clang/Tooling/ASTDiff/*.h"]),
+ copts = llvm_stdcxx_copts,
deps = [
":ast",
":basic",
@@ -1150,6 +1166,7 @@ cc_library(
name = "crosstu",
srcs = glob(["lib/CrossTU/*.cpp"]),
hdrs = glob(["include/clang/CrossTU/*.h"]),
+ copts = llvm_stdcxx_copts,
deps = [
":ast",
":basic",
@@ -1174,6 +1191,7 @@ cc_library(
] + glob([
"include/clang/Format/*.h",
]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":basic",
@@ -1188,6 +1206,7 @@ cc_library(
name = "edit",
srcs = glob(["lib/Edit/*.cpp"]),
hdrs = glob(["include/clang/Edit/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -1222,6 +1241,7 @@ cc_library(
hdrs = glob([
"include/clang/StaticAnalyzer/Core/**/*.h",
]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
textual_hdrs = glob([
"include/clang/StaticAnalyzer/Core/**/*.def",
@@ -1268,7 +1288,7 @@ cc_library(
] + glob([
"include/clang/StaticAnalyzer/Checkers/**/*.h",
]),
- copts = ["$(STACK_FRAME_UNLIMITED)"],
+ copts = ["$(STACK_FRAME_UNLIMITED)"] + llvm_stdcxx_copts,
includes = ["include"],
deps = [
":analysis",
@@ -1316,7 +1336,7 @@ cc_library(
hdrs = glob([
"include/clang/Driver/*.h",
]),
- copts = ["$(STACK_FRAME_UNLIMITED)"],
+ copts = ["$(STACK_FRAME_UNLIMITED)"] + llvm_stdcxx_copts,
includes = [
"include",
# TODO: This is likely a layering issue, but files in Arch are currently
@@ -1479,7 +1499,7 @@ cc_library(
hdrs = glob([
"include/clang/Frontend/*.h",
]),
- copts = ["$(STACK_FRAME_UNLIMITED)"],
+ copts = ["$(STACK_FRAME_UNLIMITED)"] + llvm_stdcxx_copts,
data = [":builtin_headers_gen"],
includes = ["include"],
textual_hdrs = glob([
@@ -1519,6 +1539,7 @@ cc_library(
"lib/Frontend/Rewrite/*.h",
]),
hdrs = glob(["include/clang/Rewrite/Frontend/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":ast",
@@ -1541,6 +1562,7 @@ cc_library(
"lib/Interpreter/*.h",
]),
hdrs = glob(["include/clang/Interpreter/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":analysis",
@@ -1573,7 +1595,7 @@ cc_library(
"lib/CodeGen/*.h",
]),
hdrs = glob(["include/clang/CodeGen/*.h"]),
- copts = ["$(STACK_FRAME_UNLIMITED)"],
+ copts = ["$(STACK_FRAME_UNLIMITED)"] + llvm_stdcxx_copts,
includes = ["include"],
deps = [
":analysis",
@@ -1624,6 +1646,7 @@ cc_library(
"lib/StaticAnalyzer/Frontend/**/*.h",
]),
hdrs = glob(["include/clang/StaticAnalyzer/Frontend/**/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":analysis",
@@ -1678,6 +1701,7 @@ cc_library(
hdrs = glob([
"include/clang/Serialization/*.h",
]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
textual_hdrs = glob([
"include/clang/Serialization/*.def",
@@ -1705,6 +1729,7 @@ cc_library(
"lib/FrontendTool/*.h",
]),
hdrs = glob(["include/clang/FrontendTool/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":arc_migrate",
@@ -1726,6 +1751,7 @@ cc_library(
"lib/ARCMigrate/*.h",
]),
hdrs = glob(["include/clang/ARCMigrate/*.h"]),
+ copts = llvm_stdcxx_copts,
includes = ["include"],
deps = [
":analysis",
@@ -1752,6 +1778,7 @@ cc_library(
"tools/libclang/*.h",
]),
hdrs = glob(["include/clang-c/*.h"]),
+ copts = llvm_stdcxx_copts,
defines = ["CINDEX_NO_EXPORTS"],
deps = [
":arc_migrate",
@@ -1783,7 +1810,7 @@ cc_plugin_library(
copts = select({
"@bazel_tools//src/conditions:windows": ["-D_CINDEX_LIB_"],
"//conditions:default": [],
- }),
+ }) + llvm_stdcxx_copts,
strip_include_prefix = "include",
deps = [
":arc_migrate",
@@ -1912,7 +1939,7 @@ cc_library(
# Disable stack frame size checks in the driver because
# clang::ensureStackAddressSpace allocates a large array on the stack.
"$(STACK_FRAME_UNLIMITED)",
- ],
+ ] + llvm_stdcxx_copts,
deps = [
":analysis",
":ast",
@@ -1947,6 +1974,7 @@ cc_library(
cc_binary(
name = "clang",
srcs = [],
+ copts = llvm_stdcxx_copts,
stamp = 0,
deps = [
":clang-driver",
diff --git a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
index 85d79a29b571..716d7f5d9645 100644
--- a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
@@ -4,7 +4,7 @@
load(":template_rule.bzl", "template_rule")
load(":tblgen.bzl", "gentbl")
-load(":config.bzl", "llvm_config_defines")
+load(":config.bzl", "llvm_config_defines", "llvm_stdcxx_copts")
load(":targets.bzl", "llvm_targets")
load(":enum_targets_gen.bzl", "enum_targets_gen")
load(":binary_alias.bzl", "binary_alias")
@@ -21,10 +21,12 @@ exports_files(["LICENSE.TXT"])
# toolchain or the `.bazelrc` file. This is just a workaround until we have a
# widely available feature to enable unlimited stack frame instead of using
# this `Make` variable.
-llvm_copts = [
+llvm_c_only_opts = [
"$(STACK_FRAME_UNLIMITED)",
]
+llvm_copts = llvm_c_only_opts + llvm_stdcxx_copts
+
enum_targets_gen(
name = "targets_def_gen",
src = "include/llvm/Config/Targets.def.in",
@@ -167,10 +169,69 @@ genrule(
"echo -e '#undef HANDLE_EXTENSION' >> $@\n",
)
+# TODO: This separation is required to separate out C++ and C opts
+# https://github.com/bazelbuild/bazel/issues/16551
cc_library(
- name = "Support",
+ name = "Support-c",
srcs = glob([
"lib/Support/*.c",
+ ]),
+ hdrs = glob([
+ "include/llvm/Support/**/*.h",
+ "include/llvm/ADT/*.h",
+ ]) + [
+ "include/llvm-c/Core.h",
+ "include/llvm-c/DataTypes.h",
+ "include/llvm-c/Deprecated.h",
+ "include/llvm-c/DisassemblerTypes.h",
+ "include/llvm-c/Error.h",
+ "include/llvm-c/ErrorHandling.h",
+ "include/llvm-c/ExternC.h",
+ "include/llvm-c/Support.h",
+ "include/llvm-c/Types.h",
+ "include/llvm/ExecutionEngine/JITSymbol.h",
+ "include/llvm/Support/Extension.def",
+ "include/llvm/Support/VCSRevision.h",
+ ],
+ copts = llvm_c_only_opts,
+ includes = ["include"],
+ linkopts = select({
+ "@bazel_tools//src/conditions:windows": [],
+ "@bazel_tools//src/conditions:freebsd": [
+ "-pthread",
+ "-lexecinfo",
+ "-ldl",
+ "-lm",
+ ],
+ "//conditions:default": [
+ "-pthread",
+ "-ldl",
+ "-lm",
+ ],
+ }),
+ textual_hdrs = glob([
+ "include/llvm/Support/*.def",
+ "lib/Support/*.h",
+ "lib/Support/*.inc",
+ ]),
+ deps = [
+ ":config",
+ ":Demangle",
+ # We unconditionally depend on the custom LLVM terminfo wrapper. This
+ # will be an empty library unless terminfo is enabled, in which case it
+ # will both provide the necessary dependencies and configuration
+ # defines.
+ "@llvm_terminfo//:terminfo",
+ # 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",
+ ],
+)
+
+cc_library(
+ name = "Support",
+ srcs = glob([
"lib/Support/*.cpp",
"lib/Support/*.h",
"lib/Support/*.inc",
@@ -223,6 +284,7 @@ cc_library(
"include/llvm/Support/*.def",
]),
deps = [
+ ":Support-c",
":config",
":Demangle",
# We unconditionally depend on the custom LLVM terminfo wrapper. This
diff --git a/utils/bazel/llvm-project-overlay/llvm/cc_plugin_library.bzl b/utils/bazel/llvm-project-overlay/llvm/cc_plugin_library.bzl
index 2ebd39c630dc..e45bd8a1ce92 100644
--- a/utils/bazel/llvm-project-overlay/llvm/cc_plugin_library.bzl
+++ b/utils/bazel/llvm-project-overlay/llvm/cc_plugin_library.bzl
@@ -16,6 +16,7 @@ configure generic aspects of all generated rules such as `testonly`. Lastly,
"""
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_import", "cc_library")
+load(":config.bzl", "llvm_stdcxx_copts")
def cc_plugin_library(name, srcs, hdrs, include_prefix = None, strip_include_prefix = None, alwayslink = False, features = [], tags = [], testonly = False, **kwargs):
# Neither the name of the plugin binary nor tags on whether it is built are
@@ -29,6 +30,7 @@ def cc_plugin_library(name, srcs, hdrs, include_prefix = None, strip_include_pre
dylib_name = name + ".dylib"
interface_output_name = name + "_interface_output"
import_name = name + "_import"
+ copts = kwargs.pop("copts", [])
for impl_name in [dll_name, dylib_name, so_name]:
cc_binary(
name = impl_name,
@@ -38,6 +40,7 @@ def cc_plugin_library(name, srcs, hdrs, include_prefix = None, strip_include_pre
features = features,
tags = ["manual"] + tags,
testonly = testonly,
+ copts = copts + llvm_stdcxx_copts,
**kwargs
)
native.filegroup(
diff --git a/utils/bazel/llvm-project-overlay/llvm/config.bzl b/utils/bazel/llvm-project-overlay/llvm/config.bzl
index 2046b2645362..736844bfc2d0 100644
--- a/utils/bazel/llvm-project-overlay/llvm/config.bzl
+++ b/utils/bazel/llvm-project-overlay/llvm/config.bzl
@@ -97,3 +97,8 @@ llvm_config_defines = os_defines + select({
"__STDC_CONSTANT_MACROS",
"__STDC_FORMAT_MACROS",
]
+
+llvm_stdcxx_copts = select({
+ "@platforms//os:windows": ["/std:c++17"],
+ "//conditions:default": ["-std=c++17"],
+})
diff --git a/utils/bazel/llvm-project-overlay/llvm/tblgen.bzl b/utils/bazel/llvm-project-overlay/llvm/tblgen.bzl
index d43390918e39..e0482a6fd4fa 100644
--- a/utils/bazel/llvm-project-overlay/llvm/tblgen.bzl
+++ b/utils/bazel/llvm-project-overlay/llvm/tblgen.bzl
@@ -12,6 +12,8 @@ TODO(chandlerc): Currently this expresses include-based dependencies as
correctly understood by the build system.
"""
+load(":config.bzl", "llvm_stdcxx_copts")
+
def gentbl(
name,
tblgen,
@@ -77,5 +79,6 @@ def gentbl(
# distinction between these two.
hdrs = [f for (_, f) in tbl_outs],
features = ["-parse_headers", "-header_modules"],
+ copts = llvm_stdcxx_copts,
**kwargs
)