# Copyright 2019 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Experimental re-implementations of Java toolchain aliases using toolchain resolution.""" load("//java/common:java_common.bzl", "java_common") def _java_runtime_alias(ctx): """An experimental implementation of java_runtime_alias using toolchain resolution.""" toolchain_info = ctx.toolchains["@bazel_tools//tools/jdk:runtime_toolchain_type"] toolchain = toolchain_info.java_runtime return [ toolchain_info, toolchain, platform_common.TemplateVariableInfo({ "JAVA": str(toolchain.java_executable_exec_path), "JAVABASE": str(toolchain.java_home), }), # See b/65239471 for related discussion of handling toolchain runfiles/data. DefaultInfo( runfiles = ctx.runfiles(transitive_files = toolchain.files), files = toolchain.files, ), ] java_runtime_alias = rule( implementation = _java_runtime_alias, toolchains = ["@bazel_tools//tools/jdk:runtime_toolchain_type"], ) def _java_host_runtime_alias(ctx): """An experimental implementation of java_host_runtime_alias using toolchain resolution.""" runtime = ctx.attr._runtime java_runtime = runtime[java_common.JavaRuntimeInfo] template_variable_info = runtime[platform_common.TemplateVariableInfo] toolchain_info = platform_common.ToolchainInfo(java_runtime = java_runtime) return [ java_runtime, template_variable_info, toolchain_info, runtime[DefaultInfo], ] java_host_runtime_alias = rule( implementation = _java_host_runtime_alias, attrs = { "_runtime": attr.label( default = Label("//toolchains:current_java_runtime"), providers = [ java_common.JavaRuntimeInfo, platform_common.TemplateVariableInfo, ], cfg = "exec", ), }, provides = [ java_common.JavaRuntimeInfo, platform_common.TemplateVariableInfo, platform_common.ToolchainInfo, ], ) def _java_runtime_transition_impl(_settings, attr): return {"//command_line_option:java_runtime_version": attr.runtime_version} _java_runtime_transition = transition( implementation = _java_runtime_transition_impl, inputs = [], outputs = ["//command_line_option:java_runtime_version"], ) java_runtime_version_alias = rule( implementation = _java_runtime_alias, toolchains = ["@bazel_tools//tools/jdk:runtime_toolchain_type"], attrs = { "runtime_version": attr.string(mandatory = True), }, cfg = _java_runtime_transition, ) def _java_toolchain_alias(ctx): """An experimental implementation of java_toolchain_alias using toolchain resolution.""" toolchain_info = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"] toolchain = toolchain_info.java return [ toolchain_info, toolchain, ] java_toolchain_alias = rule( implementation = _java_toolchain_alias, toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], )