| // Copyright 2024 Google Inc. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package compliance |
| |
| import ( |
| "path/filepath" |
| |
| "android/soong/android" |
| |
| "github.com/google/blueprint" |
| ) |
| |
| func init() { |
| RegisterNoticeXmlBuildComponents(android.InitRegistrationContext) |
| } |
| |
| var PrepareForTestWithNoticeXmlBuildComponents = android.GroupFixturePreparers( |
| android.FixtureRegisterWithContext(RegisterNoticeXmlBuildComponents), |
| ) |
| |
| var PrepareForTestWithNoticeXml = android.GroupFixturePreparers( |
| PrepareForTestWithNoticeXmlBuildComponents, |
| ) |
| |
| func RegisterNoticeXmlBuildComponents(ctx android.RegistrationContext) { |
| ctx.RegisterModuleType("notice_xml", NoticeXmlFactory) |
| } |
| |
| var ( |
| pctx = android.NewPackageContext("android/soong/compliance") |
| |
| genNoticeXml = pctx.HostBinToolVariable("genNoticeXml", "gen_notice_xml") |
| |
| // Command to generate NOTICE.xml.gz for a partition |
| genNoticeXmlRule = pctx.AndroidStaticRule("genNoticeXmlRule", blueprint.RuleParams{ |
| Command: "rm -rf $out && " + |
| "${genNoticeXml} --output_file ${out} --metadata ${in} --partition ${partition} --product_out ${productOut} --soong_out ${soongOut}", |
| CommandDeps: []string{"${genNoticeXml}"}, |
| }, "partition", "productOut", "soongOut") |
| ) |
| |
| func NoticeXmlFactory() android.Module { |
| m := &NoticeXmlModule{} |
| m.AddProperties(&m.props) |
| android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibFirst) |
| return m |
| } |
| |
| type NoticeXmlModule struct { |
| android.ModuleBase |
| |
| props noticeXmlProperties |
| |
| outputFile android.OutputPath |
| } |
| |
| type noticeXmlProperties struct { |
| Partition_name string |
| } |
| |
| func (nx *NoticeXmlModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { |
| output := android.PathForModuleOut(ctx, "NOTICE.xml.gz") |
| metadataDb := android.PathForOutput(ctx, "compliance-metadata", ctx.Config().DeviceProduct(), "compliance-metadata.db") |
| ctx.Build(pctx, android.BuildParams{ |
| Rule: genNoticeXmlRule, |
| Input: metadataDb, |
| Output: output, |
| Args: map[string]string{ |
| "productOut": filepath.Join(ctx.Config().OutDir(), "target", "product", ctx.Config().DeviceName()), |
| "soongOut": ctx.Config().SoongOutDir(), |
| "partition": nx.props.Partition_name, |
| }, |
| }) |
| |
| nx.outputFile = output.OutputPath |
| |
| installPath := android.PathForModuleInPartitionInstall(ctx, nx.props.Partition_name, "etc") |
| ctx.PackageFile(installPath, "NOTICE.xml.gz", nx.outputFile) |
| } |
| |
| func (nx *NoticeXmlModule) AndroidMkEntries() []android.AndroidMkEntries { |
| return []android.AndroidMkEntries{{ |
| Class: "ETC", |
| OutputFile: android.OptionalPathForPath(nx.outputFile), |
| }} |
| } |