1*abe8e1b9SSadaf Ebrahimi# Copyright 2019 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"""Experimental re-implementations of Java toolchain aliases using toolchain resolution.""" 16*abe8e1b9SSadaf Ebrahimi 17*abe8e1b9SSadaf Ebrahimiload("//java/common:java_common.bzl", "java_common") 18*abe8e1b9SSadaf Ebrahimi 19*abe8e1b9SSadaf Ebrahimidef _java_runtime_alias(ctx): 20*abe8e1b9SSadaf Ebrahimi """An experimental implementation of java_runtime_alias using toolchain resolution.""" 21*abe8e1b9SSadaf Ebrahimi toolchain_info = ctx.toolchains["@bazel_tools//tools/jdk:runtime_toolchain_type"] 22*abe8e1b9SSadaf Ebrahimi toolchain = toolchain_info.java_runtime 23*abe8e1b9SSadaf Ebrahimi return [ 24*abe8e1b9SSadaf Ebrahimi toolchain_info, 25*abe8e1b9SSadaf Ebrahimi toolchain, 26*abe8e1b9SSadaf Ebrahimi platform_common.TemplateVariableInfo({ 27*abe8e1b9SSadaf Ebrahimi "JAVA": str(toolchain.java_executable_exec_path), 28*abe8e1b9SSadaf Ebrahimi "JAVABASE": str(toolchain.java_home), 29*abe8e1b9SSadaf Ebrahimi }), 30*abe8e1b9SSadaf Ebrahimi # See b/65239471 for related discussion of handling toolchain runfiles/data. 31*abe8e1b9SSadaf Ebrahimi DefaultInfo( 32*abe8e1b9SSadaf Ebrahimi runfiles = ctx.runfiles(transitive_files = toolchain.files), 33*abe8e1b9SSadaf Ebrahimi files = toolchain.files, 34*abe8e1b9SSadaf Ebrahimi ), 35*abe8e1b9SSadaf Ebrahimi ] 36*abe8e1b9SSadaf Ebrahimi 37*abe8e1b9SSadaf Ebrahimijava_runtime_alias = rule( 38*abe8e1b9SSadaf Ebrahimi implementation = _java_runtime_alias, 39*abe8e1b9SSadaf Ebrahimi toolchains = ["@bazel_tools//tools/jdk:runtime_toolchain_type"], 40*abe8e1b9SSadaf Ebrahimi) 41*abe8e1b9SSadaf Ebrahimi 42*abe8e1b9SSadaf Ebrahimidef _java_host_runtime_alias(ctx): 43*abe8e1b9SSadaf Ebrahimi """An experimental implementation of java_host_runtime_alias using toolchain resolution.""" 44*abe8e1b9SSadaf Ebrahimi runtime = ctx.attr._runtime 45*abe8e1b9SSadaf Ebrahimi java_runtime = runtime[java_common.JavaRuntimeInfo] 46*abe8e1b9SSadaf Ebrahimi template_variable_info = runtime[platform_common.TemplateVariableInfo] 47*abe8e1b9SSadaf Ebrahimi toolchain_info = platform_common.ToolchainInfo(java_runtime = java_runtime) 48*abe8e1b9SSadaf Ebrahimi return [ 49*abe8e1b9SSadaf Ebrahimi java_runtime, 50*abe8e1b9SSadaf Ebrahimi template_variable_info, 51*abe8e1b9SSadaf Ebrahimi toolchain_info, 52*abe8e1b9SSadaf Ebrahimi runtime[DefaultInfo], 53*abe8e1b9SSadaf Ebrahimi ] 54*abe8e1b9SSadaf Ebrahimi 55*abe8e1b9SSadaf Ebrahimijava_host_runtime_alias = rule( 56*abe8e1b9SSadaf Ebrahimi implementation = _java_host_runtime_alias, 57*abe8e1b9SSadaf Ebrahimi attrs = { 58*abe8e1b9SSadaf Ebrahimi "_runtime": attr.label( 59*abe8e1b9SSadaf Ebrahimi default = Label("//toolchains:current_java_runtime"), 60*abe8e1b9SSadaf Ebrahimi providers = [ 61*abe8e1b9SSadaf Ebrahimi java_common.JavaRuntimeInfo, 62*abe8e1b9SSadaf Ebrahimi platform_common.TemplateVariableInfo, 63*abe8e1b9SSadaf Ebrahimi ], 64*abe8e1b9SSadaf Ebrahimi cfg = "exec", 65*abe8e1b9SSadaf Ebrahimi ), 66*abe8e1b9SSadaf Ebrahimi }, 67*abe8e1b9SSadaf Ebrahimi provides = [ 68*abe8e1b9SSadaf Ebrahimi java_common.JavaRuntimeInfo, 69*abe8e1b9SSadaf Ebrahimi platform_common.TemplateVariableInfo, 70*abe8e1b9SSadaf Ebrahimi platform_common.ToolchainInfo, 71*abe8e1b9SSadaf Ebrahimi ], 72*abe8e1b9SSadaf Ebrahimi) 73*abe8e1b9SSadaf Ebrahimi 74*abe8e1b9SSadaf Ebrahimidef _java_runtime_transition_impl(_settings, attr): 75*abe8e1b9SSadaf Ebrahimi return {"//command_line_option:java_runtime_version": attr.runtime_version} 76*abe8e1b9SSadaf Ebrahimi 77*abe8e1b9SSadaf Ebrahimi_java_runtime_transition = transition( 78*abe8e1b9SSadaf Ebrahimi implementation = _java_runtime_transition_impl, 79*abe8e1b9SSadaf Ebrahimi inputs = [], 80*abe8e1b9SSadaf Ebrahimi outputs = ["//command_line_option:java_runtime_version"], 81*abe8e1b9SSadaf Ebrahimi) 82*abe8e1b9SSadaf Ebrahimi 83*abe8e1b9SSadaf Ebrahimijava_runtime_version_alias = rule( 84*abe8e1b9SSadaf Ebrahimi implementation = _java_runtime_alias, 85*abe8e1b9SSadaf Ebrahimi toolchains = ["@bazel_tools//tools/jdk:runtime_toolchain_type"], 86*abe8e1b9SSadaf Ebrahimi attrs = { 87*abe8e1b9SSadaf Ebrahimi "runtime_version": attr.string(mandatory = True), 88*abe8e1b9SSadaf Ebrahimi }, 89*abe8e1b9SSadaf Ebrahimi cfg = _java_runtime_transition, 90*abe8e1b9SSadaf Ebrahimi) 91*abe8e1b9SSadaf Ebrahimi 92*abe8e1b9SSadaf Ebrahimidef _java_toolchain_alias(ctx): 93*abe8e1b9SSadaf Ebrahimi """An experimental implementation of java_toolchain_alias using toolchain resolution.""" 94*abe8e1b9SSadaf Ebrahimi toolchain_info = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"] 95*abe8e1b9SSadaf Ebrahimi toolchain = toolchain_info.java 96*abe8e1b9SSadaf Ebrahimi 97*abe8e1b9SSadaf Ebrahimi return [ 98*abe8e1b9SSadaf Ebrahimi toolchain_info, 99*abe8e1b9SSadaf Ebrahimi toolchain, 100*abe8e1b9SSadaf Ebrahimi ] 101*abe8e1b9SSadaf Ebrahimi 102*abe8e1b9SSadaf Ebrahimijava_toolchain_alias = rule( 103*abe8e1b9SSadaf Ebrahimi implementation = _java_toolchain_alias, 104*abe8e1b9SSadaf Ebrahimi toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], 105*abe8e1b9SSadaf Ebrahimi) 106