| # 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.""" | |
| def _java_runtime_alias(ctx): | |
| """An experimental implementation of java_runtime_alias using toolchain resolution.""" | |
| if java_common.is_java_toolchain_resolution_enabled_do_not_use(ctx = ctx): | |
| toolchain = ctx.toolchains["@bazel_tools//tools/jdk:runtime_toolchain_type"] | |
| else: | |
| toolchain = ctx.attr._java_runtime[java_common.JavaRuntimeInfo] | |
| return [ | |
| 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"], | |
| attrs = { | |
| "_java_runtime": attr.label( | |
| default = Label("@bazel_tools//tools/jdk:legacy_current_java_runtime"), | |
| ), | |
| }, | |
| ) | |
| def _java_host_runtime_alias(ctx): | |
| """An experimental implementation of java_host_runtime_alias using toolchain resolution.""" | |
| runtime = ctx.attr._runtime | |
| return [ | |
| runtime[java_common.JavaRuntimeInfo], | |
| runtime[platform_common.TemplateVariableInfo], | |
| # Create a new DefaultInfo instead of propagating runtime[DefaultInfo] | |
| # directly. | |
| DefaultInfo( | |
| files = runtime[DefaultInfo].files, | |
| data_runfiles = runtime[DefaultInfo].data_runfiles, | |
| default_runfiles = runtime[DefaultInfo].default_runfiles, | |
| ), | |
| ] | |
| java_host_runtime_alias = rule( | |
| implementation = _java_host_runtime_alias, | |
| attrs = { | |
| "_runtime": attr.label( | |
| default = Label("@bazel_tools//tools/jdk:current_java_runtime"), | |
| providers = [ | |
| java_common.JavaRuntimeInfo, | |
| platform_common.TemplateVariableInfo, | |
| ], | |
| cfg = "host", | |
| ), | |
| }, | |
| ) | |
| def _java_toolchain_alias(ctx): | |
| """An experimental implementation of java_toolchain_alias using toolchain resolution.""" | |
| if java_common.is_java_toolchain_resolution_enabled_do_not_use(ctx = ctx): | |
| toolchain = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"] | |
| else: | |
| toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo] | |
| return struct( | |
| providers = [toolchain], | |
| # Use the legacy provider syntax for compatibility with the native rules. | |
| java_toolchain = toolchain, | |
| ) | |
| java_toolchain_alias = rule( | |
| implementation = _java_toolchain_alias, | |
| toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], | |
| attrs = { | |
| "_java_toolchain": attr.label( | |
| default = Label("@bazel_tools//tools/jdk:legacy_current_java_toolchain"), | |
| ), | |
| }, | |
| ) | |
| # Add aliases for the legacy native rules to allow referring to both versions in @bazel_tools//tools/jdk | |
| legacy_java_toolchain_alias = native.java_toolchain_alias | |
| legacy_java_runtime_alias = native.java_runtime_alias |