1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage java 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 19*333d2b36SAndroid Build Coastguard Worker) 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Worker// isActiveModule returns true if the given module should be considered for boot 22*333d2b36SAndroid Build Coastguard Worker// jars, i.e. if it's enabled and the preferred one in case of source and 23*333d2b36SAndroid Build Coastguard Worker// prebuilt alternatives. 24*333d2b36SAndroid Build Coastguard Workerfunc isActiveModule(ctx android.ConfigurableEvaluatorContext, module android.Module) bool { 25*333d2b36SAndroid Build Coastguard Worker if !module.Enabled(ctx) { 26*333d2b36SAndroid Build Coastguard Worker return false 27*333d2b36SAndroid Build Coastguard Worker } 28*333d2b36SAndroid Build Coastguard Worker return android.IsModulePreferred(module) 29*333d2b36SAndroid Build Coastguard Worker} 30*333d2b36SAndroid Build Coastguard Worker 31*333d2b36SAndroid Build Coastguard Worker// buildRuleForBootJarsPackageCheck generates the build rule to perform the boot jars package 32*333d2b36SAndroid Build Coastguard Worker// check. 33*333d2b36SAndroid Build Coastguard Workerfunc buildRuleForBootJarsPackageCheck(ctx android.ModuleContext, bootDexJarByModule bootDexJarByModule) { 34*333d2b36SAndroid Build Coastguard Worker bootDexJars := bootDexJarByModule.bootDexJarsWithoutCoverage() 35*333d2b36SAndroid Build Coastguard Worker if len(bootDexJars) == 0 { 36*333d2b36SAndroid Build Coastguard Worker return 37*333d2b36SAndroid Build Coastguard Worker } 38*333d2b36SAndroid Build Coastguard Worker 39*333d2b36SAndroid Build Coastguard Worker timestamp := android.PathForOutput(ctx, "boot-jars-package-check/stamp") 40*333d2b36SAndroid Build Coastguard Worker 41*333d2b36SAndroid Build Coastguard Worker rule := android.NewRuleBuilder(pctx, ctx) 42*333d2b36SAndroid Build Coastguard Worker rule.Command().BuiltTool("check_boot_jars"). 43*333d2b36SAndroid Build Coastguard Worker Input(ctx.Config().HostToolPath(ctx, "dexdump")). 44*333d2b36SAndroid Build Coastguard Worker Input(android.PathForSource(ctx, "build/soong/scripts/check_boot_jars/package_allowed_list.txt")). 45*333d2b36SAndroid Build Coastguard Worker Inputs(bootDexJars). 46*333d2b36SAndroid Build Coastguard Worker Text("&& touch").Output(timestamp) 47*333d2b36SAndroid Build Coastguard Worker rule.Build("boot_jars_package_check", "check boot jar packages") 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Worker // The check-boot-jars phony target depends on the timestamp created if the check succeeds. 50*333d2b36SAndroid Build Coastguard Worker ctx.Phony("check-boot-jars", timestamp) 51*333d2b36SAndroid Build Coastguard Worker 52*333d2b36SAndroid Build Coastguard Worker // The droidcore phony target depends on the check-boot-jars phony target 53*333d2b36SAndroid Build Coastguard Worker ctx.Phony("droidcore", android.PathForPhony(ctx, "check-boot-jars")) 54*333d2b36SAndroid Build Coastguard Worker} 55