1*333d2b36SAndroid Build Coastguard Worker// Copyright 2023 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 codegen 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 "github.com/google/blueprint" 21*333d2b36SAndroid Build Coastguard Worker) 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Workervar ( 24*333d2b36SAndroid Build Coastguard Worker pctx = android.NewPackageContext("android/soong/aconfig/codegen") 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Worker // For java_aconfig_library: Generate java library 27*333d2b36SAndroid Build Coastguard Worker javaRule = pctx.AndroidStaticRule("java_aconfig_library", 28*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 29*333d2b36SAndroid Build Coastguard Worker Command: `rm -rf ${out}.tmp` + 30*333d2b36SAndroid Build Coastguard Worker ` && mkdir -p ${out}.tmp` + 31*333d2b36SAndroid Build Coastguard Worker ` && ${aconfig} create-java-lib` + 32*333d2b36SAndroid Build Coastguard Worker ` --mode ${mode}` + 33*333d2b36SAndroid Build Coastguard Worker ` --cache ${in}` + 34*333d2b36SAndroid Build Coastguard Worker ` --out ${out}.tmp` + 35*333d2b36SAndroid Build Coastguard Worker ` --allow-instrumentation ${debug}` + 36*333d2b36SAndroid Build Coastguard Worker ` && $soong_zip -write_if_changed -jar -o ${out} -C ${out}.tmp -D ${out}.tmp` + 37*333d2b36SAndroid Build Coastguard Worker ` && rm -rf ${out}.tmp`, 38*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{ 39*333d2b36SAndroid Build Coastguard Worker "$aconfig", 40*333d2b36SAndroid Build Coastguard Worker "$soong_zip", 41*333d2b36SAndroid Build Coastguard Worker }, 42*333d2b36SAndroid Build Coastguard Worker Restat: true, 43*333d2b36SAndroid Build Coastguard Worker }, "mode", "debug") 44*333d2b36SAndroid Build Coastguard Worker 45*333d2b36SAndroid Build Coastguard Worker // For cc_aconfig_library: Generate C++ library 46*333d2b36SAndroid Build Coastguard Worker cppRule = pctx.AndroidStaticRule("cc_aconfig_library", 47*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 48*333d2b36SAndroid Build Coastguard Worker Command: `rm -rf ${gendir}` + 49*333d2b36SAndroid Build Coastguard Worker ` && mkdir -p ${gendir}` + 50*333d2b36SAndroid Build Coastguard Worker ` && ${aconfig} create-cpp-lib` + 51*333d2b36SAndroid Build Coastguard Worker ` --mode ${mode}` + 52*333d2b36SAndroid Build Coastguard Worker ` --cache ${in}` + 53*333d2b36SAndroid Build Coastguard Worker ` --out ${gendir}` + 54*333d2b36SAndroid Build Coastguard Worker ` --allow-instrumentation ${debug}`, 55*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{ 56*333d2b36SAndroid Build Coastguard Worker "$aconfig", 57*333d2b36SAndroid Build Coastguard Worker }, 58*333d2b36SAndroid Build Coastguard Worker }, "gendir", "mode", "debug") 59*333d2b36SAndroid Build Coastguard Worker 60*333d2b36SAndroid Build Coastguard Worker // For rust_aconfig_library: Generate Rust library 61*333d2b36SAndroid Build Coastguard Worker rustRule = pctx.AndroidStaticRule("rust_aconfig_library", 62*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 63*333d2b36SAndroid Build Coastguard Worker Command: `rm -rf ${gendir}` + 64*333d2b36SAndroid Build Coastguard Worker ` && mkdir -p ${gendir}` + 65*333d2b36SAndroid Build Coastguard Worker ` && ${aconfig} create-rust-lib` + 66*333d2b36SAndroid Build Coastguard Worker ` --mode ${mode}` + 67*333d2b36SAndroid Build Coastguard Worker ` --cache ${in}` + 68*333d2b36SAndroid Build Coastguard Worker ` --allow-instrumentation ${debug}` + 69*333d2b36SAndroid Build Coastguard Worker ` --out ${gendir}`, 70*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{ 71*333d2b36SAndroid Build Coastguard Worker "$aconfig", 72*333d2b36SAndroid Build Coastguard Worker }, 73*333d2b36SAndroid Build Coastguard Worker }, "gendir", "mode", "debug") 74*333d2b36SAndroid Build Coastguard Worker) 75*333d2b36SAndroid Build Coastguard Worker 76*333d2b36SAndroid Build Coastguard Workerfunc init() { 77*333d2b36SAndroid Build Coastguard Worker RegisterBuildComponents(android.InitRegistrationContext) 78*333d2b36SAndroid Build Coastguard Worker pctx.HostBinToolVariable("aconfig", "aconfig") 79*333d2b36SAndroid Build Coastguard Worker pctx.HostBinToolVariable("soong_zip", "soong_zip") 80*333d2b36SAndroid Build Coastguard Worker} 81*333d2b36SAndroid Build Coastguard Worker 82*333d2b36SAndroid Build Coastguard Workerfunc RegisterBuildComponents(ctx android.RegistrationContext) { 83*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("aconfig_declarations_group", AconfigDeclarationsGroupFactory) 84*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("cc_aconfig_library", CcAconfigLibraryFactory) 85*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("java_aconfig_library", JavaDeclarationsLibraryFactory) 86*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("rust_aconfig_library", RustAconfigLibraryFactory) 87*333d2b36SAndroid Build Coastguard Worker} 88