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