xref: /aosp_15_r20/external/bazelbuild-rules_android/rules/desugar.bzl (revision 9e965d6fece27a77de5377433c2f7e6999b8cc0b)
1*9e965d6fSRomain Jobredeaux# Copyright 2020 The Bazel Authors. All rights reserved.
2*9e965d6fSRomain Jobredeaux#
3*9e965d6fSRomain Jobredeaux# Licensed under the Apache License, Version 2.0 (the "License");
4*9e965d6fSRomain Jobredeaux# you may not use this file except in compliance with the License.
5*9e965d6fSRomain Jobredeaux# You may obtain a copy of the License at
6*9e965d6fSRomain Jobredeaux#
7*9e965d6fSRomain Jobredeaux#    http://www.apache.org/licenses/LICENSE-2.0
8*9e965d6fSRomain Jobredeaux#
9*9e965d6fSRomain Jobredeaux# Unless required by applicable law or agreed to in writing, software
10*9e965d6fSRomain Jobredeaux# distributed under the License is distributed on an "AS IS" BASIS,
11*9e965d6fSRomain Jobredeaux# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9e965d6fSRomain Jobredeaux# See the License for the specific language governing permissions and
13*9e965d6fSRomain Jobredeaux# limitations under the License.
14*9e965d6fSRomain Jobredeaux
15*9e965d6fSRomain Jobredeaux"""Bazel Desugar Commands."""
16*9e965d6fSRomain Jobredeaux
17*9e965d6fSRomain Jobredeauxdef _desugar(
18*9e965d6fSRomain Jobredeaux        ctx,
19*9e965d6fSRomain Jobredeaux        input,
20*9e965d6fSRomain Jobredeaux        output = None,
21*9e965d6fSRomain Jobredeaux        classpath = None,
22*9e965d6fSRomain Jobredeaux        bootclasspath = [],
23*9e965d6fSRomain Jobredeaux        min_sdk_version = 0,
24*9e965d6fSRomain Jobredeaux        library_desugaring = True,
25*9e965d6fSRomain Jobredeaux        desugar_exec = None,
26*9e965d6fSRomain Jobredeaux        toolchain_type = None):
27*9e965d6fSRomain Jobredeaux    """Desugars a JAR.
28*9e965d6fSRomain Jobredeaux
29*9e965d6fSRomain Jobredeaux    Args:
30*9e965d6fSRomain Jobredeaux        ctx: The context.
31*9e965d6fSRomain Jobredeaux        input: File. The jar to be desugared.
32*9e965d6fSRomain Jobredeaux        output: File. The desugared jar.
33*9e965d6fSRomain Jobredeaux        classpath: Depset of Files. The transitive classpath needed to resolve symbols in the input jar.
34*9e965d6fSRomain Jobredeaux        bootclasspath: List of Files. Bootclasspaths that was used to compile the input jar with.
35*9e965d6fSRomain Jobredeaux        min_sdk_version: Integer. The minimum targeted sdk version.
36*9e965d6fSRomain Jobredeaux        library_desugaring: Boolean. Whether to enable core library desugaring.
37*9e965d6fSRomain Jobredeaux        desugar_exec: File. The executable desugar file.
38*9e965d6fSRomain Jobredeaux    """
39*9e965d6fSRomain Jobredeaux
40*9e965d6fSRomain Jobredeaux    args = ctx.actions.args()
41*9e965d6fSRomain Jobredeaux    args.use_param_file("@%s", use_always = True)  # Required for workers.
42*9e965d6fSRomain Jobredeaux    args.set_param_file_format("multiline")
43*9e965d6fSRomain Jobredeaux    args.add("--input", input)
44*9e965d6fSRomain Jobredeaux    args.add("--output", output)
45*9e965d6fSRomain Jobredeaux    args.add_all(classpath, before_each = "--classpath_entry")
46*9e965d6fSRomain Jobredeaux    args.add_all(bootclasspath, before_each = "--bootclasspath_entry")
47*9e965d6fSRomain Jobredeaux
48*9e965d6fSRomain Jobredeaux    if library_desugaring:
49*9e965d6fSRomain Jobredeaux        if ctx.fragments.android.check_desugar_deps:
50*9e965d6fSRomain Jobredeaux            args.add("--emit_dependency_metadata_as_needed")
51*9e965d6fSRomain Jobredeaux
52*9e965d6fSRomain Jobredeaux        if ctx.fragments.android.desugar_java8_libs and library_desugaring:
53*9e965d6fSRomain Jobredeaux            args.add("--desugar_supported_core_libs")
54*9e965d6fSRomain Jobredeaux
55*9e965d6fSRomain Jobredeaux    if min_sdk_version > 0:
56*9e965d6fSRomain Jobredeaux        args.add("--min_sdk_version", str(min_sdk_version))
57*9e965d6fSRomain Jobredeaux
58*9e965d6fSRomain Jobredeaux    ctx.actions.run(
59*9e965d6fSRomain Jobredeaux        inputs = depset([input] + bootclasspath, transitive = [classpath]),
60*9e965d6fSRomain Jobredeaux        outputs = [output],
61*9e965d6fSRomain Jobredeaux        executable = desugar_exec,
62*9e965d6fSRomain Jobredeaux        arguments = [args],
63*9e965d6fSRomain Jobredeaux        mnemonic = "Desugar",
64*9e965d6fSRomain Jobredeaux        progress_message = "Desugaring " + input.short_path + " for Android",
65*9e965d6fSRomain Jobredeaux        execution_requirements = {"supports-workers": "1"},
66*9e965d6fSRomain Jobredeaux        toolchain = toolchain_type,
67*9e965d6fSRomain Jobredeaux    )
68*9e965d6fSRomain Jobredeaux
69*9e965d6fSRomain Jobredeauxdesugar = struct(
70*9e965d6fSRomain Jobredeaux    desugar = _desugar,
71*9e965d6fSRomain Jobredeaux)
72