blob: 0d6ed381d622cb7dc745d4383d35b570f31978b3 [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
Googler824cf9f2024-09-30 10:30:34 -070022exports_files([
23 "LICENSE",
24 "MODULE.bazel.lock",
25])
Philipp Wollermann02401d92017-03-17 13:51:14 +000026
Damien Martin-Guillerezd019eea2015-07-24 12:40:48 +000027filegroup(
Ulf Adams3e87c622017-06-13 10:53:13 +020028 name = "srcs",
29 srcs = glob(
30 ["*"],
31 exclude = [
Xdng Yngfb84c012024-02-13 13:39:23 -080032 "MODULE.bazel.lock", # Use MODULE.bazel.lock.dist instead
Ulf Adams3e87c622017-06-13 10:53:13 +020033 "bazel-*", # convenience symlinks
34 "out", # IntelliJ with setup-intellij.sh
35 "output", # output of compile.sh
36 ".*", # mainly .git* files
37 ],
38 ) + [
Xdng Yngfb84c012024-02-13 13:39:23 -080039 "//:MODULE.bazel.lock.dist",
Ulf Adams3e87c622017-06-13 10:53:13 +020040 "//examples:srcs",
41 "//scripts:srcs",
42 "//site:srcs",
43 "//src:srcs",
fweikert69895ba2022-07-13 04:56:04 -070044 "//src/main/java/com/google/devtools/build/docgen/release:srcs",
Yun Peng3029a7d2023-06-07 07:40:12 -070045 "//src/main/starlark/tests/builtins_bzl:srcs",
46 "//third_party:srcs",
47 "//tools:srcs",
48 ] + glob([".bazelci/*"]) + [
49 ".bazelrc",
50 ".bazelversion",
51 ],
Tony Aiuto881fc802022-05-25 06:30:17 -070052 applicable_licenses = ["@io_bazel//:license"],
Damien Martin-Guillerez0baff0f2017-08-22 17:40:37 +020053 visibility = ["//src/test/shell/bazel:__pkg__"],
Ulf Adams3e87c622017-06-13 10:53:13 +020054)
55
56filegroup(
Lukacs Berki678ba232015-09-03 13:28:55 +000057 name = "dummy",
58 visibility = ["//visibility:public"],
59)
Han-Wen Nienhuys47182322015-10-09 17:56:52 +000060
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +000061filegroup(
Tobias Werth70e80a12024-06-06 06:35:21 -070062 name = "workspace-deps-bzl",
cushonb6646232018-09-07 01:44:10 -070063 srcs = [
Yun Pengc1f2aff2023-11-07 09:51:02 -080064 ":workspace_deps.bzl",
cushonb6646232018-09-07 01:44:10 -070065 ],
Cal Peyser2152bc12016-04-22 17:08:59 +000066 visibility = [
John Cater214a7ae2017-08-09 17:24:53 +020067 "//src/test/shell/bazel:__subpackages__",
Cal Peyser2152bc12016-04-22 17:08:59 +000068 ],
Damien Martin-Guillerez9b889202016-03-03 00:35:13 +000069)
70
71filegroup(
Yun Penga50635d2016-07-26 13:29:03 +000072 name = "changelog-file",
73 srcs = [":CHANGELOG.md"],
74 visibility = [
John Caterb0308d42017-01-30 17:49:26 +000075 "//scripts/packages:__subpackages__",
Yun Penga50635d2016-07-26 13:29:03 +000076 ],
77)
78
John Cater1e005022020-07-20 07:50:49 -070079genrule(
Xdng Yngfb84c012024-02-13 13:39:23 -080080 name = "generate_dist_lockfile",
81 srcs = [
82 "MODULE.bazel",
Xdng Yngfb84c012024-02-13 13:39:23 -080083 "//third_party/remoteapis:MODULE.bazel",
Fabian Meumertzheimc4131922024-09-24 12:15:43 -070084 "//third_party:BUILD",
85 "//third_party:rules_jvm_external_6.0.patch",
Googlerc7dc0452024-10-07 02:56:21 -070086 "//third_party:rules_graalvm_fix.patch",
Xdng Yngc46b9ce2024-10-01 14:21:54 -070087 "//third_party/protobuf:BUILD",
Googler678b01a2024-10-05 23:16:32 -070088 "//third_party/protobuf:proto_info_bzl_deps.patch",
Xdng Yngc46b9ce2024-10-01 14:21:54 -070089 "//third_party/protobuf:remove_rules_rust.patch",
Googler97ddb4b2024-10-06 11:15:28 -070090 "//third_party/protobuf:add_python_loads.patch",
Xdng Yngfb84c012024-02-13 13:39:23 -080091 ],
92 outs = ["MODULE.bazel.lock.dist"],
Googlera3f778c2024-02-14 10:45:30 -080093 cmd = " && ".join([
94 "ROOT=$$PWD",
95 "TMPDIR=$$(mktemp -d)",
96 "trap 'rm -rf $$TMPDIR' EXIT",
97 "mkdir -p $$TMPDIR/workspace",
98 "touch $$TMPDIR/workspace/BUILD.bazel",
99 "for i in $(SRCS); do dir=$$TMPDIR/workspace/$$(dirname $$i); mkdir -p $$dir; cp $$i $$dir; done",
100 "cd $$TMPDIR/workspace",
101 # Instead of `bazel mod deps`, we run a simpler command like `bazel query :all` here
102 # so that we only trigger module resolution, not extension eval.
103 # Also use `--batch` so that Bazel doesn't keep a server process alive.
Googler702118b2024-02-29 07:31:14 -0800104 "$$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 -0800105 "mv MODULE.bazel.lock $$ROOT/$@",
106 ]),
Xdng Yngfb84c012024-02-13 13:39:23 -0800107 tags = ["requires-network"],
108 tools = ["//src:bazel"],
109)
110
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800111pkg_tar(
112 name = "bootstrap-jars",
113 srcs = [
Xdng Yngc46b9ce2024-10-01 14:21:54 -0700114 "//third_party/googleapis:dist_jars",
115 "//third_party/grpc-java:grpc_jars",
Googler401ed582024-10-02 05:55:37 -0700116 "@protobuf//:protobuf_java",
117 "@protobuf//:protobuf_java_util",
118 "@protobuf//:protobuf_javalite",
Alessandro Patti6da80862021-11-11 22:49:37 -0800119 "@zstd-jni//:zstd-jni",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800120 ],
Tony Aiuto99079b32021-04-06 06:41:17 -0700121 package_dir = "derived/jars",
Googler164500d2024-05-03 01:41:31 -0700122 remap_paths = {
123 "external/": "",
124 "../": "",
125 },
126 strip_prefix = ".",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800127 # Public but bazel-only visibility.
128 visibility = ["//:__subpackages__"],
129)
130
Yun Peng37b3a092020-05-25 06:54:48 -0700131distrib_jar_filegroup(
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800132 name = "bootstrap-derived-java-jars",
133 srcs = glob(
134 ["derived/jars/**/*.jar"],
135 allow_empty = True,
136 ),
Yun Peng37b3a092020-05-25 06:54:48 -0700137 enable_distributions = ["debian"],
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800138 visibility = ["//:__subpackages__"],
139)
140
Yun Penga50635d2016-07-26 13:29:03 +0000141filegroup(
Jakob Buchgraber6073f1d2017-06-06 11:58:26 -0400142 name = "bootstrap-derived-java-srcs",
Laurent Le Brun6fbfe5c2019-07-05 03:10:52 -0700143 srcs = glob(
144 ["derived/**/*.java"],
145 allow_empty = True,
146 ),
Jakob Buchgraber6073f1d2017-06-06 11:58:26 -0400147 visibility = ["//:__subpackages__"],
148)
149
brandjon708e1ce2020-12-15 14:51:06 -0800150# Additional generated files that are not Java sources (which could otherwise
151# be included in //src:derived_java_sources).
152filegroup(
153 name = "generated_resources",
Tony Aiuto3b2d3102021-01-07 03:40:14 -0800154 srcs = [
155 "//src/main/java/com/google/devtools/build/lib/bazel/rules:builtins_bzl.zip",
aiutobbeb1da2021-01-15 06:50:56 -0800156 "//src/main/java/com/google/devtools/build/lib/bazel/rules:coverage.WORKSPACE",
Yun Peng75066902024-09-27 05:59:50 -0700157 "//src/main/java/com/google/devtools/build/lib/bazel/rules:rules_suffix.WORKSPACE",
Tony Aiuto3b2d3102021-01-07 03:40:14 -0800158 "//src/main/java/com/google/devtools/build/lib/bazel/rules/cpp:cc_configure.WORKSPACE",
159 ],
brandjon708e1ce2020-12-15 14:51:06 -0800160)
161
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000162pkg_tar(
163 name = "bazel-srcs",
brandjon708e1ce2020-12-15 14:51:06 -0800164 srcs = [
165 ":generated_resources",
166 ":srcs",
167 ],
Tony Aiuto99079b32021-04-06 06:41:17 -0700168 # TODO(aiuto): Replace with pkg_filegroup when that is available.
John Cater2f838922018-11-12 08:19:03 -0800169 remap_paths = {
Xdng Yngfb84c012024-02-13 13:39:23 -0800170 "MODULE.bazel.lock.dist": "MODULE.bazel.lock",
John Cater2f838922018-11-12 08:19:03 -0800171 },
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000172 strip_prefix = ".",
173 # Public but bazel-only visibility.
174 visibility = ["//:__subpackages__"],
175)
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000176
hlopkoaaf64572019-06-14 02:33:56 -0700177pkg_tar(
178 name = "platforms-srcs",
179 srcs = ["@platforms//:srcs"],
Googler164500d2024-05-03 01:41:31 -0700180 remap_paths = {
181 "external/": "",
182 "../": "",
183 },
184 strip_prefix = ".",
hlopkoaaf64572019-06-14 02:33:56 -0700185 visibility = ["//:__subpackages__"],
186)
187
Yun Peng136dae12023-09-08 12:39:10 -0700188write_file(
189 name = "gen_maven_repo_name",
190 out = "MAVEN_CANONICAL_REPO_NAME",
Fabian Meumertzheim2758f552024-06-12 03:33:27 -0700191 content = [get_canonical_repo_name("@maven")],
Yun Peng136dae12023-09-08 12:39:10 -0700192)
193
Yun Peng3d7937e2023-01-10 06:43:02 -0800194# The @maven repository is created by maven_install from rules_jvm_external.
195# `@maven//:srcs` contains all jar files downloaded and BUILD files created by maven_install.
196pkg_tar(
197 name = "maven-srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700198 srcs = ["@maven//:srcs"] + ["MAVEN_CANONICAL_REPO_NAME"],
199 package_dir = "derived/maven",
Googler164500d2024-05-03 01:41:31 -0700200 remap_paths = {
Xdng Yng24fcc3e2024-08-29 00:45:43 -0700201 "external/" + get_canonical_repo_name("@maven") + "/": "",
202 "../" + get_canonical_repo_name("@maven") + "/": "",
Googler164500d2024-05-03 01:41:31 -0700203 },
204 strip_prefix = ".",
Yun Peng3d7937e2023-01-10 06:43:02 -0800205 visibility = ["//:__subpackages__"],
206)
207
Tony Aiuto05c70d92023-06-30 13:11:58 -0700208exports_files(
209 ["maven_install.json"],
210 visibility = ["//tools/compliance:__pkg__"],
211)
212
László Csomor0783b9e2017-08-11 10:28:36 +0200213py_binary(
214 name = "combine_distfiles",
215 srcs = ["combine_distfiles.py"],
216 visibility = ["//visibility:private"],
217 deps = ["//src:create_embedded_tools_lib"],
218)
219
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000220genrule(
221 name = "bazel-distfile",
222 srcs = [
223 ":bazel-srcs",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800224 ":bootstrap-jars",
Yun Peng3d7937e2023-01-10 06:43:02 -0800225 ":maven-srcs",
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000226 "//src:derived_java_srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700227 "@bootstrap_repo_cache//:archives.tar",
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000228 ],
229 outs = ["bazel-distfile.zip"],
László Csomor0783b9e2017-08-11 10:28:36 +0200230 cmd = "$(location :combine_distfiles) $@ $(SRCS)",
231 tools = [":combine_distfiles"],
Klaus Aehlig279a0612016-11-11 09:51:44 +0000232 # Public but bazel-only visibility.
233 visibility = ["//:__subpackages__"],
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000234)
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000235
236genrule(
237 name = "bazel-distfile-tar",
238 srcs = [
239 ":bazel-srcs",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800240 ":bootstrap-jars",
hlopkoaaf64572019-06-14 02:33:56 -0700241 ":platforms-srcs",
Yun Peng3d7937e2023-01-10 06:43:02 -0800242 ":maven-srcs",
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000243 "//src:derived_java_srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700244 "@bootstrap_repo_cache//:archives.tar",
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000245 ],
246 outs = ["bazel-distfile.tar"],
László Csomor0783b9e2017-08-11 10:28:36 +0200247 cmd = "$(location :combine_distfiles_to_tar.sh) $@ $(SRCS)",
248 tools = ["combine_distfiles_to_tar.sh"],
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000249 # Public but bazel-only visibility.
250 visibility = ["//:__subpackages__"],
251)
Googlercc858622017-07-25 21:03:05 +0200252
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700253constraint_setting(name = "machine_size")
254
255# A machine with "high cpu count".
256constraint_value(
257 name = "highcpu_machine",
258 constraint_setting = ":machine_size",
259 visibility = ["//visibility:public"],
260)
261
philwo3a3a37a2019-02-05 07:33:47 -0800262platform(
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700263 name = "default_host_platform",
264 constraint_values = [
265 ":highcpu_machine",
266 ],
Googler74c8ca42024-03-29 12:48:51 -0700267 parents = ["@platforms//host"],
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700268)
269
Googler138f06f2023-08-10 01:53:06 -0700270platform(
271 name = "windows_arm64",
272 constraint_values = [
273 "@platforms//os:windows",
274 "@platforms//cpu:arm64",
275 ],
276)
277
Googler40824e12024-03-11 02:38:48 -0700278REMOTE_PLATFORMS = ("rbe_ubuntu2004",)
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700279
280[
281 platform(
282 name = platform_name + "_platform",
Chi Wang26b94ff2021-09-28 23:42:26 -0700283 exec_properties = {
284 "dockerNetwork": "standard",
285 "dockerPrivileged": "true",
Tiago Quelhas0b914c62022-05-06 08:02:37 -0700286 "Pool": "default",
Chi Wang26b94ff2021-09-28 23:42:26 -0700287 },
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700288 parents = ["@" + platform_name + "//config:platform"],
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700289 )
290 for platform_name in REMOTE_PLATFORMS
291]
292
293[
294 # The highcpu RBE platform where heavy actions run on. In order to
295 # use this platform add the highcpu_machine constraint to your target.
296 platform(
297 name = platform_name + "_highcpu_platform",
298 constraint_values = [
299 "//:highcpu_machine",
300 ],
Chi Wang26b94ff2021-09-28 23:42:26 -0700301 exec_properties = {
Tiago Quelhas0b914c62022-05-06 08:02:37 -0700302 "Pool": "highcpu",
Chi Wang26b94ff2021-09-28 23:42:26 -0700303 },
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700304 parents = ["//:" + platform_name + "_platform"],
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700305 )
306 for platform_name in REMOTE_PLATFORMS
307]