blob: 38a1725ebd495edf28719c9026054f2fba81785b [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",
Googlerb89ec432024-10-07 10:05:35 -070091 "//third_party/protobuf:add_rules_shell_loads.patch",
Googleraa6d0ca2024-10-11 02:59:03 -070092 "//third_party/protobuf:bzl_library.patch",
Xdng Yngfb84c012024-02-13 13:39:23 -080093 ],
94 outs = ["MODULE.bazel.lock.dist"],
Googlera3f778c2024-02-14 10:45:30 -080095 cmd = " && ".join([
96 "ROOT=$$PWD",
97 "TMPDIR=$$(mktemp -d)",
98 "trap 'rm -rf $$TMPDIR' EXIT",
99 "mkdir -p $$TMPDIR/workspace",
100 "touch $$TMPDIR/workspace/BUILD.bazel",
101 "for i in $(SRCS); do dir=$$TMPDIR/workspace/$$(dirname $$i); mkdir -p $$dir; cp $$i $$dir; done",
102 "cd $$TMPDIR/workspace",
103 # Instead of `bazel mod deps`, we run a simpler command like `bazel query :all` here
104 # so that we only trigger module resolution, not extension eval.
105 # Also use `--batch` so that Bazel doesn't keep a server process alive.
Googler702118b2024-02-29 07:31:14 -0800106 "$$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 -0800107 "mv MODULE.bazel.lock $$ROOT/$@",
108 ]),
Xdng Yngfb84c012024-02-13 13:39:23 -0800109 tags = ["requires-network"],
110 tools = ["//src:bazel"],
111)
112
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800113pkg_tar(
114 name = "bootstrap-jars",
115 srcs = [
Xdng Yngc46b9ce2024-10-01 14:21:54 -0700116 "//third_party/googleapis:dist_jars",
117 "//third_party/grpc-java:grpc_jars",
Googler401ed582024-10-02 05:55:37 -0700118 "@protobuf//:protobuf_java",
119 "@protobuf//:protobuf_java_util",
120 "@protobuf//:protobuf_javalite",
Alessandro Patti6da80862021-11-11 22:49:37 -0800121 "@zstd-jni//:zstd-jni",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800122 ],
Tony Aiuto99079b32021-04-06 06:41:17 -0700123 package_dir = "derived/jars",
Googler164500d2024-05-03 01:41:31 -0700124 remap_paths = {
125 "external/": "",
126 "../": "",
127 },
128 strip_prefix = ".",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800129 # Public but bazel-only visibility.
130 visibility = ["//:__subpackages__"],
131)
132
Yun Peng37b3a092020-05-25 06:54:48 -0700133distrib_jar_filegroup(
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800134 name = "bootstrap-derived-java-jars",
135 srcs = glob(
136 ["derived/jars/**/*.jar"],
137 allow_empty = True,
138 ),
Yun Peng37b3a092020-05-25 06:54:48 -0700139 enable_distributions = ["debian"],
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800140 visibility = ["//:__subpackages__"],
141)
142
Yun Penga50635d2016-07-26 13:29:03 +0000143filegroup(
Jakob Buchgraber6073f1d2017-06-06 11:58:26 -0400144 name = "bootstrap-derived-java-srcs",
Laurent Le Brun6fbfe5c2019-07-05 03:10:52 -0700145 srcs = glob(
146 ["derived/**/*.java"],
147 allow_empty = True,
148 ),
Jakob Buchgraber6073f1d2017-06-06 11:58:26 -0400149 visibility = ["//:__subpackages__"],
150)
151
brandjon708e1ce2020-12-15 14:51:06 -0800152# Additional generated files that are not Java sources (which could otherwise
153# be included in //src:derived_java_sources).
154filegroup(
155 name = "generated_resources",
Tony Aiuto3b2d3102021-01-07 03:40:14 -0800156 srcs = [
157 "//src/main/java/com/google/devtools/build/lib/bazel/rules:builtins_bzl.zip",
aiutobbeb1da2021-01-15 06:50:56 -0800158 "//src/main/java/com/google/devtools/build/lib/bazel/rules:coverage.WORKSPACE",
Yun Peng75066902024-09-27 05:59:50 -0700159 "//src/main/java/com/google/devtools/build/lib/bazel/rules:rules_suffix.WORKSPACE",
Tony Aiuto3b2d3102021-01-07 03:40:14 -0800160 "//src/main/java/com/google/devtools/build/lib/bazel/rules/cpp:cc_configure.WORKSPACE",
161 ],
brandjon708e1ce2020-12-15 14:51:06 -0800162)
163
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000164pkg_tar(
165 name = "bazel-srcs",
brandjon708e1ce2020-12-15 14:51:06 -0800166 srcs = [
167 ":generated_resources",
168 ":srcs",
169 ],
Tony Aiuto99079b32021-04-06 06:41:17 -0700170 # TODO(aiuto): Replace with pkg_filegroup when that is available.
John Cater2f838922018-11-12 08:19:03 -0800171 remap_paths = {
Xdng Yngfb84c012024-02-13 13:39:23 -0800172 "MODULE.bazel.lock.dist": "MODULE.bazel.lock",
John Cater2f838922018-11-12 08:19:03 -0800173 },
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000174 strip_prefix = ".",
175 # Public but bazel-only visibility.
176 visibility = ["//:__subpackages__"],
177)
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000178
hlopkoaaf64572019-06-14 02:33:56 -0700179pkg_tar(
180 name = "platforms-srcs",
181 srcs = ["@platforms//:srcs"],
Googler164500d2024-05-03 01:41:31 -0700182 remap_paths = {
183 "external/": "",
184 "../": "",
185 },
186 strip_prefix = ".",
hlopkoaaf64572019-06-14 02:33:56 -0700187 visibility = ["//:__subpackages__"],
188)
189
Yun Peng136dae12023-09-08 12:39:10 -0700190write_file(
191 name = "gen_maven_repo_name",
192 out = "MAVEN_CANONICAL_REPO_NAME",
Fabian Meumertzheim2758f552024-06-12 03:33:27 -0700193 content = [get_canonical_repo_name("@maven")],
Yun Peng136dae12023-09-08 12:39:10 -0700194)
195
Yun Peng3d7937e2023-01-10 06:43:02 -0800196# The @maven repository is created by maven_install from rules_jvm_external.
197# `@maven//:srcs` contains all jar files downloaded and BUILD files created by maven_install.
198pkg_tar(
199 name = "maven-srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700200 srcs = ["@maven//:srcs"] + ["MAVEN_CANONICAL_REPO_NAME"],
201 package_dir = "derived/maven",
Googler164500d2024-05-03 01:41:31 -0700202 remap_paths = {
Xdng Yng24fcc3e2024-08-29 00:45:43 -0700203 "external/" + get_canonical_repo_name("@maven") + "/": "",
204 "../" + get_canonical_repo_name("@maven") + "/": "",
Googler164500d2024-05-03 01:41:31 -0700205 },
206 strip_prefix = ".",
Yun Peng3d7937e2023-01-10 06:43:02 -0800207 visibility = ["//:__subpackages__"],
208)
209
Tony Aiuto05c70d92023-06-30 13:11:58 -0700210exports_files(
211 ["maven_install.json"],
212 visibility = ["//tools/compliance:__pkg__"],
213)
214
László Csomor0783b9e2017-08-11 10:28:36 +0200215py_binary(
216 name = "combine_distfiles",
217 srcs = ["combine_distfiles.py"],
218 visibility = ["//visibility:private"],
219 deps = ["//src:create_embedded_tools_lib"],
220)
221
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000222genrule(
223 name = "bazel-distfile",
224 srcs = [
225 ":bazel-srcs",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800226 ":bootstrap-jars",
Yun Peng3d7937e2023-01-10 06:43:02 -0800227 ":maven-srcs",
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000228 "//src:derived_java_srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700229 "@bootstrap_repo_cache//:archives.tar",
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000230 ],
231 outs = ["bazel-distfile.zip"],
László Csomor0783b9e2017-08-11 10:28:36 +0200232 cmd = "$(location :combine_distfiles) $@ $(SRCS)",
233 tools = [":combine_distfiles"],
Klaus Aehlig279a0612016-11-11 09:51:44 +0000234 # Public but bazel-only visibility.
235 visibility = ["//:__subpackages__"],
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000236)
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000237
238genrule(
239 name = "bazel-distfile-tar",
240 srcs = [
241 ":bazel-srcs",
Yannic Bonenbergerd5d39442020-02-04 10:01:52 -0800242 ":bootstrap-jars",
hlopkoaaf64572019-06-14 02:33:56 -0700243 ":platforms-srcs",
Yun Peng3d7937e2023-01-10 06:43:02 -0800244 ":maven-srcs",
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000245 "//src:derived_java_srcs",
Yun Peng136dae12023-09-08 12:39:10 -0700246 "@bootstrap_repo_cache//:archives.tar",
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000247 ],
248 outs = ["bazel-distfile.tar"],
László Csomor0783b9e2017-08-11 10:28:36 +0200249 cmd = "$(location :combine_distfiles_to_tar.sh) $@ $(SRCS)",
250 tools = ["combine_distfiles_to_tar.sh"],
Klaus Aehlig52b03d12016-11-24 15:16:01 +0000251 # Public but bazel-only visibility.
252 visibility = ["//:__subpackages__"],
253)
Googlercc858622017-07-25 21:03:05 +0200254
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700255constraint_setting(name = "machine_size")
256
257# A machine with "high cpu count".
258constraint_value(
259 name = "highcpu_machine",
260 constraint_setting = ":machine_size",
261 visibility = ["//visibility:public"],
262)
263
philwo3a3a37a2019-02-05 07:33:47 -0800264platform(
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700265 name = "default_host_platform",
266 constraint_values = [
267 ":highcpu_machine",
268 ],
Googler74c8ca42024-03-29 12:48:51 -0700269 parents = ["@platforms//host"],
Jakob Buchgraber593c5302019-04-16 10:12:20 -0700270)
271
Googler138f06f2023-08-10 01:53:06 -0700272platform(
273 name = "windows_arm64",
274 constraint_values = [
275 "@platforms//os:windows",
276 "@platforms//cpu:arm64",
277 ],
278)
279
Googler40824e12024-03-11 02:38:48 -0700280REMOTE_PLATFORMS = ("rbe_ubuntu2004",)
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700281
282[
283 platform(
284 name = platform_name + "_platform",
Chi Wang26b94ff2021-09-28 23:42:26 -0700285 exec_properties = {
286 "dockerNetwork": "standard",
287 "dockerPrivileged": "true",
Tiago Quelhas0b914c62022-05-06 08:02:37 -0700288 "Pool": "default",
Chi Wang26b94ff2021-09-28 23:42:26 -0700289 },
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700290 parents = ["@" + platform_name + "//config:platform"],
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700291 )
292 for platform_name in REMOTE_PLATFORMS
293]
294
295[
296 # The highcpu RBE platform where heavy actions run on. In order to
297 # use this platform add the highcpu_machine constraint to your target.
298 platform(
299 name = platform_name + "_highcpu_platform",
300 constraint_values = [
301 "//:highcpu_machine",
302 ],
Chi Wang26b94ff2021-09-28 23:42:26 -0700303 exec_properties = {
Tiago Quelhas0b914c62022-05-06 08:02:37 -0700304 "Pool": "highcpu",
Chi Wang26b94ff2021-09-28 23:42:26 -0700305 },
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700306 parents = ["//:" + platform_name + "_platform"],
Jakob Buchgraber60df9052019-07-11 06:08:00 -0700307 )
308 for platform_name in REMOTE_PLATFORMS
309]