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