blob: bd9674475a7e7532427b7d22d45b1cd53ff05ec2 [file] [log] [blame]
Ulf Adams3e87c622017-06-13 10:53:13 +02001# Bazel - Google's Build System
2
Yun Peng136dae12023-09-08 12:39:10 -07003load("@bazel_skylib//rules:write_file.bzl", "write_file")
Tony Aiuto881fc802022-05-25 06:30:17 -07004load("@rules_license//rules:license.bzl", "license")
Googler8c41763f72022-07-08 06:09:05 -07005load("@rules_pkg//pkg:tar.bzl", "pkg_tar")
Yun Peng136dae12023-09-08 12:39:10 -07006load("@rules_python//python:defs.bzl", "py_binary")
7load("//src/tools/bzlmod:utils.bzl", "get_canonical_repo_name")
8load("//tools/distributions:distribution_rules.bzl", "distrib_jar_filegroup")
brandjondb063a82019-07-30 21:41:37 -07009
Damien Martin-Guillerezd019eea2015-07-24 12:40:48 +000010package(default_visibility = ["//scripts/release:__pkg__"])
11
Tony Aiuto881fc802022-05-25 06:30:17 -070012license(
13 name = "license",
14 package_name = "bazelbuild/bazel",
15 copyright_notice = "Copyright © 2014 The Bazel Authors. All rights reserved.",
16 license_kinds = [
17 "@rules_license//licenses/spdx:Apache-2.0",
18 ],
19 license_text = "LICENSE",
20)
21
Philipp Wollermann02401d92017-03-17 13:51:14 +000022exports_files(["LICENSE"])
23
Damien Martin-Guillerezd019eea2015-07-24 12:40:48 +000024filegroup(
Ulf Adams3e87c622017-06-13 10:53:13 +020025 name = "srcs",
26 srcs = glob(
27 ["*"],
28 exclude = [
Xdng Yngfb84c012024-02-13 13:39:23 -080029 "MODULE.bazel.lock", # Use MODULE.bazel.lock.dist instead
Yun Peng136dae12023-09-08 12:39:10 -070030 "WORKSPACE.bzlmod", # Needs to be filtered.
Ulf Adams3e87c622017-06-13 10:53:13 +020031 "bazel-*", # convenience symlinks
32 "out", # IntelliJ with setup-intellij.sh
33 "output", # output of compile.sh
34 ".*", # mainly .git* files
35 ],
36 ) + [
Xdng Yngfb84c012024-02-13 13:39:23 -080037 "//:MODULE.bazel.lock.dist",
Yun Peng136dae12023-09-08 12:39:10 -070038 "//:WORKSPACE.bzlmod.filtered",
Ulf Adams3e87c622017-06-13 10:53:13 +020039 "//examples:srcs",
40 "//scripts:srcs",
41 "//site:srcs",
42 "//src:srcs",
fweikert69895ba2022-07-13 04:56:04 -070043 "//src/main/java/com/google/devtools/build/docgen/release:srcs",
Yun Peng3029a7d2023-06-07 07:40:12 -070044 "//src/main/starlark/tests/builtins_bzl:srcs",
45 "//third_party:srcs",
46 "//tools:srcs",
47 ] + glob([".bazelci/*"]) + [
48 ".bazelrc",
49 ".bazelversion",
50 ],
Tony Aiuto881fc802022-05-25 06:30:17 -070051 applicable_licenses = ["@io_bazel//:license"],
Damien Martin-Guillerez0baff0f2017-08-22 17:40:37 +020052 visibility = ["//src/test/shell/bazel:__pkg__"],
Ulf Adams3e87c622017-06-13 10:53:13 +020053)
54
55filegroup(
Lukacs Berki678ba232015-09-03 13:28:55 +000056 name = "dummy",
57 visibility = ["//visibility:public"],
58)
Han-Wen Nienhuys47182322015-10-09 17:56:52 +000059
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +000060filegroup(
Tobias Werth70e80a12024-06-06 06:35:21 -070061 name = "workspace-deps-bzl",
cushonb6646232018-09-07 01:44:10 -070062 srcs = [
Yun Pengc1f2aff2023-11-07 09:51:02 -080063 ":workspace_deps.bzl",
cushonb6646232018-09-07 01:44:10 -070064 ],
Cal Peyser2152bc12016-04-22 17:08:59 +000065 visibility = [
John Cater214a7ae2017-08-09 17:24:53 +020066 "//src/test/shell/bazel:__subpackages__",
Cal Peyser2152bc12016-04-22 17:08:59 +000067 ],
Damien Martin-Guillerez9b889202016-03-03 00:35:13 +000068)
69
70filegroup(
Yun Penga50635d2016-07-26 13:29:03 +000071 name = "changelog-file",
72 srcs = [":CHANGELOG.md"],
73 visibility = [
John Caterb0308d42017-01-30 17:49:26 +000074 "//scripts/packages:__subpackages__",
Yun Penga50635d2016-07-26 13:29:03 +000075 ],
76)
77
John Cater1e005022020-07-20 07:50:49 -070078genrule(
79 name = "filtered_WORKSPACE",
Yun Peng136dae12023-09-08 12:39:10 -070080 srcs = ["WORKSPACE.bzlmod"],
81 outs = ["WORKSPACE.bzlmod.filtered"],
John Cater1e005022020-07-20 07:50:49 -070082 cmd = "\n".join([
83 "cp $< $@",
84 # Comment out the android repos if they exist.
Googlercd8a1552024-08-05 14:30:59 -070085 "sed -i.bak -e 's/^android_sdk_repository/# android_sdk_repository/' $@",
John Cater1e005022020-07-20 07:50:49 -070086 ]),
87)
88
Xdng Yngfb84c012024-02-13 13:39:23 -080089genrule(
90 name = "generate_dist_lockfile",
91 srcs = [
92 "MODULE.bazel",
93 "//third_party/googleapis:MODULE.bazel",
94 "//third_party/remoteapis:MODULE.bazel",
95 ],
96 outs = ["MODULE.bazel.lock.dist"],
Googlera3f778c2024-02-14 10:45:30 -080097 cmd = " && ".join([
98 "ROOT=$$PWD",
99 "TMPDIR=$$(mktemp -d)",
100 "trap 'rm -rf $$TMPDIR' EXIT",
101 "mkdir -p $$TMPDIR/workspace",
102 "touch $$TMPDIR/workspace/BUILD.bazel",
103 "for i in $(SRCS); do dir=$$TMPDIR/workspace/$$(dirname $$i); mkdir -p $$dir; cp $$i $$dir; done",
104 "cd $$TMPDIR/workspace",
105 # Instead of `bazel mod deps`, we run a simpler command like `bazel query :all` here
106 # so that we only trigger module resolution, not extension eval.
107 # Also use `--batch` so that Bazel doesn't keep a server process alive.
Googler702118b2024-02-29 07:31:14 -0800108 "$$ROOT/$(location //src:bazel) --batch --output_user_root=$$TMPDIR/output_user_root query --check_direct_dependencies=error --lockfile_mode=update :all",
Googlera3f778c2024-02-14 10:45:30 -0800109 "mv MODULE.bazel.lock $$ROOT/$@",
110 ]),
Xdng Yngfb84c012024-02-13 13:39:23 -0800111 tags = ["requires-network"],
112 tools = ["//src:bazel"],
113)
114
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800115pkg_tar(
116 name = "bootstrap-jars",
117 srcs = [
Tyler Williamscc49d682023-07-24 05:27:12 -0700118 "@blake3",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800119 "@com_google_protobuf//:protobuf_java",
120 "@com_google_protobuf//:protobuf_java_util",
Yannic Bonenbergerc656e652020-09-17 03:14:25 -0700121 "@com_google_protobuf//:protobuf_javalite",
Alessandro Patti6da80862021-11-11 22:49:37 -0800122 "@zstd-jni//:zstd-jni",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800123 ],
Tony Aiuto99079b32021-04-06 06:41:17 -0700124 package_dir = "derived/jars",
Googler164500d2024-05-03 01:41:31 -0700125 remap_paths = {
126 "external/": "",
127 "../": "",
128 },
129 strip_prefix = ".",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800130 # Public but bazel-only visibility.
131 visibility = ["//:__subpackages__"],
132)
133
Yun Peng37b3a092020-05-25 06:54:48 -0700134distrib_jar_filegroup(
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800135 name = "bootstrap-derived-java-jars",
136 srcs = glob(
137 ["derived/jars/**/*.jar"],
138 allow_empty = True,
139 ),
Yun Peng37b3a092020-05-25 06:54:48 -0700140 enable_distributions = ["debian"],
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800141 visibility = ["//:__subpackages__"],
142)
143
Yun Penga50635d2016-07-26 13:29:03 +0000144filegroup(
Jakob Buchgraber6073f1d2017-06-06 11:58:26 -0400145 name = "bootstrap-derived-java-srcs",
Laurent Le Brun6fbfe5c2019-07-05 03:10:52 -0700146 srcs = glob(
147 ["derived/**/*.java"],
148 allow_empty = True,
149 ),
Jakob Buchgraber6073f1d2017-06-06 11:58:26 -0400150 visibility = ["//:__subpackages__"],
151)
152
brandjon708e1ce2020-12-15 14:51:06 -0800153# Additional generated files that are not Java sources (which could otherwise
154# be included in //src:derived_java_sources).
155filegroup(
156 name = "generated_resources",
Tony Aiuto3b2d3102021-01-07 03:40:14 -0800157 srcs = [
158 "//src/main/java/com/google/devtools/build/lib/bazel/rules:builtins_bzl.zip",
aiutobbeb1da2021-01-15 06:50:56 -0800159 "//src/main/java/com/google/devtools/build/lib/bazel/rules:coverage.WORKSPACE",
Googler4ce63be2022-09-08 03:38:54 -0700160 "//src/main/java/com/google/devtools/build/lib/bazel/rules:rules_license.WORKSPACE",
Tony Aiuto3b2d3102021-01-07 03:40:14 -0800161 "//src/main/java/com/google/devtools/build/lib/bazel/rules/cpp:cc_configure.WORKSPACE",
Tony Aiutob15a8b42021-01-08 07:42:57 -0800162 "//src/main/java/com/google/devtools/build/lib/bazel/rules/java:jdk.WORKSPACE",
Tony Aiuto3b2d3102021-01-07 03:40:14 -0800163 ],
brandjon708e1ce2020-12-15 14:51:06 -0800164)
165
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000166pkg_tar(
167 name = "bazel-srcs",
brandjon708e1ce2020-12-15 14:51:06 -0800168 srcs = [
169 ":generated_resources",
170 ":srcs",
171 ],
Tony Aiuto99079b32021-04-06 06:41:17 -0700172 # TODO(aiuto): Replace with pkg_filegroup when that is available.
John Cater2f838922018-11-12 08:19:03 -0800173 remap_paths = {
Xdng Yngfb84c012024-02-13 13:39:23 -0800174 "MODULE.bazel.lock.dist": "MODULE.bazel.lock",
Yun Peng136dae12023-09-08 12:39:10 -0700175 "WORKSPACE.bzlmod.filtered": "WORKSPACE.bzlmod",
John Cater2f838922018-11-12 08:19:03 -0800176 },
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000177 strip_prefix = ".",
178 # Public but bazel-only visibility.
179 visibility = ["//:__subpackages__"],
180)
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000181
hlopkoaaf64572019-06-14 02:33:56 -0700182pkg_tar(
183 name = "platforms-srcs",
184 srcs = ["@platforms//:srcs"],
Googler164500d2024-05-03 01:41:31 -0700185 remap_paths = {
186 "external/": "",
187 "../": "",
188 },
189 strip_prefix = ".",
hlopkoaaf64572019-06-14 02:33:56 -0700190 visibility = ["//:__subpackages__"],
191)
192
Yun Peng30b21302023-06-19 03:28:53 -0700193pkg_tar(
194 name = "rules_java-srcs",
195 srcs = ["@rules_java//:distribution"],
Googler164500d2024-05-03 01:41:31 -0700196 remap_paths = {
197 "external/": "",
198 "../": "",
199 },
200 strip_prefix = ".",
Yun Peng30b21302023-06-19 03:28:53 -0700201 visibility = ["//:__subpackages__"],
202)
203
Yun Peng136dae12023-09-08 12:39:10 -0700204write_file(
205 name = "gen_maven_repo_name",
206 out = "MAVEN_CANONICAL_REPO_NAME",
Fabian Meumertzheim2758f552024-06-12 03:33:27 -0700207 content = [get_canonical_repo_name("@maven")],
Yun Peng136dae12023-09-08 12:39:10 -0700208)
209
Yun Peng3d7937e2023-01-10 06:43:02 -0800210# The @maven repository is created by maven_install from rules_jvm_external.
211# `@maven//:srcs` contains all jar files downloaded and BUILD files created by maven_install.
212pkg_tar(
213 name = "maven-srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700214 srcs = ["@maven//:srcs"] + ["MAVEN_CANONICAL_REPO_NAME"],
215 package_dir = "derived/maven",
Googler164500d2024-05-03 01:41:31 -0700216 remap_paths = {
Xdng Yng24fcc3e2024-08-29 00:45:43 -0700217 "external/" + get_canonical_repo_name("@maven") + "/": "",
218 "../" + get_canonical_repo_name("@maven") + "/": "",
Googler164500d2024-05-03 01:41:31 -0700219 },
220 strip_prefix = ".",
Yun Peng3d7937e2023-01-10 06:43:02 -0800221 visibility = ["//:__subpackages__"],
222)
223
Tony Aiuto05c70d92023-06-30 13:11:58 -0700224exports_files(
225 ["maven_install.json"],
226 visibility = ["//tools/compliance:__pkg__"],
227)
228
László Csomor0783b9e2017-08-11 10:28:36 +0200229py_binary(
230 name = "combine_distfiles",
231 srcs = ["combine_distfiles.py"],
232 visibility = ["//visibility:private"],
233 deps = ["//src:create_embedded_tools_lib"],
234)
235
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000236genrule(
237 name = "bazel-distfile",
238 srcs = [
239 ":bazel-srcs",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800240 ":bootstrap-jars",
Yun Peng3d7937e2023-01-10 06:43:02 -0800241 ":maven-srcs",
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000242 "//src:derived_java_srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700243 "@bootstrap_repo_cache//:archives.tar",
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000244 ],
245 outs = ["bazel-distfile.zip"],
László Csomor0783b9e2017-08-11 10:28:36 +0200246 cmd = "$(location :combine_distfiles) $@ $(SRCS)",
247 tools = [":combine_distfiles"],
Klaus Aehlig279a0612016-11-11 09:51:44 +0000248 # Public but bazel-only visibility.
249 visibility = ["//:__subpackages__"],
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000250)
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000251
252genrule(
253 name = "bazel-distfile-tar",
254 srcs = [
255 ":bazel-srcs",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800256 ":bootstrap-jars",
hlopkoaaf64572019-06-14 02:33:56 -0700257 ":platforms-srcs",
Yun Peng30b21302023-06-19 03:28:53 -0700258 ":rules_java-srcs",
Yun Peng3d7937e2023-01-10 06:43:02 -0800259 ":maven-srcs",
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000260 "//src:derived_java_srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700261 "@bootstrap_repo_cache//:archives.tar",
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000262 ],
263 outs = ["bazel-distfile.tar"],
László Csomor0783b9e2017-08-11 10:28:36 +0200264 cmd = "$(location :combine_distfiles_to_tar.sh) $@ $(SRCS)",
265 tools = ["combine_distfiles_to_tar.sh"],
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000266 # Public but bazel-only visibility.
267 visibility = ["//:__subpackages__"],
268)
Googlercc858622017-07-25 21:03:05 +0200269
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700270constraint_setting(name = "machine_size")
271
272# A machine with "high cpu count".
273constraint_value(
274 name = "highcpu_machine",
275 constraint_setting = ":machine_size",
276 visibility = ["//visibility:public"],
277)
278
philwo3a3a37a2019-02-05 07:33:47 -0800279platform(
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700280 name = "default_host_platform",
281 constraint_values = [
282 ":highcpu_machine",
283 ],
Googler74c8ca42024-03-29 12:48:51 -0700284 parents = ["@platforms//host"],
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700285)
286
Googler138f06f2023-08-10 01:53:06 -0700287platform(
288 name = "windows_arm64",
289 constraint_values = [
290 "@platforms//os:windows",
291 "@platforms//cpu:arm64",
292 ],
293)
294
Googler40824e12024-03-11 02:38:48 -0700295REMOTE_PLATFORMS = ("rbe_ubuntu2004",)
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700296
297[
298 platform(
299 name = platform_name + "_platform",
Chi Wang26b94ff2021-09-28 23:42:26 -0700300 exec_properties = {
301 "dockerNetwork": "standard",
302 "dockerPrivileged": "true",
Tiago Quelhas0b914c62022-05-06 08:02:37 -0700303 "Pool": "default",
Chi Wang26b94ff2021-09-28 23:42:26 -0700304 },
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700305 parents = ["@" + platform_name + "//config:platform"],
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700306 )
307 for platform_name in REMOTE_PLATFORMS
308]
309
310[
311 # The highcpu RBE platform where heavy actions run on. In order to
312 # use this platform add the highcpu_machine constraint to your target.
313 platform(
314 name = platform_name + "_highcpu_platform",
315 constraint_values = [
316 "//:highcpu_machine",
317 ],
Chi Wang26b94ff2021-09-28 23:42:26 -0700318 exec_properties = {
Tiago Quelhas0b914c62022-05-06 08:02:37 -0700319 "Pool": "highcpu",
Chi Wang26b94ff2021-09-28 23:42:26 -0700320 },
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700321 parents = ["//:" + platform_name + "_platform"],
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700322 )
323 for platform_name in REMOTE_PLATFORMS
324]