1*333d2b36SAndroid Build Coastguard Worker// Copyright 2019 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 "path/filepath" 19*333d2b36SAndroid Build Coastguard Worker 20*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint" 23*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 24*333d2b36SAndroid Build Coastguard Worker) 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Workerfunc init() { 27*333d2b36SAndroid Build Coastguard Worker registerPlatformCompatConfigBuildComponents(android.InitRegistrationContext) 28*333d2b36SAndroid Build Coastguard Worker 29*333d2b36SAndroid Build Coastguard Worker android.RegisterSdkMemberType(CompatConfigSdkMemberType) 30*333d2b36SAndroid Build Coastguard Worker} 31*333d2b36SAndroid Build Coastguard Worker 32*333d2b36SAndroid Build Coastguard Workervar CompatConfigSdkMemberType = &compatConfigMemberType{ 33*333d2b36SAndroid Build Coastguard Worker SdkMemberTypeBase: android.SdkMemberTypeBase{ 34*333d2b36SAndroid Build Coastguard Worker PropertyName: "compat_configs", 35*333d2b36SAndroid Build Coastguard Worker SupportsSdk: true, 36*333d2b36SAndroid Build Coastguard Worker }, 37*333d2b36SAndroid Build Coastguard Worker} 38*333d2b36SAndroid Build Coastguard Worker 39*333d2b36SAndroid Build Coastguard Workerfunc registerPlatformCompatConfigBuildComponents(ctx android.RegistrationContext) { 40*333d2b36SAndroid Build Coastguard Worker ctx.RegisterParallelSingletonType("platform_compat_config_singleton", platformCompatConfigSingletonFactory) 41*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("platform_compat_config", PlatformCompatConfigFactory) 42*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("prebuilt_platform_compat_config", prebuiltCompatConfigFactory) 43*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("global_compat_config", globalCompatConfigFactory) 44*333d2b36SAndroid Build Coastguard Worker} 45*333d2b36SAndroid Build Coastguard Worker 46*333d2b36SAndroid Build Coastguard Workervar PrepareForTestWithPlatformCompatConfig = android.FixtureRegisterWithContext(registerPlatformCompatConfigBuildComponents) 47*333d2b36SAndroid Build Coastguard Worker 48*333d2b36SAndroid Build Coastguard Workerfunc platformCompatConfigPath(ctx android.PathContext) android.OutputPath { 49*333d2b36SAndroid Build Coastguard Worker return android.PathForOutput(ctx, "compat_config", "merged_compat_config.xml") 50*333d2b36SAndroid Build Coastguard Worker} 51*333d2b36SAndroid Build Coastguard Worker 52*333d2b36SAndroid Build Coastguard Workertype platformCompatConfigProperties struct { 53*333d2b36SAndroid Build Coastguard Worker Src *string `android:"path"` 54*333d2b36SAndroid Build Coastguard Worker} 55*333d2b36SAndroid Build Coastguard Worker 56*333d2b36SAndroid Build Coastguard Workertype platformCompatConfig struct { 57*333d2b36SAndroid Build Coastguard Worker android.ModuleBase 58*333d2b36SAndroid Build Coastguard Worker 59*333d2b36SAndroid Build Coastguard Worker properties platformCompatConfigProperties 60*333d2b36SAndroid Build Coastguard Worker installDirPath android.InstallPath 61*333d2b36SAndroid Build Coastguard Worker configFile android.OutputPath 62*333d2b36SAndroid Build Coastguard Worker metadataFile android.OutputPath 63*333d2b36SAndroid Build Coastguard Worker 64*333d2b36SAndroid Build Coastguard Worker installConfigFile android.InstallPath 65*333d2b36SAndroid Build Coastguard Worker} 66*333d2b36SAndroid Build Coastguard Worker 67*333d2b36SAndroid Build Coastguard Workerfunc (p *platformCompatConfig) compatConfigMetadata() android.Path { 68*333d2b36SAndroid Build Coastguard Worker return p.metadataFile 69*333d2b36SAndroid Build Coastguard Worker} 70*333d2b36SAndroid Build Coastguard Worker 71*333d2b36SAndroid Build Coastguard Workerfunc (p *platformCompatConfig) CompatConfig() android.OutputPath { 72*333d2b36SAndroid Build Coastguard Worker return p.configFile 73*333d2b36SAndroid Build Coastguard Worker} 74*333d2b36SAndroid Build Coastguard Worker 75*333d2b36SAndroid Build Coastguard Workerfunc (p *platformCompatConfig) SubDir() string { 76*333d2b36SAndroid Build Coastguard Worker return "compatconfig" 77*333d2b36SAndroid Build Coastguard Worker} 78*333d2b36SAndroid Build Coastguard Worker 79*333d2b36SAndroid Build Coastguard Workertype platformCompatConfigMetadataProvider interface { 80*333d2b36SAndroid Build Coastguard Worker compatConfigMetadata() android.Path 81*333d2b36SAndroid Build Coastguard Worker} 82*333d2b36SAndroid Build Coastguard Worker 83*333d2b36SAndroid Build Coastguard Workertype PlatformCompatConfigIntf interface { 84*333d2b36SAndroid Build Coastguard Worker android.Module 85*333d2b36SAndroid Build Coastguard Worker 86*333d2b36SAndroid Build Coastguard Worker CompatConfig() android.OutputPath 87*333d2b36SAndroid Build Coastguard Worker // Sub dir under etc dir. 88*333d2b36SAndroid Build Coastguard Worker SubDir() string 89*333d2b36SAndroid Build Coastguard Worker} 90*333d2b36SAndroid Build Coastguard Worker 91*333d2b36SAndroid Build Coastguard Workervar _ PlatformCompatConfigIntf = (*platformCompatConfig)(nil) 92*333d2b36SAndroid Build Coastguard Workervar _ platformCompatConfigMetadataProvider = (*platformCompatConfig)(nil) 93*333d2b36SAndroid Build Coastguard Worker 94*333d2b36SAndroid Build Coastguard Workerfunc (p *platformCompatConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) { 95*333d2b36SAndroid Build Coastguard Worker rule := android.NewRuleBuilder(pctx, ctx) 96*333d2b36SAndroid Build Coastguard Worker 97*333d2b36SAndroid Build Coastguard Worker configFileName := p.Name() + ".xml" 98*333d2b36SAndroid Build Coastguard Worker metadataFileName := p.Name() + "_meta.xml" 99*333d2b36SAndroid Build Coastguard Worker p.configFile = android.PathForModuleOut(ctx, configFileName).OutputPath 100*333d2b36SAndroid Build Coastguard Worker p.metadataFile = android.PathForModuleOut(ctx, metadataFileName).OutputPath 101*333d2b36SAndroid Build Coastguard Worker path := android.PathForModuleSrc(ctx, String(p.properties.Src)) 102*333d2b36SAndroid Build Coastguard Worker 103*333d2b36SAndroid Build Coastguard Worker rule.Command(). 104*333d2b36SAndroid Build Coastguard Worker BuiltTool("process-compat-config"). 105*333d2b36SAndroid Build Coastguard Worker FlagWithInput("--jar ", path). 106*333d2b36SAndroid Build Coastguard Worker FlagWithOutput("--device-config ", p.configFile). 107*333d2b36SAndroid Build Coastguard Worker FlagWithOutput("--merged-config ", p.metadataFile) 108*333d2b36SAndroid Build Coastguard Worker 109*333d2b36SAndroid Build Coastguard Worker p.installDirPath = android.PathForModuleInstall(ctx, "etc", "compatconfig") 110*333d2b36SAndroid Build Coastguard Worker p.installConfigFile = android.PathForModuleInstall(ctx, "etc", "compatconfig", p.configFile.Base()) 111*333d2b36SAndroid Build Coastguard Worker rule.Build(configFileName, "Extract compat/compat_config.xml and install it") 112*333d2b36SAndroid Build Coastguard Worker ctx.InstallFile(p.installDirPath, p.configFile.Base(), p.configFile) 113*333d2b36SAndroid Build Coastguard Worker ctx.SetOutputFiles(android.Paths{p.configFile}, "") 114*333d2b36SAndroid Build Coastguard Worker} 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Workerfunc (p *platformCompatConfig) AndroidMkEntries() []android.AndroidMkEntries { 117*333d2b36SAndroid Build Coastguard Worker return []android.AndroidMkEntries{android.AndroidMkEntries{ 118*333d2b36SAndroid Build Coastguard Worker Class: "ETC", 119*333d2b36SAndroid Build Coastguard Worker OutputFile: android.OptionalPathForPath(p.configFile), 120*333d2b36SAndroid Build Coastguard Worker }} 121*333d2b36SAndroid Build Coastguard Worker} 122*333d2b36SAndroid Build Coastguard Worker 123*333d2b36SAndroid Build Coastguard Workerfunc PlatformCompatConfigFactory() android.Module { 124*333d2b36SAndroid Build Coastguard Worker module := &platformCompatConfig{} 125*333d2b36SAndroid Build Coastguard Worker module.AddProperties(&module.properties) 126*333d2b36SAndroid Build Coastguard Worker android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon) 127*333d2b36SAndroid Build Coastguard Worker return module 128*333d2b36SAndroid Build Coastguard Worker} 129*333d2b36SAndroid Build Coastguard Worker 130*333d2b36SAndroid Build Coastguard Workertype compatConfigMemberType struct { 131*333d2b36SAndroid Build Coastguard Worker android.SdkMemberTypeBase 132*333d2b36SAndroid Build Coastguard Worker} 133*333d2b36SAndroid Build Coastguard Worker 134*333d2b36SAndroid Build Coastguard Workerfunc (b *compatConfigMemberType) AddDependencies(ctx android.SdkDependencyContext, dependencyTag blueprint.DependencyTag, names []string) { 135*333d2b36SAndroid Build Coastguard Worker ctx.AddVariationDependencies(nil, dependencyTag, names...) 136*333d2b36SAndroid Build Coastguard Worker} 137*333d2b36SAndroid Build Coastguard Worker 138*333d2b36SAndroid Build Coastguard Workerfunc (b *compatConfigMemberType) IsInstance(module android.Module) bool { 139*333d2b36SAndroid Build Coastguard Worker _, ok := module.(*platformCompatConfig) 140*333d2b36SAndroid Build Coastguard Worker return ok 141*333d2b36SAndroid Build Coastguard Worker} 142*333d2b36SAndroid Build Coastguard Worker 143*333d2b36SAndroid Build Coastguard Workerfunc (b *compatConfigMemberType) AddPrebuiltModule(ctx android.SdkMemberContext, member android.SdkMember) android.BpModule { 144*333d2b36SAndroid Build Coastguard Worker return ctx.SnapshotBuilder().AddPrebuiltModule(member, "prebuilt_platform_compat_config") 145*333d2b36SAndroid Build Coastguard Worker} 146*333d2b36SAndroid Build Coastguard Worker 147*333d2b36SAndroid Build Coastguard Workerfunc (b *compatConfigMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties { 148*333d2b36SAndroid Build Coastguard Worker return &compatConfigSdkMemberProperties{} 149*333d2b36SAndroid Build Coastguard Worker} 150*333d2b36SAndroid Build Coastguard Worker 151*333d2b36SAndroid Build Coastguard Workertype compatConfigSdkMemberProperties struct { 152*333d2b36SAndroid Build Coastguard Worker android.SdkMemberPropertiesBase 153*333d2b36SAndroid Build Coastguard Worker 154*333d2b36SAndroid Build Coastguard Worker Metadata android.Path 155*333d2b36SAndroid Build Coastguard Worker} 156*333d2b36SAndroid Build Coastguard Worker 157*333d2b36SAndroid Build Coastguard Workerfunc (b *compatConfigSdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) { 158*333d2b36SAndroid Build Coastguard Worker module := variant.(*platformCompatConfig) 159*333d2b36SAndroid Build Coastguard Worker b.Metadata = module.metadataFile 160*333d2b36SAndroid Build Coastguard Worker} 161*333d2b36SAndroid Build Coastguard Worker 162*333d2b36SAndroid Build Coastguard Workerfunc (b *compatConfigSdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) { 163*333d2b36SAndroid Build Coastguard Worker builder := ctx.SnapshotBuilder() 164*333d2b36SAndroid Build Coastguard Worker if b.Metadata != nil { 165*333d2b36SAndroid Build Coastguard Worker snapshotRelativePath := filepath.Join("compat_configs", ctx.Name(), b.Metadata.Base()) 166*333d2b36SAndroid Build Coastguard Worker builder.CopyToSnapshot(b.Metadata, snapshotRelativePath) 167*333d2b36SAndroid Build Coastguard Worker propertySet.AddProperty("metadata", snapshotRelativePath) 168*333d2b36SAndroid Build Coastguard Worker } 169*333d2b36SAndroid Build Coastguard Worker} 170*333d2b36SAndroid Build Coastguard Worker 171*333d2b36SAndroid Build Coastguard Workervar _ android.SdkMemberType = (*compatConfigMemberType)(nil) 172*333d2b36SAndroid Build Coastguard Worker 173*333d2b36SAndroid Build Coastguard Worker// A prebuilt version of the platform compat config module. 174*333d2b36SAndroid Build Coastguard Workertype prebuiltCompatConfigModule struct { 175*333d2b36SAndroid Build Coastguard Worker android.ModuleBase 176*333d2b36SAndroid Build Coastguard Worker prebuilt android.Prebuilt 177*333d2b36SAndroid Build Coastguard Worker 178*333d2b36SAndroid Build Coastguard Worker properties prebuiltCompatConfigProperties 179*333d2b36SAndroid Build Coastguard Worker 180*333d2b36SAndroid Build Coastguard Worker metadataFile android.Path 181*333d2b36SAndroid Build Coastguard Worker} 182*333d2b36SAndroid Build Coastguard Worker 183*333d2b36SAndroid Build Coastguard Workertype prebuiltCompatConfigProperties struct { 184*333d2b36SAndroid Build Coastguard Worker Metadata *string `android:"path"` 185*333d2b36SAndroid Build Coastguard Worker 186*333d2b36SAndroid Build Coastguard Worker // Name of the source soong module that gets shadowed by this prebuilt 187*333d2b36SAndroid Build Coastguard Worker // If unspecified, follows the naming convention that the source module of 188*333d2b36SAndroid Build Coastguard Worker // the prebuilt is Name() without "prebuilt_" prefix 189*333d2b36SAndroid Build Coastguard Worker Source_module_name *string 190*333d2b36SAndroid Build Coastguard Worker} 191*333d2b36SAndroid Build Coastguard Worker 192*333d2b36SAndroid Build Coastguard Workerfunc (module *prebuiltCompatConfigModule) Prebuilt() *android.Prebuilt { 193*333d2b36SAndroid Build Coastguard Worker return &module.prebuilt 194*333d2b36SAndroid Build Coastguard Worker} 195*333d2b36SAndroid Build Coastguard Worker 196*333d2b36SAndroid Build Coastguard Workerfunc (module *prebuiltCompatConfigModule) Name() string { 197*333d2b36SAndroid Build Coastguard Worker return module.prebuilt.Name(module.ModuleBase.Name()) 198*333d2b36SAndroid Build Coastguard Worker} 199*333d2b36SAndroid Build Coastguard Worker 200*333d2b36SAndroid Build Coastguard Workerfunc (module *prebuiltCompatConfigModule) compatConfigMetadata() android.Path { 201*333d2b36SAndroid Build Coastguard Worker return module.metadataFile 202*333d2b36SAndroid Build Coastguard Worker} 203*333d2b36SAndroid Build Coastguard Worker 204*333d2b36SAndroid Build Coastguard Workerfunc (module *prebuiltCompatConfigModule) BaseModuleName() string { 205*333d2b36SAndroid Build Coastguard Worker return proptools.StringDefault(module.properties.Source_module_name, module.ModuleBase.Name()) 206*333d2b36SAndroid Build Coastguard Worker} 207*333d2b36SAndroid Build Coastguard Worker 208*333d2b36SAndroid Build Coastguard Workervar _ platformCompatConfigMetadataProvider = (*prebuiltCompatConfigModule)(nil) 209*333d2b36SAndroid Build Coastguard Worker 210*333d2b36SAndroid Build Coastguard Workerfunc (module *prebuiltCompatConfigModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { 211*333d2b36SAndroid Build Coastguard Worker module.metadataFile = module.prebuilt.SingleSourcePath(ctx) 212*333d2b36SAndroid Build Coastguard Worker} 213*333d2b36SAndroid Build Coastguard Worker 214*333d2b36SAndroid Build Coastguard Worker// A prebuilt version of platform_compat_config that provides the metadata. 215*333d2b36SAndroid Build Coastguard Workerfunc prebuiltCompatConfigFactory() android.Module { 216*333d2b36SAndroid Build Coastguard Worker m := &prebuiltCompatConfigModule{} 217*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.properties) 218*333d2b36SAndroid Build Coastguard Worker android.InitSingleSourcePrebuiltModule(m, &m.properties, "Metadata") 219*333d2b36SAndroid Build Coastguard Worker android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibCommon) 220*333d2b36SAndroid Build Coastguard Worker return m 221*333d2b36SAndroid Build Coastguard Worker} 222*333d2b36SAndroid Build Coastguard Worker 223*333d2b36SAndroid Build Coastguard Worker// compat singleton rules 224*333d2b36SAndroid Build Coastguard Workertype platformCompatConfigSingleton struct { 225*333d2b36SAndroid Build Coastguard Worker metadata android.Path 226*333d2b36SAndroid Build Coastguard Worker} 227*333d2b36SAndroid Build Coastguard Worker 228*333d2b36SAndroid Build Coastguard Workerfunc (p *platformCompatConfigSingleton) GenerateBuildActions(ctx android.SingletonContext) { 229*333d2b36SAndroid Build Coastguard Worker 230*333d2b36SAndroid Build Coastguard Worker var compatConfigMetadata android.Paths 231*333d2b36SAndroid Build Coastguard Worker 232*333d2b36SAndroid Build Coastguard Worker ctx.VisitAllModules(func(module android.Module) { 233*333d2b36SAndroid Build Coastguard Worker if !module.Enabled(ctx) { 234*333d2b36SAndroid Build Coastguard Worker return 235*333d2b36SAndroid Build Coastguard Worker } 236*333d2b36SAndroid Build Coastguard Worker if c, ok := module.(platformCompatConfigMetadataProvider); ok { 237*333d2b36SAndroid Build Coastguard Worker if !android.IsModulePreferred(module) { 238*333d2b36SAndroid Build Coastguard Worker return 239*333d2b36SAndroid Build Coastguard Worker } 240*333d2b36SAndroid Build Coastguard Worker metadata := c.compatConfigMetadata() 241*333d2b36SAndroid Build Coastguard Worker compatConfigMetadata = append(compatConfigMetadata, metadata) 242*333d2b36SAndroid Build Coastguard Worker } 243*333d2b36SAndroid Build Coastguard Worker }) 244*333d2b36SAndroid Build Coastguard Worker 245*333d2b36SAndroid Build Coastguard Worker if compatConfigMetadata == nil { 246*333d2b36SAndroid Build Coastguard Worker // nothing to do. 247*333d2b36SAndroid Build Coastguard Worker return 248*333d2b36SAndroid Build Coastguard Worker } 249*333d2b36SAndroid Build Coastguard Worker 250*333d2b36SAndroid Build Coastguard Worker rule := android.NewRuleBuilder(pctx, ctx) 251*333d2b36SAndroid Build Coastguard Worker outputPath := platformCompatConfigPath(ctx) 252*333d2b36SAndroid Build Coastguard Worker 253*333d2b36SAndroid Build Coastguard Worker rule.Command(). 254*333d2b36SAndroid Build Coastguard Worker BuiltTool("process-compat-config"). 255*333d2b36SAndroid Build Coastguard Worker FlagForEachInput("--xml ", compatConfigMetadata). 256*333d2b36SAndroid Build Coastguard Worker FlagWithOutput("--merged-config ", outputPath) 257*333d2b36SAndroid Build Coastguard Worker 258*333d2b36SAndroid Build Coastguard Worker rule.Build("merged-compat-config", "Merge compat config") 259*333d2b36SAndroid Build Coastguard Worker 260*333d2b36SAndroid Build Coastguard Worker p.metadata = outputPath 261*333d2b36SAndroid Build Coastguard Worker} 262*333d2b36SAndroid Build Coastguard Worker 263*333d2b36SAndroid Build Coastguard Workerfunc (p *platformCompatConfigSingleton) MakeVars(ctx android.MakeVarsContext) { 264*333d2b36SAndroid Build Coastguard Worker if p.metadata != nil { 265*333d2b36SAndroid Build Coastguard Worker ctx.DistForGoal("droidcore", p.metadata) 266*333d2b36SAndroid Build Coastguard Worker } 267*333d2b36SAndroid Build Coastguard Worker} 268*333d2b36SAndroid Build Coastguard Worker 269*333d2b36SAndroid Build Coastguard Workerfunc platformCompatConfigSingletonFactory() android.Singleton { 270*333d2b36SAndroid Build Coastguard Worker return &platformCompatConfigSingleton{} 271*333d2b36SAndroid Build Coastguard Worker} 272*333d2b36SAndroid Build Coastguard Worker 273*333d2b36SAndroid Build Coastguard Worker// ============== merged_compat_config ================= 274*333d2b36SAndroid Build Coastguard Workertype globalCompatConfigProperties struct { 275*333d2b36SAndroid Build Coastguard Worker // name of the file into which the metadata will be copied. 276*333d2b36SAndroid Build Coastguard Worker Filename *string 277*333d2b36SAndroid Build Coastguard Worker} 278*333d2b36SAndroid Build Coastguard Worker 279*333d2b36SAndroid Build Coastguard Workertype globalCompatConfig struct { 280*333d2b36SAndroid Build Coastguard Worker android.ModuleBase 281*333d2b36SAndroid Build Coastguard Worker 282*333d2b36SAndroid Build Coastguard Worker properties globalCompatConfigProperties 283*333d2b36SAndroid Build Coastguard Worker} 284*333d2b36SAndroid Build Coastguard Worker 285*333d2b36SAndroid Build Coastguard Workerfunc (c *globalCompatConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) { 286*333d2b36SAndroid Build Coastguard Worker filename := String(c.properties.Filename) 287*333d2b36SAndroid Build Coastguard Worker 288*333d2b36SAndroid Build Coastguard Worker inputPath := platformCompatConfigPath(ctx) 289*333d2b36SAndroid Build Coastguard Worker outputFilePath := android.PathForModuleOut(ctx, filename).OutputPath 290*333d2b36SAndroid Build Coastguard Worker 291*333d2b36SAndroid Build Coastguard Worker // This ensures that outputFilePath has the correct name for others to 292*333d2b36SAndroid Build Coastguard Worker // use, as the source file may have a different name. 293*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 294*333d2b36SAndroid Build Coastguard Worker Rule: android.Cp, 295*333d2b36SAndroid Build Coastguard Worker Output: outputFilePath, 296*333d2b36SAndroid Build Coastguard Worker Input: inputPath, 297*333d2b36SAndroid Build Coastguard Worker }) 298*333d2b36SAndroid Build Coastguard Worker 299*333d2b36SAndroid Build Coastguard Worker ctx.SetOutputFiles(android.Paths{outputFilePath}, "") 300*333d2b36SAndroid Build Coastguard Worker} 301*333d2b36SAndroid Build Coastguard Worker 302*333d2b36SAndroid Build Coastguard Worker// global_compat_config provides access to the merged compat config xml file generated by the build. 303*333d2b36SAndroid Build Coastguard Workerfunc globalCompatConfigFactory() android.Module { 304*333d2b36SAndroid Build Coastguard Worker module := &globalCompatConfig{} 305*333d2b36SAndroid Build Coastguard Worker module.AddProperties(&module.properties) 306*333d2b36SAndroid Build Coastguard Worker android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) 307*333d2b36SAndroid Build Coastguard Worker return module 308*333d2b36SAndroid Build Coastguard Worker} 309