1*abe8e1b9SSadaf Ebrahimi# Copyright 2022 The Bazel Authors. All rights reserved. 2*abe8e1b9SSadaf Ebrahimi# 3*abe8e1b9SSadaf Ebrahimi# Licensed under the Apache License, Version 2.0 (the "License"); 4*abe8e1b9SSadaf Ebrahimi# you may not use this file except in compliance with the License. 5*abe8e1b9SSadaf Ebrahimi# You may obtain a copy of the License at 6*abe8e1b9SSadaf Ebrahimi# 7*abe8e1b9SSadaf Ebrahimi# http://www.apache.org/licenses/LICENSE-2.0 8*abe8e1b9SSadaf Ebrahimi# 9*abe8e1b9SSadaf Ebrahimi# Unless required by applicable law or agreed to in writing, software 10*abe8e1b9SSadaf Ebrahimi# distributed under the License is distributed on an "AS IS" BASIS, 11*abe8e1b9SSadaf Ebrahimi# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*abe8e1b9SSadaf Ebrahimi# See the License for the specific language governing permissions and 13*abe8e1b9SSadaf Ebrahimi# limitations under the License. 14*abe8e1b9SSadaf Ebrahimi 15*abe8e1b9SSadaf Ebrahimi"""Rules for defining default_java_toolchain""" 16*abe8e1b9SSadaf Ebrahimi 17*abe8e1b9SSadaf Ebrahimiload("//java:defs.bzl", "java_toolchain") 18*abe8e1b9SSadaf Ebrahimiload("//java/common:java_common.bzl", "java_common") 19*abe8e1b9SSadaf Ebrahimi 20*abe8e1b9SSadaf Ebrahimi# JVM options, without patching java.compiler and jdk.compiler modules. 21*abe8e1b9SSadaf EbrahimiBASE_JDK9_JVM_OPTS = [ 22*abe8e1b9SSadaf Ebrahimi # Allow JavaBuilder to access internal javac APIs. 23*abe8e1b9SSadaf Ebrahimi "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", 24*abe8e1b9SSadaf Ebrahimi "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED", 25*abe8e1b9SSadaf Ebrahimi "--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED", 26*abe8e1b9SSadaf Ebrahimi "--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED", 27*abe8e1b9SSadaf Ebrahimi "--add-exports=jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED", 28*abe8e1b9SSadaf Ebrahimi "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", 29*abe8e1b9SSadaf Ebrahimi "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", 30*abe8e1b9SSadaf Ebrahimi "--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", 31*abe8e1b9SSadaf Ebrahimi "--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED", 32*abe8e1b9SSadaf Ebrahimi "--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", 33*abe8e1b9SSadaf Ebrahimi "--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED", 34*abe8e1b9SSadaf Ebrahimi 35*abe8e1b9SSadaf Ebrahimi # quiet warnings from com.google.protobuf.UnsafeUtil, 36*abe8e1b9SSadaf Ebrahimi # see: https://github.com/google/protobuf/issues/3781 37*abe8e1b9SSadaf Ebrahimi # and: https://github.com/bazelbuild/bazel/issues/5599 38*abe8e1b9SSadaf Ebrahimi "--add-opens=java.base/java.nio=ALL-UNNAMED", 39*abe8e1b9SSadaf Ebrahimi "--add-opens=java.base/java.lang=ALL-UNNAMED", 40*abe8e1b9SSadaf Ebrahimi 41*abe8e1b9SSadaf Ebrahimi # TODO(b/64485048): Disable this option in persistent worker mode only. 42*abe8e1b9SSadaf Ebrahimi # Disable symlinks resolution cache since symlinks in exec root change 43*abe8e1b9SSadaf Ebrahimi "-Dsun.io.useCanonCaches=false", 44*abe8e1b9SSadaf Ebrahimi 45*abe8e1b9SSadaf Ebrahimi # Compact strings make JavaBuilder slightly slower. 46*abe8e1b9SSadaf Ebrahimi "-XX:-CompactStrings", 47*abe8e1b9SSadaf Ebrahimi 48*abe8e1b9SSadaf Ebrahimi # Since https://bugs.openjdk.org/browse/JDK-8153723, JVM logging goes to stdout. This 49*abe8e1b9SSadaf Ebrahimi # makes it go to stderr instead. 50*abe8e1b9SSadaf Ebrahimi "-Xlog:disable", 51*abe8e1b9SSadaf Ebrahimi "-Xlog:all=warning:stderr:uptime,level,tags", 52*abe8e1b9SSadaf Ebrahimi] 53*abe8e1b9SSadaf Ebrahimi 54*abe8e1b9SSadaf EbrahimiJDK9_JVM_OPTS = BASE_JDK9_JVM_OPTS 55*abe8e1b9SSadaf Ebrahimi 56*abe8e1b9SSadaf EbrahimiDEFAULT_JAVACOPTS = [ 57*abe8e1b9SSadaf Ebrahimi "-XDskipDuplicateBridges=true", 58*abe8e1b9SSadaf Ebrahimi "-XDcompilePolicy=simple", 59*abe8e1b9SSadaf Ebrahimi "-g", 60*abe8e1b9SSadaf Ebrahimi "-parameters", 61*abe8e1b9SSadaf Ebrahimi # https://github.com/bazelbuild/bazel/issues/15219 62*abe8e1b9SSadaf Ebrahimi "-Xep:ReturnValueIgnored:OFF", 63*abe8e1b9SSadaf Ebrahimi # https://github.com/bazelbuild/bazel/issues/16996 64*abe8e1b9SSadaf Ebrahimi "-Xep:IgnoredPureGetter:OFF", 65*abe8e1b9SSadaf Ebrahimi "-Xep:EmptyTopLevelDeclaration:OFF", 66*abe8e1b9SSadaf Ebrahimi "-Xep:LenientFormatStringValidation:OFF", 67*abe8e1b9SSadaf Ebrahimi "-Xep:ReturnMissingNullable:OFF", 68*abe8e1b9SSadaf Ebrahimi "-Xep:UseCorrectAssertInTests:OFF", 69*abe8e1b9SSadaf Ebrahimi] 70*abe8e1b9SSadaf Ebrahimi 71*abe8e1b9SSadaf Ebrahimi# Default java_toolchain parameters 72*abe8e1b9SSadaf Ebrahimi_BASE_TOOLCHAIN_CONFIGURATION = dict( 73*abe8e1b9SSadaf Ebrahimi forcibly_disable_header_compilation = False, 74*abe8e1b9SSadaf Ebrahimi genclass = [Label("@remote_java_tools//:GenClass")], 75*abe8e1b9SSadaf Ebrahimi header_compiler = [Label("@remote_java_tools//:TurbineDirect")], 76*abe8e1b9SSadaf Ebrahimi header_compiler_direct = [Label("//toolchains:turbine_direct")], 77*abe8e1b9SSadaf Ebrahimi ijar = [Label("//toolchains:ijar")], 78*abe8e1b9SSadaf Ebrahimi javabuilder = [Label("@remote_java_tools//:JavaBuilder")], 79*abe8e1b9SSadaf Ebrahimi javac_supports_workers = True, 80*abe8e1b9SSadaf Ebrahimi jacocorunner = Label("@remote_java_tools//:jacoco_coverage_runner_filegroup"), 81*abe8e1b9SSadaf Ebrahimi jvm_opts = BASE_JDK9_JVM_OPTS, 82*abe8e1b9SSadaf Ebrahimi turbine_jvm_opts = [ 83*abe8e1b9SSadaf Ebrahimi # Turbine is not a worker and parallel GC is faster for short-lived programs. 84*abe8e1b9SSadaf Ebrahimi "-XX:+UseParallelGC", 85*abe8e1b9SSadaf Ebrahimi ], 86*abe8e1b9SSadaf Ebrahimi misc = DEFAULT_JAVACOPTS, 87*abe8e1b9SSadaf Ebrahimi singlejar = [Label("//toolchains:singlejar")], 88*abe8e1b9SSadaf Ebrahimi # Code to enumerate target JVM boot classpath uses host JVM. Because 89*abe8e1b9SSadaf Ebrahimi # java_runtime-s are involved, its implementation is in @bazel_tools. 90*abe8e1b9SSadaf Ebrahimi bootclasspath = [Label("//toolchains:platformclasspath")], 91*abe8e1b9SSadaf Ebrahimi source_version = "8", 92*abe8e1b9SSadaf Ebrahimi target_version = "8", 93*abe8e1b9SSadaf Ebrahimi reduced_classpath_incompatible_processors = [ 94*abe8e1b9SSadaf Ebrahimi "dagger.hilt.processor.internal.root.RootProcessor", # see b/21307381 95*abe8e1b9SSadaf Ebrahimi ], 96*abe8e1b9SSadaf Ebrahimi java_runtime = Label("//toolchains:remotejdk_21"), 97*abe8e1b9SSadaf Ebrahimi) 98*abe8e1b9SSadaf Ebrahimi 99*abe8e1b9SSadaf EbrahimiDEFAULT_TOOLCHAIN_CONFIGURATION = _BASE_TOOLCHAIN_CONFIGURATION 100*abe8e1b9SSadaf Ebrahimi 101*abe8e1b9SSadaf Ebrahimi# The 'vanilla' toolchain is an unsupported alternative to the default. 102*abe8e1b9SSadaf Ebrahimi# 103*abe8e1b9SSadaf Ebrahimi# It does not provide any of the following features: 104*abe8e1b9SSadaf Ebrahimi# * Error Prone 105*abe8e1b9SSadaf Ebrahimi# * Strict Java Deps 106*abe8e1b9SSadaf Ebrahimi# * Reduced Classpath Optimization 107*abe8e1b9SSadaf Ebrahimi# 108*abe8e1b9SSadaf Ebrahimi# It uses the version of internal javac from the `--host_javabase` JDK instead 109*abe8e1b9SSadaf Ebrahimi# of providing a javac. Internal javac may not be source- or bug-compatible with 110*abe8e1b9SSadaf Ebrahimi# the javac that is provided with other toolchains. 111*abe8e1b9SSadaf Ebrahimi# 112*abe8e1b9SSadaf Ebrahimi# However it does allow using a wider range of `--host_javabase`s, including 113*abe8e1b9SSadaf Ebrahimi# versions newer than the current JDK. 114*abe8e1b9SSadaf EbrahimiVANILLA_TOOLCHAIN_CONFIGURATION = dict( 115*abe8e1b9SSadaf Ebrahimi javabuilder = [Label("@remote_java_tools//:VanillaJavaBuilder")], 116*abe8e1b9SSadaf Ebrahimi jvm_opts = [], 117*abe8e1b9SSadaf Ebrahimi java_runtime = None, 118*abe8e1b9SSadaf Ebrahimi) 119*abe8e1b9SSadaf Ebrahimi 120*abe8e1b9SSadaf Ebrahimi# The new toolchain is using all the pre-built tools, including 121*abe8e1b9SSadaf Ebrahimi# singlejar and ijar, even on remote execution. This toolchain 122*abe8e1b9SSadaf Ebrahimi# should be used only when host and execution platform are the 123*abe8e1b9SSadaf Ebrahimi# same, otherwise the binaries will not work on the execution 124*abe8e1b9SSadaf Ebrahimi# platform. 125*abe8e1b9SSadaf EbrahimiPREBUILT_TOOLCHAIN_CONFIGURATION = dict( 126*abe8e1b9SSadaf Ebrahimi ijar = [Label("//toolchains:ijar_prebuilt_binary")], 127*abe8e1b9SSadaf Ebrahimi singlejar = [Label("//toolchains:prebuilt_singlejar")], 128*abe8e1b9SSadaf Ebrahimi) 129*abe8e1b9SSadaf Ebrahimi 130*abe8e1b9SSadaf Ebrahimi# The new toolchain is using all the tools from sources. 131*abe8e1b9SSadaf EbrahimiNONPREBUILT_TOOLCHAIN_CONFIGURATION = dict( 132*abe8e1b9SSadaf Ebrahimi ijar = [Label("@remote_java_tools//:ijar_cc_binary")], 133*abe8e1b9SSadaf Ebrahimi singlejar = [Label("@remote_java_tools//:singlejar_cc_bin")], 134*abe8e1b9SSadaf Ebrahimi header_compiler_direct = [Label("@remote_java_tools//:TurbineDirect")], 135*abe8e1b9SSadaf Ebrahimi) 136*abe8e1b9SSadaf Ebrahimi 137*abe8e1b9SSadaf Ebrahimi# If this is changed, the docs for "{,tool_}java_language_version" also 138*abe8e1b9SSadaf Ebrahimi# need to be updated in the Bazel user manual 139*abe8e1b9SSadaf Ebrahimi_DEFAULT_SOURCE_VERSION = "8" 140*abe8e1b9SSadaf Ebrahimi 141*abe8e1b9SSadaf Ebrahimidef default_java_toolchain(name, configuration = DEFAULT_TOOLCHAIN_CONFIGURATION, toolchain_definition = True, exec_compatible_with = [], target_compatible_with = [], **kwargs): 142*abe8e1b9SSadaf Ebrahimi """Defines a remote java_toolchain with appropriate defaults for Bazel. 143*abe8e1b9SSadaf Ebrahimi 144*abe8e1b9SSadaf Ebrahimi Args: 145*abe8e1b9SSadaf Ebrahimi name: The name of the toolchain 146*abe8e1b9SSadaf Ebrahimi configuration: Toolchain configuration 147*abe8e1b9SSadaf Ebrahimi toolchain_definition: Whether to define toolchain target and its config setting 148*abe8e1b9SSadaf Ebrahimi exec_compatible_with: A list of constraint values that must be 149*abe8e1b9SSadaf Ebrahimi satisifed for the exec platform. 150*abe8e1b9SSadaf Ebrahimi target_compatible_with: A list of constraint values that must be 151*abe8e1b9SSadaf Ebrahimi satisifed for the target platform. 152*abe8e1b9SSadaf Ebrahimi **kwargs: More arguments for the java_toolchain target 153*abe8e1b9SSadaf Ebrahimi """ 154*abe8e1b9SSadaf Ebrahimi 155*abe8e1b9SSadaf Ebrahimi toolchain_args = dict(_BASE_TOOLCHAIN_CONFIGURATION) 156*abe8e1b9SSadaf Ebrahimi toolchain_args.update(configuration) 157*abe8e1b9SSadaf Ebrahimi toolchain_args.update(kwargs) 158*abe8e1b9SSadaf Ebrahimi java_toolchain( 159*abe8e1b9SSadaf Ebrahimi name = name, 160*abe8e1b9SSadaf Ebrahimi **toolchain_args 161*abe8e1b9SSadaf Ebrahimi ) 162*abe8e1b9SSadaf Ebrahimi if toolchain_definition: 163*abe8e1b9SSadaf Ebrahimi source_version = toolchain_args["source_version"] 164*abe8e1b9SSadaf Ebrahimi if source_version == _DEFAULT_SOURCE_VERSION: 165*abe8e1b9SSadaf Ebrahimi native.config_setting( 166*abe8e1b9SSadaf Ebrahimi name = name + "_default_version_setting", 167*abe8e1b9SSadaf Ebrahimi values = {"java_language_version": ""}, 168*abe8e1b9SSadaf Ebrahimi visibility = ["//visibility:private"], 169*abe8e1b9SSadaf Ebrahimi ) 170*abe8e1b9SSadaf Ebrahimi native.toolchain( 171*abe8e1b9SSadaf Ebrahimi name = name + "_default_definition", 172*abe8e1b9SSadaf Ebrahimi toolchain_type = Label("@bazel_tools//tools/jdk:toolchain_type"), 173*abe8e1b9SSadaf Ebrahimi target_settings = [name + "_default_version_setting"], 174*abe8e1b9SSadaf Ebrahimi toolchain = name, 175*abe8e1b9SSadaf Ebrahimi exec_compatible_with = exec_compatible_with, 176*abe8e1b9SSadaf Ebrahimi target_compatible_with = target_compatible_with, 177*abe8e1b9SSadaf Ebrahimi ) 178*abe8e1b9SSadaf Ebrahimi 179*abe8e1b9SSadaf Ebrahimi native.config_setting( 180*abe8e1b9SSadaf Ebrahimi name = name + "_version_setting", 181*abe8e1b9SSadaf Ebrahimi values = {"java_language_version": source_version}, 182*abe8e1b9SSadaf Ebrahimi visibility = ["//visibility:private"], 183*abe8e1b9SSadaf Ebrahimi ) 184*abe8e1b9SSadaf Ebrahimi native.toolchain( 185*abe8e1b9SSadaf Ebrahimi name = name + "_definition", 186*abe8e1b9SSadaf Ebrahimi toolchain_type = Label("@bazel_tools//tools/jdk:toolchain_type"), 187*abe8e1b9SSadaf Ebrahimi target_settings = [name + "_version_setting"], 188*abe8e1b9SSadaf Ebrahimi toolchain = name, 189*abe8e1b9SSadaf Ebrahimi exec_compatible_with = exec_compatible_with, 190*abe8e1b9SSadaf Ebrahimi target_compatible_with = target_compatible_with, 191*abe8e1b9SSadaf Ebrahimi ) 192*abe8e1b9SSadaf Ebrahimi 193*abe8e1b9SSadaf Ebrahimidef java_runtime_files(name, srcs): 194*abe8e1b9SSadaf Ebrahimi """Copies the given sources out of the current Java runtime.""" 195*abe8e1b9SSadaf Ebrahimi 196*abe8e1b9SSadaf Ebrahimi native.filegroup( 197*abe8e1b9SSadaf Ebrahimi name = name, 198*abe8e1b9SSadaf Ebrahimi srcs = srcs, 199*abe8e1b9SSadaf Ebrahimi tags = ["manual"], 200*abe8e1b9SSadaf Ebrahimi ) 201*abe8e1b9SSadaf Ebrahimi for src in srcs: 202*abe8e1b9SSadaf Ebrahimi native.genrule( 203*abe8e1b9SSadaf Ebrahimi name = "gen_%s" % src, 204*abe8e1b9SSadaf Ebrahimi srcs = [Label("//toolchains:current_java_runtime")], 205*abe8e1b9SSadaf Ebrahimi toolchains = [Label("//toolchains:current_java_runtime")], 206*abe8e1b9SSadaf Ebrahimi cmd = "cp $(JAVABASE)/%s $@" % src, 207*abe8e1b9SSadaf Ebrahimi outs = [src], 208*abe8e1b9SSadaf Ebrahimi tags = ["manual"], 209*abe8e1b9SSadaf Ebrahimi ) 210*abe8e1b9SSadaf Ebrahimi 211*abe8e1b9SSadaf Ebrahimi_JAVA_BOOTSTRAP_RUNTIME_TOOLCHAIN_TYPE = Label("@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type") 212*abe8e1b9SSadaf Ebrahimi 213*abe8e1b9SSadaf Ebrahimi# Opt the Java bootstrap actions into path mapping: 214*abe8e1b9SSadaf Ebrahimi# https://github.com/bazelbuild/bazel/commit/a239ea84832f18ee8706682145e9595e71b39680 215*abe8e1b9SSadaf Ebrahimi_SUPPORTS_PATH_MAPPING = {"supports-path-mapping": "1"} 216*abe8e1b9SSadaf Ebrahimi 217*abe8e1b9SSadaf Ebrahimidef _bootclasspath_impl(ctx): 218*abe8e1b9SSadaf Ebrahimi exec_javabase = ctx.attr.java_runtime_alias[java_common.JavaRuntimeInfo] 219*abe8e1b9SSadaf Ebrahimi 220*abe8e1b9SSadaf Ebrahimi class_dir = ctx.actions.declare_directory("%s_classes" % ctx.label.name) 221*abe8e1b9SSadaf Ebrahimi 222*abe8e1b9SSadaf Ebrahimi args = ctx.actions.args() 223*abe8e1b9SSadaf Ebrahimi args.add("-source") 224*abe8e1b9SSadaf Ebrahimi args.add("8") 225*abe8e1b9SSadaf Ebrahimi args.add("-target") 226*abe8e1b9SSadaf Ebrahimi args.add("8") 227*abe8e1b9SSadaf Ebrahimi args.add("-Xlint:-options") 228*abe8e1b9SSadaf Ebrahimi args.add("-J-XX:-UsePerfData") 229*abe8e1b9SSadaf Ebrahimi args.add("-d") 230*abe8e1b9SSadaf Ebrahimi args.add_all([class_dir], expand_directories = False) 231*abe8e1b9SSadaf Ebrahimi args.add(ctx.file.src) 232*abe8e1b9SSadaf Ebrahimi 233*abe8e1b9SSadaf Ebrahimi ctx.actions.run( 234*abe8e1b9SSadaf Ebrahimi executable = "%s/bin/javac" % exec_javabase.java_home, 235*abe8e1b9SSadaf Ebrahimi mnemonic = "JavaToolchainCompileClasses", 236*abe8e1b9SSadaf Ebrahimi inputs = [ctx.file.src] + ctx.files.java_runtime_alias, 237*abe8e1b9SSadaf Ebrahimi outputs = [class_dir], 238*abe8e1b9SSadaf Ebrahimi arguments = [args], 239*abe8e1b9SSadaf Ebrahimi execution_requirements = _SUPPORTS_PATH_MAPPING, 240*abe8e1b9SSadaf Ebrahimi ) 241*abe8e1b9SSadaf Ebrahimi 242*abe8e1b9SSadaf Ebrahimi bootclasspath = ctx.outputs.output_jar 243*abe8e1b9SSadaf Ebrahimi 244*abe8e1b9SSadaf Ebrahimi args = ctx.actions.args() 245*abe8e1b9SSadaf Ebrahimi args.add("-XX:+IgnoreUnrecognizedVMOptions") 246*abe8e1b9SSadaf Ebrahimi args.add("-XX:-UsePerfData") 247*abe8e1b9SSadaf Ebrahimi args.add("--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED") 248*abe8e1b9SSadaf Ebrahimi args.add("--add-exports=jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED") 249*abe8e1b9SSadaf Ebrahimi args.add("--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED") 250*abe8e1b9SSadaf Ebrahimi args.add_all("-cp", [class_dir], expand_directories = False) 251*abe8e1b9SSadaf Ebrahimi args.add("DumpPlatformClassPath") 252*abe8e1b9SSadaf Ebrahimi args.add(bootclasspath) 253*abe8e1b9SSadaf Ebrahimi 254*abe8e1b9SSadaf Ebrahimi any_javabase = ctx.toolchains[_JAVA_BOOTSTRAP_RUNTIME_TOOLCHAIN_TYPE].java_runtime 255*abe8e1b9SSadaf Ebrahimi args.add(any_javabase.java_home) 256*abe8e1b9SSadaf Ebrahimi 257*abe8e1b9SSadaf Ebrahimi system_files = ("release", "modules", "jrt-fs.jar") 258*abe8e1b9SSadaf Ebrahimi system = [f for f in any_javabase.files.to_list() if f.basename in system_files] 259*abe8e1b9SSadaf Ebrahimi if len(system) != len(system_files): 260*abe8e1b9SSadaf Ebrahimi system = None 261*abe8e1b9SSadaf Ebrahimi 262*abe8e1b9SSadaf Ebrahimi inputs = depset([class_dir] + ctx.files.java_runtime_alias, transitive = [any_javabase.files]) 263*abe8e1b9SSadaf Ebrahimi ctx.actions.run( 264*abe8e1b9SSadaf Ebrahimi executable = str(exec_javabase.java_executable_exec_path), 265*abe8e1b9SSadaf Ebrahimi mnemonic = "JavaToolchainCompileBootClasspath", 266*abe8e1b9SSadaf Ebrahimi inputs = inputs, 267*abe8e1b9SSadaf Ebrahimi outputs = [bootclasspath], 268*abe8e1b9SSadaf Ebrahimi arguments = [args], 269*abe8e1b9SSadaf Ebrahimi execution_requirements = _SUPPORTS_PATH_MAPPING, 270*abe8e1b9SSadaf Ebrahimi ) 271*abe8e1b9SSadaf Ebrahimi return [ 272*abe8e1b9SSadaf Ebrahimi DefaultInfo(files = depset([bootclasspath])), 273*abe8e1b9SSadaf Ebrahimi java_common.BootClassPathInfo( 274*abe8e1b9SSadaf Ebrahimi bootclasspath = [bootclasspath], 275*abe8e1b9SSadaf Ebrahimi system = system, 276*abe8e1b9SSadaf Ebrahimi ), 277*abe8e1b9SSadaf Ebrahimi OutputGroupInfo(jar = [bootclasspath]), 278*abe8e1b9SSadaf Ebrahimi ] 279*abe8e1b9SSadaf Ebrahimi 280*abe8e1b9SSadaf Ebrahimi_bootclasspath = rule( 281*abe8e1b9SSadaf Ebrahimi implementation = _bootclasspath_impl, 282*abe8e1b9SSadaf Ebrahimi attrs = { 283*abe8e1b9SSadaf Ebrahimi "java_runtime_alias": attr.label( 284*abe8e1b9SSadaf Ebrahimi cfg = "exec", 285*abe8e1b9SSadaf Ebrahimi providers = [java_common.JavaRuntimeInfo], 286*abe8e1b9SSadaf Ebrahimi ), 287*abe8e1b9SSadaf Ebrahimi "output_jar": attr.output(mandatory = True), 288*abe8e1b9SSadaf Ebrahimi "src": attr.label( 289*abe8e1b9SSadaf Ebrahimi cfg = "exec", 290*abe8e1b9SSadaf Ebrahimi allow_single_file = True, 291*abe8e1b9SSadaf Ebrahimi ), 292*abe8e1b9SSadaf Ebrahimi }, 293*abe8e1b9SSadaf Ebrahimi toolchains = [_JAVA_BOOTSTRAP_RUNTIME_TOOLCHAIN_TYPE], 294*abe8e1b9SSadaf Ebrahimi) 295*abe8e1b9SSadaf Ebrahimi 296*abe8e1b9SSadaf Ebrahimidef bootclasspath(name, **kwargs): 297*abe8e1b9SSadaf Ebrahimi _bootclasspath( 298*abe8e1b9SSadaf Ebrahimi name = name, 299*abe8e1b9SSadaf Ebrahimi output_jar = name + ".jar", 300*abe8e1b9SSadaf Ebrahimi **kwargs 301*abe8e1b9SSadaf Ebrahimi ) 302