• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1load("@rules_cc//cc:defs.bzl", "cc_library")
2load(
3    ":default_java_toolchain.bzl",
4    "DEFAULT_TOOLCHAIN_CONFIGURATION",
5    "PREBUILT_TOOLCHAIN_CONFIGURATION",
6    "bootclasspath",
7    "default_java_toolchain",
8    "java_runtime_files",
9)
10load(
11    ":java_toolchain_alias.bzl",
12    "java_host_runtime_alias",
13    "java_runtime_alias",
14    "java_runtime_version_alias",
15    "java_toolchain_alias",
16)
17
18package(default_visibility = ["//visibility:public"])
19
20licenses(["notice"])
21
22filegroup(
23    name = "srcs",
24    srcs = glob(["**"]),
25)
26
27filegroup(
28    name = "bzl_srcs",
29    srcs = glob(["*.bzl"]),
30)
31
32# Used to distinguish toolchains used for Java development, ie the JavaToolchainProvider.
33# TODO: migrate away from using @bazel_tools//tools/jdk:toolchain_type ?
34# toolchain_type(name = "toolchain_type")
35
36# Used to distinguish toolchains used for Java execution, ie the JavaRuntimeInfo.
37# TODO: migrate away from using @bazel_tools//tools/jdk:runtime_toolchain_type ?
38# toolchain_type(name = "runtime_toolchain_type")
39
40# Points to toolchain[":runtime_toolchain_type"] (was :legacy_current_java_runtime)
41java_runtime_alias(name = "current_java_runtime")
42
43# Host configuration of ":current_java_runtime"
44java_host_runtime_alias(name = "current_host_java_runtime")
45
46# Points to toolchain[":toolchain_type"] (was :legacy_current_java_toolchain)
47java_toolchain_alias(name = "current_java_toolchain")
48
49# These individual jni_* targets are exposed for legacy reasons.
50# Most users should depend on :jni.
51
52java_runtime_files(
53    name = "jni_header",
54    srcs = ["include/jni.h"],
55)
56
57java_runtime_files(
58    name = "jni_md_header-darwin",
59    srcs = ["include/darwin/jni_md.h"],
60)
61
62java_runtime_files(
63    name = "jni_md_header-linux",
64    srcs = ["include/linux/jni_md.h"],
65)
66
67java_runtime_files(
68    name = "jni_md_header-windows",
69    srcs = ["include/win32/jni_md.h"],
70)
71
72java_runtime_files(
73    name = "jni_md_header-freebsd",
74    srcs = ["include/freebsd/jni_md.h"],
75)
76
77java_runtime_files(
78    name = "jni_md_header-openbsd",
79    srcs = ["include/openbsd/jni_md.h"],
80)
81
82# The Java native interface. Depend on this package if you #include <jni.h>.
83#
84# See test_jni in third_party/bazel/src/test/shell/bazel/bazel_java_test.sh for
85# an example of using Bazel to build a Java program that calls a C function.
86#
87# TODO(ilist): use //src:condition:linux when released in Bazel
88cc_library(
89    name = "jni",
90    hdrs = [":jni_header"] + select({
91        "@bazel_tools//src/conditions:darwin": [":jni_md_header-darwin"],
92        "@bazel_tools//src/conditions:freebsd": [":jni_md_header-freebsd"],
93        "@bazel_tools//src/conditions:linux_aarch64": [":jni_md_header-linux"],
94        "@bazel_tools//src/conditions:linux_mips64": [":jni_md_header-linux"],
95        "@bazel_tools//src/conditions:linux_ppc64le": [":jni_md_header-linux"],
96        "@bazel_tools//src/conditions:linux_riscv64": [":jni_md_header-linux"],
97        "@bazel_tools//src/conditions:linux_s390x": [":jni_md_header-linux"],
98        "@bazel_tools//src/conditions:linux_x86_64": [":jni_md_header-linux"],
99        "@bazel_tools//src/conditions:openbsd": [":jni_md_header-openbsd"],
100        "@bazel_tools//src/conditions:windows": [":jni_md_header-windows"],
101        "//conditions:default": [],
102    }),
103    includes = ["include"] + select({
104        "@bazel_tools//src/conditions:darwin": ["include/darwin"],
105        "@bazel_tools//src/conditions:freebsd": ["include/freebsd"],
106        "@bazel_tools//src/conditions:linux_aarch64": ["include/linux"],
107        "@bazel_tools//src/conditions:linux_mips64": [":include/linux"],
108        "@bazel_tools//src/conditions:linux_ppc64le": ["include/linux"],
109        "@bazel_tools//src/conditions:linux_riscv64": [":include/linux"],
110        "@bazel_tools//src/conditions:linux_s390x": ["include/linux"],
111        "@bazel_tools//src/conditions:linux_x86_64": ["include/linux"],
112        "@bazel_tools//src/conditions:openbsd": ["include/openbsd"],
113        "@bazel_tools//src/conditions:windows": ["include/win32"],
114        "//conditions:default": [],
115    }),
116    tags = ["nobuilder"],
117)
118
119[
120    (
121        alias(
122            name = "ijar_prebuilt_binary_%s" % OS,
123            actual = "@remote_java_tools_%s//:ijar_prebuilt_binary" % OS,
124            visibility = ["//visibility:private"],
125        ),
126        alias(
127            name = "prebuilt_singlejar_%s" % OS,
128            actual = "@remote_java_tools_%s//:prebuilt_singlejar" % OS,
129            visibility = ["//visibility:private"],
130        ),
131    )
132    for OS in [
133        "linux",
134        "darwin_x86_64",
135        "darwin_arm64",
136        "windows",
137    ]
138]
139
140# On Windows, executables end in ".exe", but the label we reach it through
141# must be platform-independent. Thus, we create a little filegroup that
142# contains the appropriate platform-dependent file.
143alias(
144    name = "ijar",
145    actual = ":ijar_prebuilt_binary_or_cc_binary",
146)
147
148alias(
149    name = "ijar_prebuilt_binary_or_cc_binary",
150    actual = select({
151        "@bazel_tools//src/conditions:darwin_arm64": ":ijar_prebuilt_binary_darwin_arm64",
152        "@bazel_tools//src/conditions:darwin_x86_64": ":ijar_prebuilt_binary_darwin_x86_64",
153        "@bazel_tools//src/conditions:linux_x86_64": ":ijar_prebuilt_binary_linux",
154        "@bazel_tools//src/conditions:windows": ":ijar_prebuilt_binary_windows",
155        "//conditions:default": "@remote_java_tools//:ijar_cc_binary",
156    }),
157)
158
159alias(
160    name = "ijar_prebuilt_binary",
161    actual = select({
162        "@bazel_tools//src/conditions:darwin_arm64": ":ijar_prebuilt_binary_darwin_arm64",
163        "@bazel_tools//src/conditions:darwin_x86_64": ":ijar_prebuilt_binary_darwin_x86_64",
164        "@bazel_tools//src/conditions:linux_x86_64": ":ijar_prebuilt_binary_linux",
165        "@bazel_tools//src/conditions:windows": ":ijar_prebuilt_binary_windows",
166    }),
167)
168
169# On Windows, Java implementation of singlejar is used. We create a little
170# filegroup that contains the appropriate platform-dependent file.
171# Once https://github.com/bazelbuild/bazel/issues/2241 is fixed (that is,
172# the native singlejar is used on windows), this file group can be reused since
173# on Windows, executables end in ".exe", but the label we reach it through
174# must be platform-independent.
175alias(
176    name = "singlejar",
177    actual = ":singlejar_prebuilt_or_cc_binary",
178)
179
180alias(
181    name = "singlejar_prebuilt_or_cc_binary",
182    actual = select({
183        "@bazel_tools//src/conditions:darwin_arm64": ":prebuilt_singlejar_darwin_arm64",
184        "@bazel_tools//src/conditions:darwin_x86_64": ":prebuilt_singlejar_darwin_x86_64",
185        "@bazel_tools//src/conditions:linux_x86_64": ":prebuilt_singlejar_linux",
186        "@bazel_tools//src/conditions:windows": ":prebuilt_singlejar_windows",
187        "//conditions:default": "@remote_java_tools//:singlejar_cc_bin",
188    }),
189)
190
191alias(
192    name = "prebuilt_singlejar",
193    actual = select({
194        "@bazel_tools//src/conditions:darwin_arm64": ":prebuilt_singlejar_darwin_arm64",
195        "@bazel_tools//src/conditions:darwin_x86_64": ":prebuilt_singlejar_darwin_x86_64",
196        "@bazel_tools//src/conditions:linux_x86_64": ":prebuilt_singlejar_linux",
197        "@bazel_tools//src/conditions:windows": ":prebuilt_singlejar_windows",
198    }),
199)
200
201bootclasspath(
202    name = "platformclasspath",
203    src = "DumpPlatformClassPath.java",
204    host_javabase = ":current_java_runtime",
205    target_javabase = ":current_java_runtime",
206)
207
208default_java_toolchain(
209    name = "toolchain",
210    configuration = DEFAULT_TOOLCHAIN_CONFIGURATION,
211    toolchain_definition = False,
212)
213
214alias(
215    name = "remote_toolchain",
216    actual = ":toolchain",
217)
218
219RELEASES = (8, 9, 10, 11)
220
221[
222    default_java_toolchain(
223        name = "toolchain_java%d" % release,
224        configuration = DEFAULT_TOOLCHAIN_CONFIGURATION,
225        source_version = "%s" % release,
226        target_version = "%s" % release,
227    )
228    for release in RELEASES
229]
230
231# A toolchain that targets java 14.
232default_java_toolchain(
233    name = "toolchain_jdk_14",
234    configuration = dict(),
235    java_runtime = "//toolchains:remotejdk_14",
236    source_version = "14",
237    target_version = "14",
238)
239
240# A toolchain that targets java 15.
241default_java_toolchain(
242    name = "toolchain_jdk_15",
243    configuration = dict(),
244    java_runtime = "//toolchains:remotejdk_15",
245    source_version = "15",
246    target_version = "15",
247)
248
249# A toolchain that targets java 16.
250default_java_toolchain(
251    name = "toolchain_jdk_16",
252    configuration = dict(),
253    java_runtime = "//toolchains:remotejdk_16",
254    source_version = "16",
255    target_version = "16",
256)
257
258# A toolchain that targets java 17.
259default_java_toolchain(
260    name = "toolchain_jdk_17",
261    configuration = dict(),
262    java_runtime = "//toolchains:remotejdk_17",
263    source_version = "17",
264    target_version = "17",
265)
266
267# A toolchain that targets java 20.
268default_java_toolchain(
269    name = "toolchain_jdk_20",
270    configuration = dict(),
271    java_runtime = "//toolchains:remotejdk_20",
272    source_version = "20",
273    target_version = "20",
274)
275
276default_java_toolchain(
277    name = "prebuilt_toolchain",
278    configuration = PREBUILT_TOOLCHAIN_CONFIGURATION,
279    toolchain_definition = False,
280)
281
282# A JDK 11 for use as a --host_javabase.
283java_runtime_version_alias(
284    name = "remote_jdk11",
285    runtime_version = "remotejdk_11",
286    visibility = ["//visibility:public"],
287)
288
289java_runtime_version_alias(
290    name = "remotejdk_15",
291    runtime_version = "remotejdk_15",
292    visibility = ["//visibility:public"],
293)
294
295java_runtime_version_alias(
296    name = "remotejdk_16",
297    runtime_version = "remotejdk_16",
298    visibility = ["//visibility:public"],
299)
300
301java_runtime_version_alias(
302    name = "remotejdk_17",
303    runtime_version = "remotejdk_17",
304    visibility = ["//visibility:public"],
305)
306
307java_runtime_version_alias(
308    name = "remotejdk_20",
309    runtime_version = "remotejdk_20",
310    visibility = ["//visibility:public"],
311)
312
313java_runtime_version_alias(
314    name = "jdk_8",
315    runtime_version = "8",
316    visibility = ["//visibility:public"],
317)
318