1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 2*7594170eSAndroid Build Coastguard Worker# 3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*7594170eSAndroid Build Coastguard Worker# 7*7594170eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*7594170eSAndroid Build Coastguard Worker# 9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*7594170eSAndroid Build Coastguard Worker# limitations under the License. 14*7594170eSAndroid Build Coastguard Worker 15*7594170eSAndroid Build Coastguard Workerload("@soong_injection//api_levels:platform_versions.bzl", "platform_versions") 16*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/common:api.bzl", "api", "api_from_product") 17*7594170eSAndroid Build Coastguard Workerload(":manifest_fixer_internal.bzl", _internal = "manifest_fixer_internal") 18*7594170eSAndroid Build Coastguard Worker 19*7594170eSAndroid Build Coastguard Worker# TODO(b/300428335): access these variables in a transition friendly way. 20*7594170eSAndroid Build Coastguard Worker_PLATFORM_SDK_VERSION = platform_versions.platform_sdk_version 21*7594170eSAndroid Build Coastguard Worker_PLATFORM_SDK_CODENAME = platform_versions.platform_sdk_codename 22*7594170eSAndroid Build Coastguard Worker_PLATFORM_VERSION_ACTIVE_CODENAMES = platform_versions.platform_version_active_codenames 23*7594170eSAndroid Build Coastguard Worker 24*7594170eSAndroid Build Coastguard Worker# Starlark implementation of TargetSdkVersionForManifestFixer from build/soong/java/android_manifest.go 25*7594170eSAndroid Build Coastguard Workerdef _target_sdk_version_for_manifest_fixer( 26*7594170eSAndroid Build Coastguard Worker target_sdk_version, 27*7594170eSAndroid Build Coastguard Worker platform_sdk_final, 28*7594170eSAndroid Build Coastguard Worker has_unbundled_build_apps): 29*7594170eSAndroid Build Coastguard Worker platform_sdk_variables = struct( 30*7594170eSAndroid Build Coastguard Worker platform_sdk_final = platform_sdk_final, 31*7594170eSAndroid Build Coastguard Worker platform_sdk_version = _PLATFORM_SDK_VERSION, 32*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = _PLATFORM_SDK_CODENAME, 33*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = _PLATFORM_VERSION_ACTIVE_CODENAMES, 34*7594170eSAndroid Build Coastguard Worker ) 35*7594170eSAndroid Build Coastguard Worker return _internal.target_sdk_version_for_manifest_fixer( 36*7594170eSAndroid Build Coastguard Worker target_sdk_version = target_sdk_version, 37*7594170eSAndroid Build Coastguard Worker has_unbundled_build_apps = has_unbundled_build_apps, 38*7594170eSAndroid Build Coastguard Worker platform_sdk_variables = platform_sdk_variables, 39*7594170eSAndroid Build Coastguard Worker ) 40*7594170eSAndroid Build Coastguard Worker 41*7594170eSAndroid Build Coastguard Worker# TODO: b/301430823 - Only pass ctx.actions to limit the scope of what this function can access. 42*7594170eSAndroid Build Coastguard Workerdef _fix( 43*7594170eSAndroid Build Coastguard Worker ctx, 44*7594170eSAndroid Build Coastguard Worker manifest_fixer, 45*7594170eSAndroid Build Coastguard Worker in_manifest, 46*7594170eSAndroid Build Coastguard Worker out_manifest, 47*7594170eSAndroid Build Coastguard Worker mnemonic = "FixAndroidManifest", 48*7594170eSAndroid Build Coastguard Worker test_only = None, 49*7594170eSAndroid Build Coastguard Worker min_sdk_version = None, 50*7594170eSAndroid Build Coastguard Worker target_sdk_version = None): 51*7594170eSAndroid Build Coastguard Worker args = ctx.actions.args() 52*7594170eSAndroid Build Coastguard Worker if test_only: 53*7594170eSAndroid Build Coastguard Worker args.add("--test-only") 54*7594170eSAndroid Build Coastguard Worker if min_sdk_version: 55*7594170eSAndroid Build Coastguard Worker args.add("--minSdkVersion", min_sdk_version) 56*7594170eSAndroid Build Coastguard Worker if target_sdk_version: 57*7594170eSAndroid Build Coastguard Worker args.add("--targetSdkVersion", target_sdk_version) 58*7594170eSAndroid Build Coastguard Worker if min_sdk_version or target_sdk_version: 59*7594170eSAndroid Build Coastguard Worker args.add("--raise-min-sdk-version") 60*7594170eSAndroid Build Coastguard Worker args.add(in_manifest) 61*7594170eSAndroid Build Coastguard Worker args.add(out_manifest) 62*7594170eSAndroid Build Coastguard Worker ctx.actions.run( 63*7594170eSAndroid Build Coastguard Worker inputs = [in_manifest], 64*7594170eSAndroid Build Coastguard Worker outputs = [out_manifest], 65*7594170eSAndroid Build Coastguard Worker executable = manifest_fixer, 66*7594170eSAndroid Build Coastguard Worker arguments = [args], 67*7594170eSAndroid Build Coastguard Worker mnemonic = mnemonic, 68*7594170eSAndroid Build Coastguard Worker ) 69*7594170eSAndroid Build Coastguard Worker 70*7594170eSAndroid Build Coastguard Workermanifest_fixer = struct( 71*7594170eSAndroid Build Coastguard Worker fix = _fix, 72*7594170eSAndroid Build Coastguard Worker target_sdk_version_for_manifest_fixer = _target_sdk_version_for_manifest_fixer, 73*7594170eSAndroid Build Coastguard Worker) 74