diff options
author | 2024-09-20 18:03:06 +0000 | |
---|---|---|
committer | 2024-09-20 18:03:06 +0000 | |
commit | 6eff4e34f44f1e8aa6d7af29e7ba06ff32235bbb (patch) | |
tree | e203c157fc1592804262747a3390da787570b519 | |
parent | 6c0a5d9d3053118a74129a8e21b37cb787a30a9e (diff) | |
parent | faf198a728b105df9aeb04881e9dd5c1c59b493a (diff) |
Merge "Revert "Revert "Add new module type notice_xml which is used to ..."" into main
-rw-r--r-- | compliance/Android.bp | 39 | ||||
-rw-r--r-- | compliance/notice.go | 100 | ||||
-rw-r--r-- | compliance/notice_test.go | 38 |
3 files changed, 177 insertions, 0 deletions
diff --git a/compliance/Android.bp b/compliance/Android.bp new file mode 100644 index 000000000..08736b4f7 --- /dev/null +++ b/compliance/Android.bp @@ -0,0 +1,39 @@ +// Copyright (C) 2024 The Android Open Source Project +// +// 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 { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +bootstrap_go_package { + name: "soong-compliance", + pkgPath: "android/soong/compliance", + deps: [ + "soong-android", + ], + srcs: [ + "notice.go", + ], + testSrcs: [ + ], + pluginFor: ["soong_build"], +} + +notice_xml { + name: "notice_xml_system", + partition_name: "system", + visibility: [ + "//device/google/cuttlefish/system_image", + ], +} diff --git a/compliance/notice.go b/compliance/notice.go new file mode 100644 index 000000000..4fc83ab70 --- /dev/null +++ b/compliance/notice.go @@ -0,0 +1,100 @@ +// 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 + installPath android.InstallPath +} + +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 + + if android.Bool(ctx.Config().ProductVariables().UseSoongSystemImage) { + nx.installPath = android.PathForModuleInPartitionInstall(ctx, nx.props.Partition_name, "etc") + ctx.InstallFile(nx.installPath, "NOTICE.xml.gz", nx.outputFile) + } +} + +func (nx *NoticeXmlModule) AndroidMkEntries() []android.AndroidMkEntries { + return []android.AndroidMkEntries{{ + Class: "ETC", + OutputFile: android.OptionalPathForPath(nx.outputFile), + }} +} diff --git a/compliance/notice_test.go b/compliance/notice_test.go new file mode 100644 index 000000000..6187e5332 --- /dev/null +++ b/compliance/notice_test.go @@ -0,0 +1,38 @@ +// 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 ( + "testing" + + "android/soong/android" +) + +var prepareForNoticeXmlTest = android.GroupFixturePreparers( + android.PrepareForTestWithArchMutator, + PrepareForTestWithNoticeXml, +) + +func TestPrebuiltEtcOutputFile(t *testing.T) { + result := prepareForNoticeXmlTest.RunTestWithBp(t, ` + notice_xml { + name: "notice_xml_system", + partition_name: "system", + } + `) + + m := result.Module("notice_xml_system", "android_arm64_armv8-a").(*NoticeXmlModule) + android.AssertStringEquals(t, "output file", "NOTICE.xml.gz", m.outputFile.Base()) +}
\ No newline at end of file |