Snap for 12397640 from ca9aa38b45 to 24Q4-release

Change-Id: I34a2926e933dbb0383efcdf59ee3825f1144c11e
This commit is contained in:
Android Build Coastguard Worker
2024-09-21 01:00:47 +00:00
9 changed files with 199 additions and 4 deletions

View File

@@ -381,7 +381,7 @@ type commonProperties struct {
Native_bridge_supported *bool `android:"arch_variant"`
// init.rc files to be installed if this module is installed
Init_rc []string `android:"arch_variant,path"`
Init_rc proptools.Configurable[[]string] `android:"arch_variant,path"`
// VINTF manifest fragments to be installed if this module is installed
Vintf_fragments proptools.Configurable[[]string] `android:"path"`
@@ -1855,7 +1855,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext)
// so only a single rule is created for each init.rc or vintf fragment file.
if !m.InVendorRamdisk() {
ctx.initRcPaths = PathsForModuleSrc(ctx, m.commonProperties.Init_rc)
ctx.initRcPaths = PathsForModuleSrc(ctx, m.commonProperties.Init_rc.GetOrDefault(ctx, nil))
rcDir := PathForModuleInstall(ctx, "etc", "init")
for _, src := range ctx.initRcPaths {
installedInitRc := rcDir.Join(ctx, src.Base())

View File

@@ -79,7 +79,7 @@ var (
minimalRuntimeFlags = []string{"-fsanitize-minimal-runtime", "-fno-sanitize-trap=integer,undefined",
"-fno-sanitize-recover=integer,undefined"}
memtagStackCommonFlags = []string{"-march=armv8-a+memtag"}
memtagStackCommonFlags = []string{"-Xclang -target-feature -Xclang +mte"}
memtagStackLlvmFlags = []string{"-dom-tree-reachability-max-bbs-to-explore=128"}
hostOnlySanitizeFlags = []string{"-fno-sanitize-recover=all"}

39
compliance/Android.bp Normal file
View File

@@ -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",
],
}

100
compliance/notice.go Normal file
View File

@@ -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),
}}
}

38
compliance/notice_test.go Normal file
View File

@@ -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())
}

View File

@@ -35,8 +35,13 @@ var (
},
"armv8-2a": []string{},
"armv8-2a-dotprod": []string{},
// branch-protection=bti,pac-ret is equivalent to Clang's mbranch-protection=standard
"armv9-a": []string{
// branch-protection=bti,pac-ret is equivalent to Clang's mbranch-protection=standard
"-Z branch-protection=bti,pac-ret",
"-Z stack-protector=none",
},
"armv9-2a": []string{
"-Z branch-protection=bti,pac-ret",
"-Z stack-protector=none",
},

View File

@@ -71,9 +71,11 @@ EOF
cp -pr out/soong/build_aosp_arm_ninja_incremental out/soong/*.mk out/soong/build.aosp_arm.*.ninja ${OUTPUT_DIR}/after
compare_files
echo "Tests passed"
}
function compare_files() {
count=0
for file_before in ${OUTPUT_DIR}/before/*.ninja; do
file_after="${OUTPUT_DIR}/after/$(basename "$file_before")"
assert_files_equal $file_before $file_after
@@ -82,8 +84,11 @@ function compare_files() {
echo "Files have identical mtime: $file_before $file_after"
exit 1
fi
((count++))
done
echo "Compared $count ninja files"
count=0
for file_before in ${OUTPUT_DIR}/before/*.mk; do
file_after="${OUTPUT_DIR}/after/$(basename "$file_before")"
assert_files_equal $file_before $file_after
@@ -93,8 +98,11 @@ function compare_files() {
echo "Files have different mtimes: $file_before $file_after"
exit 1
fi
((count++))
done
echo "Compared $count mk files"
count=0
for file_before in ${OUTPUT_DIR}/before/build_aosp_arm_ninja_incremental/*.ninja; do
file_after="${OUTPUT_DIR}/after/build_aosp_arm_ninja_incremental/$(basename "$file_before")"
assert_files_equal $file_before $file_after
@@ -104,7 +112,9 @@ function compare_files() {
echo "Files have different mtimes: $file_before $file_after"
exit 1
fi
((count++))
done
echo "Compared $count incremental ninja files"
}
test_build_action_restoring

View File

@@ -242,6 +242,7 @@ func (m *testModuleConfigModule) AndroidMkEntries() []android.AndroidMkEntries {
entries.SetBoolIfTrue("LOCAL_IS_UNIT_TEST", m.provider.IsUnitTest)
entries.AddCompatibilityTestSuites(m.tradefedProperties.Test_suites...)
entries.AddStrings("LOCAL_HOST_REQUIRED_MODULES", m.provider.HostRequiredModuleNames...)
// The app_prebuilt_internal.mk files try create a copy of the OutputFile as an .apk.
// Normally, this copies the "package.apk" from the intermediate directory here.

View File

@@ -40,6 +40,7 @@ const bp = `
name: "base",
sdk_version: "current",
data: [":HelperApp", "data/testfile"],
host_required: ["other-module"],
test_suites: ["general-tests"],
}
@@ -80,6 +81,7 @@ func TestModuleConfigAndroidTest(t *testing.T) {
android.AssertArrayString(t, "", entries.EntryMap["LOCAL_COMPATIBILITY_SUPPORT_FILES"], []string{})
android.AssertArrayString(t, "", entries.EntryMap["LOCAL_REQUIRED_MODULES"], []string{"base"})
android.AssertArrayString(t, "", entries.EntryMap["LOCAL_HOST_REQUIRED_MODULES"], []string{"other-module"})
android.AssertArrayString(t, "", entries.EntryMap["LOCAL_CERTIFICATE"], []string{"build/make/target/product/security/testkey.x509.pem"})
android.AssertStringEquals(t, "", entries.Class, "APPS")