blob: 9efefacc31463db10d2f91a51a514cc5be4c3e0b [file] [log] [blame]
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +01001# Packaging
2
Laszlo Csomor3e023182019-08-01 05:05:09 -07003load("//tools/python:private/defs.bzl", "py_binary", "py_library")
Philipp Wollermann4c558982017-07-27 18:01:12 +02004load(":embedded_tools.bzl", "srcsfile")
Laszlo Csomord784b5f2018-06-20 02:06:58 -07005load(":rule_size_test.bzl", "rule_size_test")
Ivo Listc0809f72020-12-04 06:21:44 -08006load("//src:release_archive.bzl", "release_archive")
Philipp Wollermann4c558982017-07-27 18:01:12 +02007
Tobias Werth218e8f62018-12-13 04:44:35 -08008exports_files(["jdeps_modules.golden"])
9
Benjamin Peterson9eb19a62020-02-14 09:22:22 -080010md5_cmd = "set -e -o pipefail && %s $(SRCS) | %s | %s > $@"
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010011
Lukacs Berkieb851fe2015-10-19 10:52:31 +000012[genrule(
13 name = "install_base_key-file" + suffix,
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010014 srcs = [
pcloudy9e2b3ca2021-04-21 04:05:29 -070015 # Ensure we haven't forgotten any package-zip items,
16 # otherwise bazel won't correctly reextract modified files.
kkress73dcff32020-04-06 11:14:48 -070017 "//src/main/java/com/google/devtools/build/lib/bazel:BazelServer_deploy.jar",
adonovan450c7ad2020-09-14 13:00:21 -070018 "//src/main/java/net/starlark/java/eval:cpu_profiler",
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010019 "//src/main/cpp:client",
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010020 "//src/main/tools:build-runfiles",
21 "//src/main/tools:process-wrapper",
Philipp Wollermann278814b2016-07-15 14:41:54 +000022 "//src/main/tools:linux-sandbox",
Chris Parsons5eb86fe2016-07-21 15:24:55 +000023 "//tools/osx:xcode-locator",
pcloudy9e2b3ca2021-04-21 04:05:29 -070024 ":platforms_archive",
25 ] + select({
26 "//src/conditions:windows": [],
27 "//conditions:default": [
28 "//src/main/tools:daemonize",
29 ],
30 }) + embedded_tools_target,
Lukacs Berkieb851fe2015-10-19 10:52:31 +000031 outs = ["install_base_key" + suffix],
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010032 cmd = select({
Benjamin Peterson9eb19a62020-02-14 09:22:22 -080033 "//src/conditions:darwin": md5_cmd % ("/sbin/md5", "/sbin/md5", "head -c 32"),
Benjamin Peterson9eb19a62020-02-14 09:22:22 -080034 "//src/conditions:freebsd": md5_cmd % ("/sbin/md5", "/sbin/md5", "head -c 32"),
35 # We avoid using the `head` tool's `-c` option, since it does not exist
36 # on OpenBSD.
37 "//src/conditions:openbsd": md5_cmd % ("/bin/md5", "/bin/md5", "dd bs=32 count=1"),
38 "//conditions:default": md5_cmd % ("md5sum", "md5sum", "head -c 32"),
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010039 }),
Philipp Wollermann4c558982017-07-27 18:01:12 +020040) for suffix, embedded_tools_target in {
Tobias Werth218e8f62018-12-13 04:44:35 -080041 "_jdk_allmodules": [":embedded_tools_jdk_allmodules"],
42 "_jdk_minimal": [":embedded_tools_jdk_minimal"],
Tobias Werth5d2d06c2019-01-18 05:17:26 -080043 "_dev_jdk": [":embedded_tools_dev_jdk"],
Liam Miller-Cushon7c49bd92018-06-18 09:29:52 -070044 "_nojdk": [":embedded_tools_nojdk"],
Lukacs Berkieb851fe2015-10-19 10:52:31 +000045 "_notools": [],
46}.items()]
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010047
Damien Martin-Guillerezb6afdbd2015-05-27 18:29:18 +000048# Try to grab the java version from the java_toolchain.
Damien Martin-Guillerez4bf2c1a2015-10-02 09:19:18 +000049# Unfortunately, we don't have access to the javac options
50# so we cannot get it from the command-line options.
Damien Martin-Guillerezb6afdbd2015-05-27 18:29:18 +000051genquery(
52 name = "java_toolchain_content",
dbabkin35df7152018-06-26 05:47:54 -070053 expression = "kind(java_toolchain, deps(@bazel_tools//tools/jdk:current_java_toolchain))",
Damien Martin-Guillerezb6afdbd2015-05-27 18:29:18 +000054 opts = ["--output=xml"],
dbabkin35df7152018-06-26 05:47:54 -070055 scope = ["@bazel_tools//tools/jdk:current_java_toolchain"],
Damien Martin-Guillerezb6afdbd2015-05-27 18:29:18 +000056)
57
László Csomor5f99fda2017-08-11 09:28:12 +020058py_library(
59 name = "create_embedded_tools_lib",
60 srcs = ["create_embedded_tools_lib.py"],
László Csomor0783b9e2017-08-11 10:28:36 +020061 visibility = ["//:__pkg__"],
László Csomor5f99fda2017-08-11 09:28:12 +020062)
63
Philipp Wollermann4c558982017-07-27 18:01:12 +020064py_binary(
65 name = "create_embedded_tools",
66 srcs = ["create_embedded_tools.py"],
László Csomor5f99fda2017-08-11 09:28:12 +020067 deps = [":create_embedded_tools_lib"],
Philipp Wollermann4c558982017-07-27 18:01:12 +020068)
69
brandjonde1babe2020-11-17 14:19:23 -080070# Script for turning builtins_bzl sources into a zip file for unioning into the
71# package zip / install base.
72sh_binary(
73 name = "zip_builtins",
74 srcs = ["zip_builtins.sh"],
75 visibility = ["//src/main/starlark/builtins_bzl:__pkg__"],
76)
77
iirinaf4604ba2019-01-16 02:38:07 -080078# The tools Bazel uses to compile Java.
79# TODO(#6316): Gradually remove the targets here.
80JAVA_TOOLS = [
iirinaf4604ba2019-01-16 02:38:07 -080081 "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper:srcs",
iirinaf4604ba2019-01-16 02:38:07 -080082 "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:embedded_tools",
iirinaebdbdcd2019-04-09 04:43:08 -070083]
iirinaf4604ba2019-01-16 02:38:07 -080084
Philipp Wollermann4c558982017-07-27 18:01:12 +020085# TODO(philwo): Clean this up, once a Bazel that can run py_binary and sh_binary
gregcead752cc2020-04-10 10:32:59 -070086# in Starlark rules on Windows has been released.
Philipp Wollermann4c558982017-07-27 18:01:12 +020087[filegroup(
88 name = "embedded_tools" + suffix + "_srcs",
iirinaf4604ba2019-01-16 02:38:07 -080089 srcs = JAVA_TOOLS + [
Tobias Werth218e8f62018-12-13 04:44:35 -080090 "BUILD.tools",
91 "//tools:embedded_tools_srcs",
92 "//third_party:gpl-srcs",
Tobias Werth9ef27942020-05-18 08:14:03 -070093 "//third_party/grpc:embedded_tools_srcs",
94 "//third_party/grpc/bazel:embedded_tools_srcs",
iirina2d446752019-03-15 09:00:35 -070095 "//third_party/ijar:embedded_zipper_sources",
96 "//third_party/ijar:zipper",
Tobias Werth218e8f62018-12-13 04:44:35 -080097 "//third_party/java/j2objc:embedded_tools_srcs",
laszlocsomord93a1462019-11-04 09:14:39 -080098 "//third_party/py/abseil:srcs",
Tobias Werth218e8f62018-12-13 04:44:35 -080099 "//third_party/py/concurrent:srcs",
Tobias Werth218e8f62018-12-13 04:44:35 -0800100 "//third_party/py/six:srcs",
101 "//src/conditions:embedded_tools",
Tobias Werth218e8f62018-12-13 04:44:35 -0800102 "//src/tools/android/java/com/google/devtools/build/android:embedded_tools",
103 "//src/tools/launcher:srcs",
Tobias Werth218e8f62018-12-13 04:44:35 -0800104 "//src/main/cpp/util:embedded_tools",
105 "//src/main/native:embedded_tools",
106 "//src/main/protobuf:srcs",
Tobias Werth218e8f62018-12-13 04:44:35 -0800107 "//third_party/def_parser:srcs",
Tobias Werth218e8f62018-12-13 04:44:35 -0800108 "//third_party/zlib:embedded_tools",
109 ] + select({
110 "//src/conditions:darwin": [
Keith Smiley67586a22021-06-08 10:43:24 -0700111 "//tools/osx:xcode_locator.m",
Tobias Werth218e8f62018-12-13 04:44:35 -0800112 ],
Keith Smiley67586a22021-06-08 10:43:24 -0700113 "//conditions:default": [],
Tobias Werth218e8f62018-12-13 04:44:35 -0800114 }) + select({
115 "//src/conditions:windows": [
116 "//src/tools/launcher:launcher",
117 "//third_party/def_parser:def_parser",
118 ],
119 "//conditions:default": [],
Tobias Werth218e8f62018-12-13 04:44:35 -0800120 }) +
121 jdk,
cushon72141a12018-06-11 08:30:15 -0700122 visibility = [
123 "//src/test:__subpackages__", # For integration tests
124 ],
Tobias Werth218e8f62018-12-13 04:44:35 -0800125) for suffix, jdk in {
Tobias Wertha87451a2019-01-29 07:03:58 -0800126 "_jdk_allmodules": [":embedded_jdk_allmodules_cached"],
Tobias Werthfbf8fb92019-01-09 11:22:11 -0800127 "_jdk_minimal": [":embedded_jdk_minimal_cached"],
Tobias Werth5d2d06c2019-01-18 05:17:26 -0800128 "_dev_jdk": [":embedded_jdk_minimal"],
Tobias Werth218e8f62018-12-13 04:44:35 -0800129 "_nojdk": [],
130}.items()]
cushon72141a12018-06-11 08:30:15 -0700131
Laszlo Csomord784b5f2018-06-20 02:06:58 -0700132rule_size_test(
133 name = "embedded_tools_size_test",
Tobias Werth218e8f62018-12-13 04:44:35 -0800134 src = ":embedded_tools_jdk_allmodules_srcs",
Laszlo Csomord784b5f2018-06-20 02:06:58 -0700135 # WARNING: Only adjust the number in `expect` if you are intentionally
136 # adding or removing embedded tools. Know that the more embedded tools there
137 # are in Bazel, the bigger the binary becomes and the slower Bazel starts.
Keith Smiley67586a22021-06-08 10:43:24 -0700138 expect = 465,
Laszlo Csomord784b5f2018-06-20 02:06:58 -0700139 margin = 5, # percentage
140)
141
cushon72141a12018-06-11 08:30:15 -0700142filegroup(
Tobias Wertha87451a2019-01-29 07:03:58 -0800143 name = "embedded_jdk_allmodules_cached",
cushon72141a12018-06-11 08:30:15 -0700144 srcs = select({
Thi Doanb39a51c2020-12-07 11:27:56 -0800145 "//src/conditions:darwin_x86_64": [
146 "@openjdk_macos_x86_64//file",
Philipp Wollermann95048272017-03-17 15:11:58 +0000147 ],
Yun Peng8c7e11a2021-01-27 03:23:12 -0800148 "//src/conditions:darwin_arm64": [
149 "@openjdk_macos_aarch64//file",
150 ],
tomlu1a483d42017-11-30 15:08:40 -0800151 "//src/conditions:windows": [
pcloudy05c20aa2017-06-29 11:38:30 +0200152 "@openjdk_win//file",
153 ],
Arielle Albonfa7e49f2018-07-31 00:57:54 -0700154 "//src/conditions:linux_aarch64": [
155 "@openjdk_linux_aarch64//file",
156 ],
Philipp Wollermann95048272017-03-17 15:11:58 +0000157 "//conditions:default": [
158 "@openjdk_linux//file",
159 ],
cushon72141a12018-06-11 08:30:15 -0700160 }),
161 visibility = ["//src/test/shell/bazel:__pkg__"],
162)
Damien Martin-Guillerez12997672015-09-03 21:54:08 +0000163
Tobias Werth218e8f62018-12-13 04:44:35 -0800164filegroup(
Tobias Werthfbf8fb92019-01-09 11:22:11 -0800165 name = "embedded_jdk_minimal_cached",
166 srcs = select({
Thi Doanb39a51c2020-12-07 11:27:56 -0800167 "//src/conditions:darwin_x86_64": [
168 "@openjdk_macos_x86_64_minimal//file",
Tobias Werthfbf8fb92019-01-09 11:22:11 -0800169 ],
Yun Peng8c7e11a2021-01-27 03:23:12 -0800170 "//src/conditions:darwin_arm64": [
171 "@openjdk_macos_aarch64_minimal//file",
172 ],
Tobias Werthfbf8fb92019-01-09 11:22:11 -0800173 "//src/conditions:windows": [
174 "@openjdk_win_minimal//file",
175 ],
philwo9f7fe692019-06-27 06:53:12 -0700176 "//src/conditions:linux_aarch64": [
177 "@openjdk_linux_aarch64_minimal//file",
178 ],
Tobias Werthfbf8fb92019-01-09 11:22:11 -0800179 "//conditions:default": [
180 "@openjdk_linux_minimal//file",
181 ],
182 }),
183 visibility = ["//src/test/shell/bazel:__pkg__"],
184)
185
186filegroup(
Tobias Werth218e8f62018-12-13 04:44:35 -0800187 name = "embedded_jdk_vanilla",
188 srcs = select({
Thi Doanb39a51c2020-12-07 11:27:56 -0800189 "//src/conditions:darwin_x86_64": [
190 "@openjdk_macos_x86_64_vanilla//file",
Tobias Werth218e8f62018-12-13 04:44:35 -0800191 ],
Yun Peng8c7e11a2021-01-27 03:23:12 -0800192 "//src/conditions:darwin_arm64": [
193 "@openjdk_macos_aarch64_vanilla//file",
194 ],
Tobias Werth218e8f62018-12-13 04:44:35 -0800195 "//src/conditions:windows": [
196 "@openjdk_win_vanilla//file",
197 ],
198 "//src/conditions:linux_aarch64": [
199 "@openjdk_linux_aarch64_vanilla//file",
200 ],
Jason Furmanek04e073e2020-05-28 05:48:09 -0700201 "//src/conditions:linux_ppc64le": [
202 "@openjdk_linux_ppc64le_vanilla//file",
203 ],
Ruixin Baoe14a6f22020-08-21 06:17:24 -0700204 "//src/conditions:linux_s390x": [
205 "@openjdk_linux_s390x_vanilla//file",
206 ],
Tobias Werth218e8f62018-12-13 04:44:35 -0800207 "//conditions:default": [
208 "@openjdk_linux_vanilla//file",
209 ],
210 }),
211 visibility = ["//src/test/shell/bazel:__pkg__"],
212)
213
214sh_binary(
215 name = "minimize_jdk",
216 srcs = ["minimize_jdk.sh"],
217)
218
twerth683922c2018-12-20 05:12:08 -0800219filegroup(
Tobias Werth218e8f62018-12-13 04:44:35 -0800220 name = "embedded_jdk_minimal",
twerth683922c2018-12-20 05:12:08 -0800221 srcs = select({
222 "//src/conditions:windows": [
223 ":embedded_jdk_minimal.zip",
224 ],
225 "//conditions:default": [
226 ":embedded_jdk_minimal.tar.gz",
227 ],
228 }),
229)
230
Tobias Wertha87451a2019-01-29 07:03:58 -0800231filegroup(
232 name = "embedded_jdk_allmodules",
233 srcs = select({
234 "//src/conditions:windows": [
235 ":embedded_jdk_allmodules.zip",
236 ],
237 "//conditions:default": [
238 ":embedded_jdk_allmodules.tar.gz",
239 ],
240 }),
Tobias Werth144912e2019-02-01 10:40:20 -0800241 visibility = ["//src/test/shell/bazel:__pkg__"],
Tobias Wertha87451a2019-01-29 07:03:58 -0800242)
243
twerth683922c2018-12-20 05:12:08 -0800244[genrule(
245 name = "embedded_jdk_minimal" + suffix,
Tobias Werth218e8f62018-12-13 04:44:35 -0800246 srcs = [
247 ":embedded_jdk_vanilla",
248 ":minimize_jdk.sh",
249 ":jdeps_modules.golden",
250 ],
twerth683922c2018-12-20 05:12:08 -0800251 outs = ["minimal_jdk" + suffix],
Tobias Werth218e8f62018-12-13 04:44:35 -0800252 cmd = "$(location :minimize_jdk.sh) $(location :embedded_jdk_vanilla) $(location :jdeps_modules.golden) $(OUTS)",
253 visibility = ["//src/test/shell/bazel:__pkg__"],
twerth683922c2018-12-20 05:12:08 -0800254) for suffix in [
255 ".zip",
256 ".tar.gz",
257]]
Tobias Werth218e8f62018-12-13 04:44:35 -0800258
Tobias Wertha87451a2019-01-29 07:03:58 -0800259[genrule(
260 name = "embedded_jdk_allmodules" + suffix,
261 srcs = [
262 ":embedded_jdk_vanilla",
263 ":minimize_jdk.sh",
264 ":jdeps_modules.golden",
265 ],
266 outs = ["allmodules_jdk" + suffix],
267 cmd = "$(location :minimize_jdk.sh) --allmodules $(location :embedded_jdk_vanilla) $(location :jdeps_modules.golden) $(OUTS)",
268 visibility = ["//src/test/shell/bazel:__pkg__"],
269) for suffix in [
270 ".zip",
271 ".tar.gz",
272]]
273
Philipp Wollermann4c558982017-07-27 18:01:12 +0200274[srcsfile(
275 name = "embedded_tools" + suffix + "_params",
276 srcs = [":embedded_tools" + suffix + "_srcs"],
277 out = "embedded_tools" + suffix + ".params",
278) for suffix in [
Tobias Werth218e8f62018-12-13 04:44:35 -0800279 "_jdk_allmodules",
280 "_jdk_minimal",
Tobias Werth5d2d06c2019-01-18 05:17:26 -0800281 "_dev_jdk",
Liam Miller-Cushon7c49bd92018-06-18 09:29:52 -0700282 "_nojdk",
Philipp Wollermann4c558982017-07-27 18:01:12 +0200283]]
284
Tobias Werth218e8f62018-12-13 04:44:35 -0800285[genrule(
286 name = "embedded_tools" + suffix,
Philipp Wollermann4c558982017-07-27 18:01:12 +0200287 srcs = [
Tobias Werth218e8f62018-12-13 04:44:35 -0800288 ":embedded_tools" + suffix + "_params",
289 ":embedded_tools" + suffix + "_srcs",
Philipp Wollermann4c558982017-07-27 18:01:12 +0200290 ],
Tobias Werth218e8f62018-12-13 04:44:35 -0800291 outs = ["embedded_tools" + suffix + ".zip"],
292 cmd = "$(location :create_embedded_tools) \"$@\" $(location :embedded_tools" + suffix + "_params)",
Philipp Wollermann4c558982017-07-27 18:01:12 +0200293 tools = [":create_embedded_tools"],
Tobias Werth218e8f62018-12-13 04:44:35 -0800294) for suffix in [
295 "_jdk_allmodules",
296 "_jdk_minimal",
Tobias Werth5d2d06c2019-01-18 05:17:26 -0800297 "_dev_jdk",
Tobias Werth218e8f62018-12-13 04:44:35 -0800298 "_nojdk",
299]]
Philipp Wollermann4c558982017-07-27 18:01:12 +0200300
Lukacs Berkieb851fe2015-10-19 10:52:31 +0000301[genrule(
302 name = "package-zip" + suffix,
brandjon708e1ce2020-12-15 14:51:06 -0800303 # This script assumes the following arg order:
304 # 1) embedded tools zip (if it exists)
305 # 2) the deploy jar
306 # 3) the install base key
307 # 4) the platforms archive
308 # 5) everything else to be bundled
pcloudy9e2b3ca2021-04-21 04:05:29 -0700309 # Ensure we haven't forgotten to add all package-zip items as dependencies
310 # of :install_base_key-file, otherwise bazel won't correctly reextract
311 # modified files.
Philipp Wollermann95048272017-03-17 15:11:58 +0000312 srcs = ([":embedded_tools" + suffix + ".zip"] if embed else []) + [
kkress73dcff32020-04-06 11:14:48 -0700313 "//src/main/java/com/google/devtools/build/lib/bazel:BazelServer_deploy.jar",
Lukacs Berkieb851fe2015-10-19 10:52:31 +0000314 "install_base_key" + suffix,
hlopkoaaf64572019-06-14 02:33:56 -0700315 ":platforms_archive",
brandjonde1babe2020-11-17 14:19:23 -0800316 # Non-ordered items follow:
adonovan450c7ad2020-09-14 13:00:21 -0700317 "//src/main/java/net/starlark/java/eval:cpu_profiler",
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100318 "//src/main/tools:build-runfiles",
319 "//src/main/tools:process-wrapper",
Philipp Wollermann278814b2016-07-15 14:41:54 +0000320 "//src/main/tools:linux-sandbox",
Chris Parsons5eb86fe2016-07-21 15:24:55 +0000321 "//tools/osx:xcode-locator",
jmmv18a0e232019-02-21 07:34:02 -0800322 ] + select({
323 "//src/conditions:windows": [],
324 "//conditions:default": [
325 "//src/main/tools:daemonize",
326 ],
327 }),
Lukacs Berkieb851fe2015-10-19 10:52:31 +0000328 outs = ["package" + suffix + ".zip"],
aldersondrived6145a02020-01-21 08:11:48 -0800329 cmd = "$(location :package_bazel_on_host_platform) $@ " + ("" if embed else "''") + " $(SRCS)",
330 tools = [":package_bazel_on_host_platform"],
Lukacs Berkieb851fe2015-10-19 10:52:31 +0000331) for suffix, embed in [
Tobias Werth218e8f62018-12-13 04:44:35 -0800332 ("_jdk_allmodules", True),
333 ("_jdk_minimal", True),
Tobias Werth5d2d06c2019-01-18 05:17:26 -0800334 ("_dev_jdk", True),
Damien Martin-Guillerez04d46ab2016-04-13 19:27:56 +0000335 ("_notools", False),
Liam Miller-Cushon7c49bd92018-06-18 09:29:52 -0700336 ("_nojdk", True),
Lukacs Berkieb851fe2015-10-19 10:52:31 +0000337]]
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100338
hlopkoaaf64572019-06-14 02:33:56 -0700339genrule(
aldersondrived6145a02020-01-21 08:11:48 -0800340 name = "package_bazel_on_host_platform",
341 srcs = ["package-bazel.sh"],
342 outs = ["package-bazel-on-host-platform.sh"],
343 cmd = select({
344 "//src/conditions:openbsd": "cat $(SRCS) | sed -e 's@#!/bin/bash@#!/usr/local/bin/bash@' > $@",
345 "//conditions:default": "cp $(SRCS) $@",
346 }),
347)
348
349genrule(
hlopkoaaf64572019-06-14 02:33:56 -0700350 name = "platforms_archive",
351 srcs = ["@platforms//:srcs"],
352 outs = ["platforms.zip"],
353 # Removing the WORKSPACE file since local_repository creates it no matter what and leaving
354 # it there would make the zip nondeterministic.
355 cmd = "zip -qX $@ $$(echo $(SRCS) | xargs -n 1 | grep -v '.*/WORKSPACE$$' | sort | xargs)",
356)
357
Lukacs Berkieb851fe2015-10-19 10:52:31 +0000358[genrule(
359 name = "bazel-bin" + suffix,
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100360 srcs = [
361 "//src/main/cpp:client",
Jakob Buchgraber92931bd2019-07-18 07:38:59 -0700362 "package-zip" + jdk,
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100363 ],
Lukacs Berkieb851fe2015-10-19 10:52:31 +0000364 outs = ["bazel" + suffix],
Yun Peng6ffb8e42016-04-14 16:55:02 +0000365 # In msys, a file path without .exe suffix(say foo), refers to a file with .exe
366 # suffix(say foo.exe), if foo.exe exists and foo doesn't. So, on windows, we
367 # need to remove bazel.exe first, so that cat to bazel won't fail.
Googler48648502021-01-20 06:53:05 -0800368 cmd = "rm -f $@; cat $(location //src/main/cpp:client) $(location :package-zip" + jdk + ") > $@ && zip -qA $@ && chmod a+x $@",
Tobias Werth218e8f62018-12-13 04:44:35 -0800369 executable = 1,
370 output_to_bindir = 1,
371 visibility = [
372 "//scripts:__pkg__", # For bash completion generation
373 "//scripts/packages:__pkg__", # For installer generation
374 "//src/java:__subpackages__", # For command line reference generation
375 "//src/test:__subpackages__", # For integration tests
376 ],
Tobias Werthfbf8fb92019-01-09 11:22:11 -0800377) for suffix, jdk in [
378 ("-dev", "_jdk_allmodules"),
379 ("", "_jdk_minimal"),
Jakob Buchgraber92931bd2019-07-18 07:38:59 -0700380 ("_jdk_allmodules", "_jdk_allmodules"),
381 ("_jdk_minimal", "_jdk_minimal"),
382 ("_dev_jdk", "_dev_jdk"),
383 ("_notools", "_notools"),
384 ("_nojdk", "_nojdk"),
Tobias Werthfbf8fb92019-01-09 11:22:11 -0800385]]
Tobias Werth218e8f62018-12-13 04:44:35 -0800386
Dmitry Lomov9d40a602016-02-15 16:15:03 +0000387# Build an executable named `bazel.exe`.
388# Works on all platforms but only makes sense on Windows.
389# Workaround for non-configurability of genrule's `outs` attribute.
390[genrule(
391 name = "bazel-bin" + suffix + ".exe",
392 srcs = [":bazel-bin" + suffix],
393 outs = ["bazel" + suffix + ".exe"],
394 cmd = "cp $(location :bazel-bin" + suffix + ") $@",
395 executable = 1,
396 output_to_bindir = 1,
397 visibility = [
398 "//scripts:__pkg__", # For bash completion generation
399 "//scripts/packages:__pkg__", # For installer generation
400 "//src/test:__subpackages__", # For integration tests
401 ],
402) for suffix in [
403 "",
Tobias Werthe7438ae2019-07-02 08:17:44 -0700404 "-dev",
Dmitry Lomov9d40a602016-02-15 16:15:03 +0000405 "_notools",
Liam Miller-Cushon7c49bd92018-06-18 09:29:52 -0700406 "_nojdk",
Dmitry Lomov9d40a602016-02-15 16:15:03 +0000407]]
408
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000409filegroup(
410 name = "srcs",
411 srcs = glob(["**"]) + [
tomlu1a483d42017-11-30 15:08:40 -0800412 "//src/conditions:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000413 "//src/java_tools/buildjar:srcs",
Benjamin Peterson425f9422018-02-09 14:05:17 -0800414 "//src/java_tools/import_deps_checker:srcs",
ulfjack26ad43d2017-08-28 12:30:44 +0200415 "//src/java_tools/junitrunner:srcs",
dorranh210ae642021-01-14 02:14:31 -0800416 "//src/java_tools/junitrunner/javatests/com/google/testing/coverage:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000417 "//src/java_tools/singlejar:srcs",
418 "//src/main/cpp:srcs",
Laszlo Csomor3e023182019-08-01 05:05:09 -0700419 "//src/main/res:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000420 "//src/main/java/com/google/devtools/build/docgen:srcs",
fellyc5c078c2019-07-31 12:05:24 -0700421 "//src/main/java/com/google/devtools/build/lib/actionsketch:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000422 "//src/main/java/com/google/devtools/build/lib:srcs",
philwo45743d02019-06-03 06:13:30 -0700423 "//src/main/java/com/google/devtools/build/lib/includescanning:srcs",
steinmanacf55d82019-05-21 09:49:58 -0700424 "//src/main/java/com/google/devtools/build/lib/network:srcs",
philwo62dd1742019-06-04 05:27:37 -0700425 "//src/main/java/com/google/devtools/build/lib/outputfilter:srcs",
cparsons5d85e752018-06-26 13:47:28 -0700426 "//src/main/java/com/google/devtools/build/skydoc:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000427 "//src/main/java/com/google/devtools/build/skyframe:srcs",
428 "//src/main/java/com/google/devtools/common/options:srcs",
adonovancb5dc082020-05-18 12:02:00 -0700429 "//src/main/java/net/starlark/java/cmd:srcs",
430 "//src/main/java/net/starlark/java/spelling:srcs",
adonovan6e47a402020-10-19 15:16:15 -0700431 "//src/main/java/net/starlark/java/lib/json:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000432 "//src/main/native:srcs",
433 "//src/main/protobuf:srcs",
brandjonde1babe2020-11-17 14:19:23 -0800434 "//src/main/starlark/builtins_bzl:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000435 "//src/main/tools:srcs",
Damien Martin-Guillerez7d265e02016-07-01 13:33:48 +0000436 "//src/test/cpp:srcs",
Googler3e830922017-03-17 17:39:00 +0000437 "//src/test/gen:srcs",
Laszlo Csomor3e023182019-08-01 05:05:09 -0700438 "//src/test/res:srcs",
Laszlo Csomordcc80fb2019-08-09 05:05:21 -0700439 "//src/test/native/windows:srcs",
Damien Martin-Guillerez7d265e02016-07-01 13:33:48 +0000440 "//src/test/java/com/google/devtools/build/android:srcs",
441 "//src/test/java/com/google/devtools/build/docgen:srcs",
442 "//src/test/java/com/google/devtools/build/lib:srcs",
ruperts9f959c52018-01-04 11:54:02 -0800443 "//src/test/java/com/google/devtools/build/lib/shell:srcs",
cparsons5d85e752018-06-26 13:47:28 -0700444 "//src/test/java/com/google/devtools/build/skydoc:srcs",
Damien Martin-Guillerez7d265e02016-07-01 13:33:48 +0000445 "//src/test/java/com/google/devtools/build/skyframe:srcs",
446 "//src/test/java/com/google/devtools/common/options:srcs",
adonovan53e22d92020-07-28 08:54:43 -0700447 "//src/test/java/net/starlark/java/eval:srcs",
adonovancb5dc082020-05-18 12:02:00 -0700448 "//src/test/java/net/starlark/java/spelling:srcs",
Laszlo Csomore78ad832017-06-09 10:45:27 -0400449 "//src/test/py/bazel:srcs",
Damien Martin-Guillerez7d265e02016-07-01 13:33:48 +0000450 "//src/test/shell:srcs",
ishikhman32268802019-04-25 03:47:24 -0700451 "//src/test/testdata/test_tls_certificate",
jmmvb07b7992020-05-18 09:24:11 -0700452 "//src/test/tools:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000453 "//src/tools/android/java/com/google/devtools/build/android:srcs",
olaolaa5e36ee2018-06-15 08:16:44 -0700454 "//src/tools/execlog:srcs",
Googler1950bf92018-08-28 15:40:05 -0700455 "//src/tools/workspacelog:srcs",
Yun Peng09dd8c02017-07-21 15:57:05 +0200456 "//src/tools/launcher:srcs",
gregce3ec8d812020-06-18 08:05:01 -0700457 "//src/tools/starlark/java/com/google/devtools/starlark/common:srcs",
Sasha Smundak06a12e52016-07-15 17:35:51 +0000458 "//src/tools/singlejar:srcs",
olaola2f3d7df2017-12-05 12:41:19 -0800459 "//src/tools/remote:srcs",
Chris Parsons5eb86fe2016-07-21 15:24:55 +0000460 "//tools/osx:srcs",
Damien Martin-Guillerezde54bca2016-02-29 10:49:43 +0000461 ],
462 visibility = ["//:__pkg__"],
463)
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000464
465genrule(
466 name = "derived_java_srcs",
467 srcs = [
468 "//src/main/protobuf:dist_jars",
469 "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:dist_jars",
Googler7e703ec2018-07-16 08:48:39 -0700470 "//src/main/java/com/google/devtools/build/lib/bazel/debug:dist_jars",
kkress9ed89e52020-08-13 11:21:55 -0700471 "//src/main/java/com/google/devtools/build/lib/packages/metrics:dist_jars",
Googler94bf0042020-03-05 09:02:03 -0800472 "//src/main/java/com/google/devtools/build/lib/skyframe/proto:dist_jars",
laurentlb6e87c952020-04-28 11:44:05 -0700473 "//src/main/java/com/google/devtools/build/lib/starlarkdebug/proto:dist_jars",
cparsons5ece6502019-04-17 10:19:41 -0700474 "//src/main/java/com/google/devtools/build/skydoc/rendering/proto:dist_jars",
janakr65970e52020-02-26 08:25:00 -0800475 "//src/main/java/com/google/devtools/build/skyframe:dist_jars",
Jakob Buchgraber55c5a602017-06-08 23:11:21 +0200476 "@googleapis//:dist_jars",
Ola Rozenfeld930119a2018-08-10 11:04:44 -0700477 "@remoteapis//:dist_jars",
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000478 ],
479 outs = ["derived_java_srcs.zip"],
Klaus Aehlig86c9d942017-06-30 13:41:19 +0200480 cmd = "$(location :combine_derived_java_srcs.sh) $(JAVABASE) $@ $(SRCS)",
cushon849df362018-05-14 01:51:45 -0700481 toolchains = ["@bazel_tools//tools/jdk:current_host_java_runtime"],
Klaus Aehlig4ca79d42016-10-22 07:59:41 +0000482 tools = ["combine_derived_java_srcs.sh"],
483 visibility = ["//:__pkg__"],
484)
L?szl? Csomor088f6112017-09-19 17:12:32 +0200485
tomlu1a483d42017-11-30 15:08:40 -0800486# config_setting alias left here because bazel-only third_party code is pointing to it
487alias(
488 name = "windows",
489 actual = "//src/conditions:windows",
490 visibility = ["//visibility:public"],
491)
iirina7aace9c2019-03-18 05:41:55 -0700492
493sh_binary(
494 name = "zip_files",
495 srcs = ["zip_files.sh"],
496 visibility = ["//visibility:public"],
497)
498
499sh_binary(
500 name = "merge_zip_files",
501 srcs = ["merge_zip_files.sh"],
502 visibility = ["//visibility:public"],
503)
iirina8df893a2019-03-25 09:34:51 -0700504
Ivo Listd10013d2020-11-25 14:41:16 -0800505# The java_tools release process produces following zip files:
506# - java_tools_dist.zip: all sources (Java and C++)
507# - java_tools.zip: platform independent part - Java classes (deploy jars) and C++ sources
508# - java_tools_prebuilt.zip: C++ binaries (for platforms: Linux, Darwin and Windows)
509#
510# The files are then used in Bazel as @remote_java_tools and @remote_java_tools_{platform}
511# repositories.
512# The zip files are not embedded or used in Bazel.
513
514# Following target build java_tools_dist.zip - the sources
515genrule(
516 name = "java_tools_dist",
517 srcs = [
518 "//src/java_tools/buildjar:srcs",
519 "//src/java_tools/junitrunner:srcs",
520 "//src/java_tools/singlejar:srcs",
521 "//src/tools/singlejar:embedded_java_tools",
522 "//third_party/checker_framework_dataflow:srcs",
523 "//third_party/checker_framework_javacutil:srcs",
524 "//third_party/ijar:transitive_sources",
525 "//third_party/java/jacoco:transitive_sources",
526 "//third_party/java/proguard:srcs",
527 "@java_tools_langtools_javac11//:srcs",
528 ],
529 outs = ["java_tools_dist.zip"],
530 cmd = "zip -qXr $@ $$(echo $(SRCS) | sort)",
531 output_to_bindir = 1,
532 visibility = ["//src/test/shell/bazel:__pkg__"],
533)
534
535# Following targets build java_tools.zip - platform independent part of java_tools
iirina93e80732019-04-16 02:07:40 -0700536JAVA_TOOLS_DEPLOY_JARS = [
537 "//src/java_tools/buildjar:JavaBuilder_deploy.jar",
538 "//src/java_tools/buildjar:VanillaJavaBuilder_deploy.jar",
539 "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/genclass:GenClass_deploy.jar",
iirina93e80732019-04-16 02:07:40 -0700540 "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:turbine_direct_binary_deploy.jar",
541 "//src/java_tools/junitrunner/java/com/google/testing/coverage:JacocoCoverage_jarjar_deploy.jar",
iirina93e80732019-04-16 02:07:40 -0700542 "//src/java_tools/junitrunner/java/com/google/testing/junit/runner:Runner_deploy.jar",
iirinaa6e92602019-05-13 06:20:12 -0700543]
iirina93e80732019-04-16 02:07:40 -0700544
Ivo Listc0809f72020-12-04 06:21:44 -0800545release_archive(
Ivo Listd10013d2020-11-25 14:41:16 -0800546 name = "jars_java_tools_zip",
547 srcs = JAVA_TOOLS_DEPLOY_JARS + [
548 "@java_tools_langtools_javac11//:jdk_compiler_jar",
549 "@java_tools_langtools_javac11//:java_compiler_jar",
550 "@java_tools_langtools_javac11//:javac_jar",
551 ],
Ivo Listc0809f72020-12-04 06:21:44 -0800552 package_dir = "java_tools",
Ivo Listd10013d2020-11-25 14:41:16 -0800553 visibility = ["//visibility:private"],
554)
iirina93e80732019-04-16 02:07:40 -0700555
Ivo Listc0809f72020-12-04 06:21:44 -0800556release_archive(
557 name = "java_tools_zip",
558 src_map = {
559 "//tools/jdk:BUILD.java_tools": "BUILD",
560 },
561 visibility = ["//src/test/shell/bazel:__pkg__"],
562 deps = [
563 ":jars_java_tools_zip",
Ivo Listd10013d2020-11-25 14:41:16 -0800564 "//src/tools/singlejar:singlejar_transitive_zip",
565 "//third_party/ijar:ijar_transitive_srcs_zip",
566 "//third_party/java/jacoco:jacoco_jars_zip",
567 "//third_party/java/proguard:proguard_zip",
568 ],
Ivo Listc0809f72020-12-04 06:21:44 -0800569)
570
571# Following target builds java_tools_prebuilt.zip part of java_tools
572release_archive(
573 name = "java_tools_prebuilt_zip",
574 src_map = {
575 "//tools/jdk:BUILD.java_tools_prebuilt": "BUILD",
576 },
Ivo Listd10013d2020-11-25 14:41:16 -0800577 visibility = ["//src/test/shell/bazel:__pkg__"],
Ivo Listc0809f72020-12-04 06:21:44 -0800578 deps = [
Ivo Listd10013d2020-11-25 14:41:16 -0800579 "//src/tools/singlejar:singlejar_deploy_zip",
580 "//third_party/ijar:ijar_deploy_zip",
581 ],
Ivo Listd10013d2020-11-25 14:41:16 -0800582)
583
584# Following targets used by the java_tools_binaries Buildkite pipeline to upload
585# the java_tools_*.zip to either tmp/sources or tmp/build directories in GCS.
586sh_binary(
587 name = "upload_java_tools_dist",
588 srcs = ["upload_java_tools.sh"],
589 args = [
590 "--java_tools_zip",
591 "src/java_tools_dist.zip",
592 "--gcs_java_tools_dir",
593 "tmp/sources",
594 ],
595 data = [":java_tools_dist"],
596 deps = ["@bazel_tools//tools/bash/runfiles"],
597)
598
599sh_binary(
600 name = "upload_java_tools",
601 srcs = ["upload_java_tools.sh"],
602 args = [
603 "--java_tools_zip",
604 "src/java_tools.zip",
605 "--gcs_java_tools_dir",
606 "tmp/build",
607 ],
608 data = [":java_tools_zip"],
609 deps = ["@bazel_tools//tools/bash/runfiles"],
610)
611
612sh_binary(
613 name = "upload_java_tools_prebuilt",
614 srcs = ["upload_java_tools.sh"],
615 args = [
616 "--java_tools_zip",
617 "src/java_tools_prebuilt.zip",
618 "--gcs_java_tools_dir",
619 "tmp/build",
620 "--platform",
621 ] + select({
622 "//src/conditions:darwin": ["darwin"],
623 "//src/conditions:windows": ["windows"],
624 "//src/conditions:linux": ["linux"],
625 "//conditions:default": ["unknown"],
626 }),
627 data = [":java_tools_prebuilt_zip"],
628 deps = ["@bazel_tools//tools/bash/runfiles"],
629)
iirina8df893a2019-03-25 09:34:51 -0700630
631# Part of the Java tools remote archive. Not embedded or used in Bazel.
Ivo Listc0809f72020-12-04 06:21:44 -0800632release_archive(
iirina8df893a2019-03-25 09:34:51 -0700633 name = "zlib_zip",
634 srcs = ["//third_party/zlib:embedded_tools"],
Ivo Listc0809f72020-12-04 06:21:44 -0800635 package_dir = "zlib",
iirinae4ac6162019-04-08 01:37:20 -0700636 visibility = [
637 "//src/tools/singlejar:__pkg__",
638 "//third_party/ijar:__pkg__",
639 ],
iirina8df893a2019-03-25 09:34:51 -0700640)
philwo17506af2020-01-28 04:20:39 -0800641
642filegroup(
643 name = "test_repos",
644 srcs = [
645 "@android_tools_for_testing//:WORKSPACE",
Yannic Bonenberger5e571d22020-02-13 07:29:58 -0800646 "@bazel_skylib//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800647 "@com_google_protobuf//:WORKSPACE",
Yun Peng8c7e11a2021-01-27 03:23:12 -0800648 "@openjdk11_darwin_aarch64_archive//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800649 "@openjdk11_darwin_archive//:WORKSPACE",
650 "@openjdk11_linux_archive//:WORKSPACE",
651 "@openjdk11_windows_archive//:WORKSPACE",
Yun Peng8c7e11a2021-01-27 03:23:12 -0800652 "@openjdk15_darwin_aarch64_archive//:WORKSPACE",
Jonathan Perry94505522020-10-07 12:45:34 -0700653 "@openjdk15_darwin_archive//:WORKSPACE",
654 "@openjdk15_linux_archive//:WORKSPACE",
655 "@openjdk15_windows_archive//:WORKSPACE",
David Ostrovskye2ed2fd2021-04-15 01:17:40 -0700656 "@openjdk16_darwin_aarch64_archive//:WORKSPACE",
657 "@openjdk16_darwin_archive//:WORKSPACE",
658 "@openjdk16_linux_archive//:WORKSPACE",
659 "@openjdk16_windows_archive//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800660 "@openjdk_linux_aarch64_minimal//file",
661 "@openjdk_linux_minimal//file",
Yun Peng8c7e11a2021-01-27 03:23:12 -0800662 "@openjdk_macos_aarch64_minimal//file",
Thi Doanb39a51c2020-12-07 11:27:56 -0800663 "@openjdk_macos_x86_64_minimal//file",
philwo17506af2020-01-28 04:20:39 -0800664 "@openjdk_win_minimal//file",
aiutobbeb1da2021-01-15 06:50:56 -0800665 "@remote_coverage_tools//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800666 "@remote_java_tools_darwin_for_testing//:WORKSPACE",
Ivo List62022712020-11-27 07:24:36 -0800667 "@remote_java_tools_for_testing//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800668 "@remote_java_tools_linux_for_testing//:WORKSPACE",
Ivo List62022712020-11-27 07:24:36 -0800669 "@remote_java_tools_test//:WORKSPACE",
670 "@remote_java_tools_test_darwin//:WORKSPACE",
671 "@remote_java_tools_test_linux//:WORKSPACE",
672 "@remote_java_tools_test_windows//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800673 "@remote_java_tools_windows_for_testing//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800674 "@remotejdk11_linux_aarch64_for_testing//:WORKSPACE",
675 "@remotejdk11_linux_for_testing//:WORKSPACE",
Jason Furmanek04e073e2020-05-28 05:48:09 -0700676 "@remotejdk11_linux_ppc64le_for_testing//:WORKSPACE",
Ruixin Baoe14a6f22020-08-21 06:17:24 -0700677 "@remotejdk11_linux_s390x_for_testing//:WORKSPACE",
Yun Peng8c7e11a2021-01-27 03:23:12 -0800678 "@remotejdk11_macos_aarch64_for_testing//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800679 "@remotejdk11_macos_for_testing//:WORKSPACE",
680 "@remotejdk11_win_for_testing//:WORKSPACE",
Jonathan Perry94505522020-10-07 12:45:34 -0700681 "@remotejdk15_linux_for_testing//:WORKSPACE",
Yun Peng8c7e11a2021-01-27 03:23:12 -0800682 "@remotejdk15_macos_aarch64_for_testing//:WORKSPACE",
Jonathan Perry94505522020-10-07 12:45:34 -0700683 "@remotejdk15_macos_for_testing//:WORKSPACE",
684 "@remotejdk15_win_for_testing//:WORKSPACE",
David Ostrovskye2ed2fd2021-04-15 01:17:40 -0700685 "@remotejdk16_linux_for_testing//:WORKSPACE",
686 "@remotejdk16_macos_aarch64_for_testing//:WORKSPACE",
687 "@remotejdk16_macos_for_testing//:WORKSPACE",
688 "@remotejdk16_win_for_testing//:WORKSPACE",
philwo17506af2020-01-28 04:20:39 -0800689 "@rules_cc//:WORKSPACE",
690 "@rules_java//:WORKSPACE",
691 "@rules_pkg//:WORKSPACE",
692 "@rules_proto//:WORKSPACE",
693 "@rules_python//:WORKSPACE",
694 ],
695)