forked from envoyproxy/envoy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtoolchains.bzl
More file actions
104 lines (91 loc) · 3.98 KB
/
Copy pathtoolchains.bzl
File metadata and controls
104 lines (91 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
load("@com_google_protobuf//bazel/private/oss/toolchains/prebuilt:protoc_toolchain.bzl", "prebuilt_protoc_repo")
load("@com_google_protobuf//toolchain:platforms.bzl", "PROTOBUF_PLATFORMS")
load("@envoy_repo//:compiler.bzl", "LLVM_LIB_DIR", "LLVM_PATH", "LLVM_VERSION_LOCAL", "USE_LIBSTDCPP", "USE_LOCAL_SYSROOT")
load("@envoy_toolshed//repository:utils.bzl", "arch_alias")
load("@toolchains_llvm//toolchain:rules.bzl", "llvm_toolchain")
_LLVM_VERSION_HERMETIC = "22.1.8"
LLVM_VERSION = LLVM_VERSION_LOCAL if LLVM_VERSION_LOCAL else _LLVM_VERSION_HERMETIC
LLVM_MAJOR = LLVM_VERSION.split(".")[0]
LLVM_MAJOR_MINOR = ".".join(LLVM_VERSION.split(".")[:2])
_LLVM_LIB_PREFIX = LLVM_LIB_DIR if LLVM_PATH else "lib"
LIBCLANG_CPP = "@llvm_toolchain_llvm//:" + _LLVM_LIB_PREFIX + "/libclang-cpp.so." + LLVM_MAJOR_MINOR
# On distro-packaged LLVM, libclang-cpp.so dynamically links against libLLVM.so
# (they're split). The hermetic LLVM bundles everything into libclang-cpp.so.
LIBLLVM = ("@llvm_toolchain_llvm//:" + _LLVM_LIB_PREFIX + "/libLLVM.so." + LLVM_MAJOR_MINOR) if LLVM_PATH else None
_LLVM_LOCAL_BUILD = """\
package(default_visibility = ["//visibility:public"])
exports_files([
"{lib_dir}/libclang-cpp.so.{major_minor}",
"{lib_dir}/libLLVM.so.{major_minor}",
"lib/clang/{major}/include/fuzzer/FuzzedDataProvider.h",
])
filegroup(
name = "include",
srcs = glob(
["lib/clang/*/include/**"],
allow_empty = True,
),
)
filegroup(
name = "all_includes",
srcs = [],
)
filegroup(
name = "symbolizer",
srcs = ["bin/llvm-symbolizer"],
)
"""
def envoy_toolchains():
native.register_toolchains("@envoy//bazel/rbe/toolchains/configs/linux/gcc/config:cc-toolchain")
arch_alias(
name = "clang_platform",
aliases = {
"amd64": "@envoy//bazel/platforms/rbe:linux_x64",
"aarch64": "@envoy//bazel/platforms/rbe:linux_arm64",
},
)
if LLVM_PATH and "llvm_toolchain_llvm" not in native.existing_rules():
native.new_local_repository(
name = "llvm_toolchain_llvm",
path = LLVM_PATH,
build_file_content = _LLVM_LOCAL_BUILD.format(
lib_dir = LLVM_LIB_DIR,
major = LLVM_MAJOR,
major_minor = LLVM_MAJOR_MINOR,
),
)
llvm_toolchain(
name = "llvm_toolchain",
llvm_version = LLVM_VERSION,
# NOTE: This MUST remain stable for Envoy CI to prevent redownload of the LLVM binaries due to
# mismatched OS data between cache/host/workers
exec_os = None if LLVM_PATH else "linux",
extra_llvm_distributions = {
"LLVM-22.1.8-Linux-ARM64.tar.xz": "805efad2bb91cb4967fa569e0881d10c0f69c04461cf671cccbae19f547acc34",
"LLVM-22.1.8-Linux-X64.tar.xz": "df0e1ecf16caf3489a272a5eea4eec9b0d82878f6477fa309504f918a0006384",
"LLVM-22.1.8-macOS-ARM64.tar.xz": "f260f4f7c0d430828a81ae8a3826a1d63fc0963ec2459489308cc23b1f7eab4f",
},
cxx_cross_lib = {} if LLVM_PATH else {
"linux-aarch64": "@libcxx_libs_aarch64",
"linux-x86_64": "@libcxx_libs_x86_64",
},
cxx_standard = {"": "c++20"},
stdlib = {"": "stdc++"} if USE_LIBSTDCPP else {},
sysroot = {} if USE_LOCAL_SYSROOT else {
"linux-x86_64": "@sysroot_linux_amd64//:sysroot",
"linux-aarch64": "@sysroot_linux_arm64//:sysroot",
},
toolchain_roots = {"": LLVM_PATH} if LLVM_PATH else {
"linux-x86_64": "@llvm_minimal_linux_x64//",
"linux-aarch64": "@llvm_minimal_linux_arm64//",
"darwin-aarch64": "@llvm_minimal_macos_arm64//",
},
)
for platform in PROTOBUF_PLATFORMS:
name = "prebuilt_protoc.%s" % platform.replace("-", "_")
if not native.existing_rule(name):
prebuilt_protoc_repo(
name = name,
platform = platform,
)
native.register_toolchains("@com_google_protobuf//bazel/private/oss/toolchains/prebuilt:all")