| # 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), | |
| "_allowlist_function_transition": attr.label( | |
| default = "@bazel_tools//tools/allowlists/function_transition_allowlist", | |
| ), | |
| }, | |
| 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"], | |
| ) |