xref: /aosp_15_r20/external/bazelbuild-rules_java/toolchains/java_toolchain_alias.bzl (revision abe8e1b943c923005d847f1e3cf6637de4ed1a1f)
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