1+ load("@bazel_skylib//lib:selects.bzl", "selects")
2+ load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
13load("@rules_cc//cc:defs.bzl", "cc_library")
24
35package(default_visibility = ["//visibility:public"])
46
7+ string_flag(
8+ name = "llvm_build",
9+ build_setting_default = "{LLVM_BUILD_DEFAULT}",
10+ values = [
11+ "static",
12+ "dynamic",
13+ ],
14+ )
15+
16+ config_setting(
17+ name = "llvm_build_static",
18+ flag_values = {":llvm_build": "static"},
19+ )
20+
21+ config_setting(
22+ name = "llvm_build_dynamic",
23+ flag_values = {":llvm_build": "dynamic"},
24+ )
25+
26+ selects.config_setting_group(
27+ name = "linux_dynamic",
28+ match_all = [
29+ "@bazel_tools//src/conditions:linux_x86_64",
30+ ":llvm_build_dynamic",
31+ ],
32+ )
33+
34+ selects.config_setting_group(
35+ name = "linux_static",
36+ match_all = [
37+ "@bazel_tools//src/conditions:linux_x86_64",
38+ ":llvm_build_static",
39+ ],
40+ )
41+
542LLVM_LINKOPTS = select({
643 "@bazel_tools//src/conditions:windows": [],
744 "//conditions:default": [
@@ -68,6 +105,17 @@ filegroup(
68105 ]),
69106)
70107
108+ filegroup(
109+ name = "libllvm-so",
110+ srcs = select({
111+ "@bazel_tools//src/conditions:windows": [
112+ ],
113+ "//conditions:default": glob([
114+ "lib/libLLVM*.so*",
115+ ]),
116+ }),
117+ )
118+
71119filegroup(
72120 name = "clang-headers",
73121 srcs = glob([
@@ -80,21 +128,36 @@ filegroup(
80128 ]),
81129)
82130
131+ filegroup(
132+ name = "libclang-cpp-so",
133+ srcs = select({
134+ "@bazel_tools//src/conditions:windows": [
135+ ],
136+ "//conditions:default": glob([
137+ "lib/libclang-cpp*.so*",
138+ ]),
139+ }),
140+ )
141+
83142cc_library(
84143 name = "llvm-support",
85144 srcs = select({
86145 "@bazel_tools//src/conditions:windows": [
87146 "lib/LLVMSupport.lib",
88147 "lib/LLVMDemangle.lib",
89148 ],
90- "//conditions:default": [
149+ ":linux_dynamic": [
150+ ":libllvm-so",
151+ ],
152+ ":linux_static": [
91153 "lib/libLLVMSupport.a",
92154 "lib/libLLVMDemangle.a",
93155 ],
94156 }),
95157 hdrs = [":llvm-headers"],
96158 includes = ["include"],
97159 linkopts = LLVM_LINKOPTS,
160+ linkstatic = 1,
98161)
99162
100163cc_library(
@@ -107,8 +170,10 @@ cc_library(
107170 "lib/LLVMBitstreamReader.lib",
108171 "lib/LLVMBinaryFormat.lib",
109172 ],
110- "//conditions:default": [
111- # $(llvm-config --libs mc core support)
173+ ":linux_dynamic": [
174+ ":libllvm-so",
175+ ],
176+ ":linux_static": [
112177 "lib/libLLVMCore.a",
113178 "lib/libLLVMRemarks.a",
114179 "lib/libLLVMBitstreamReader.a",
@@ -117,6 +182,7 @@ cc_library(
117182 }),
118183 hdrs = [":llvm-headers"],
119184 includes = ["include"],
185+ linkstatic = 1,
120186 deps = [":llvm-support"],
121187)
122188
@@ -128,33 +194,27 @@ cc_library(
128194 "lib/LLVMDebugInfoCodeView.lib",
129195 "lib/LLVMDebugInfoMSF.lib",
130196 ],
131- "//conditions:default": [
197+ ":linux_dynamic": [
198+ ":libllvm-so",
199+ ],
200+ ":linux_static": [
132201 "lib/libLLVMMC.a",
133202 "lib/libLLVMDebugInfoCodeView.a",
134203 "lib/libLLVMDebugInfoMSF.a",
135204 ],
136205 }),
137206 hdrs = [":llvm-headers"],
138207 includes = ["include"],
208+ linkstatic = 1,
139209 deps = [":llvm-core"],
140210)
141211
142212cc_library(
143213 name = "llvm-shared",
144- srcs = select({
145- "@bazel_tools//src/conditions:windows": [
146- ],
147- "//conditions:default": glob([
148- "lib/libLLVM*.so",
149- ]),
150- }),
214+ srcs = [":libllvm-so"],
151215 hdrs = [":llvm-headers"],
152216 includes = ["include"],
153- deps = [
154- ":llvm-core",
155- ":llvm-mc",
156- ":llvm-support",
157- ],
217+ linkstatic = 1,
158218)
159219
160220cc_library(
@@ -163,12 +223,16 @@ cc_library(
163223 "@bazel_tools//src/conditions:windows": [
164224 "lib/clangBasic.lib",
165225 ],
166- "//conditions:default": [
226+ ":linux_dynamic": [
227+ ":libclang-cpp-so",
228+ ],
229+ ":linux_static": [
167230 "lib/libclangBasic.a",
168231 ],
169232 }),
170233 hdrs = [":clang-headers"],
171234 includes = ["include"],
235+ linkstatic = 1,
172236 deps = [
173237 ":llvm-core",
174238 ":llvm-mc",
@@ -182,18 +246,30 @@ cc_library(
182246 "@bazel_tools//src/conditions:windows": [
183247 "lib/clangLex.lib",
184248 ],
185- "//conditions:default": [
249+ ":linux_dynamic": glob([
250+ "lib/libclang-cpp*.so*",
251+ ]),
252+ ":linux_static": [
186253 "lib/libclangLex.a",
187254 ],
188255 }),
189256 hdrs = [":clang-headers"],
190257 includes = ["include"],
258+ linkstatic = 1,
191259 deps = [
192260 ":clang-basic",
193261 ":llvm-support",
194262 ],
195263)
196264
265+ cc_library(
266+ name = "clangcpp-shared",
267+ srcs = [":libclang-cpp-so"],
268+ hdrs = [":clang-headers"],
269+ includes = ["include"],
270+ linkstatic = 1,
271+ )
272+
197273cc_library(
198274 name = "lldb-api",
199275 srcs = select({
@@ -211,8 +287,13 @@ cc_library(
211287 "include/lldb/**/*.inc",
212288 ]),
213289 includes = ["include"],
214- deps = [
215- ":llvm-shared", # liblldb can be dynamically linked and depend on libLLVM.
216- ":llvm-support",
217- ],
290+ deps = select({
291+ ":llvm_build_dynamic": [
292+ ":llvm-shared",
293+ ":clangcpp-shared",
294+ ],
295+ ":llvm_build_static": [
296+ # Don't have any dependencies if linked statically.
297+ ],
298+ }),
218299)
0 commit comments