diff options
| -rw-r--r-- | aconfig/codegen/init.go | 3 | ||||
| -rw-r--r-- | aconfig/codegen/java_aconfig_library.go | 13 | ||||
| -rw-r--r-- | android/container_violations.go | 14 | ||||
| -rw-r--r-- | android/logtags.go | 33 | ||||
| -rw-r--r-- | cmd/find_input_delta/find_input_delta/main.go | 8 | ||||
| -rwxr-xr-x[-rw-r--r--] | cmd/find_input_delta/find_input_delta_proto_internal/regen.sh | 0 | ||||
| -rw-r--r-- | cmd/soong_ui/main.go | 3 | ||||
| -rw-r--r-- | filesystem/filesystem.go | 11 | ||||
| -rw-r--r-- | fsgen/Android.bp | 1 | ||||
| -rw-r--r-- | fsgen/config.go | 142 | ||||
| -rw-r--r-- | fsgen/filesystem_creator.go | 216 | ||||
| -rw-r--r-- | fsgen/fsgen_mutators.go | 1 | ||||
| -rw-r--r-- | fsgen/util.go | 19 | ||||
| -rw-r--r-- | java/builder.go | 3 | ||||
| -rw-r--r-- | java/config/config.go | 1 | ||||
| -rw-r--r-- | java/gen.go | 5 | ||||
| -rw-r--r-- | java/kotlin.go | 3 | ||||
| -rw-r--r-- | kernel/prebuilt_kernel_modules.go | 16 |
18 files changed, 288 insertions, 204 deletions
diff --git a/aconfig/codegen/init.go b/aconfig/codegen/init.go index ed0b3ed7f..34fdca3d1 100644 --- a/aconfig/codegen/init.go +++ b/aconfig/codegen/init.go @@ -33,6 +33,7 @@ var ( ` --cache ${in}` + ` --out ${out}.tmp` + ` --allow-instrumentation ${debug}` + + ` --new-exported ${new_exported}` + ` && $soong_zip -write_if_changed -jar -o ${out} -C ${out}.tmp -D ${out}.tmp` + ` && rm -rf ${out}.tmp`, CommandDeps: []string{ @@ -40,7 +41,7 @@ var ( "$soong_zip", }, Restat: true, - }, "mode", "debug") + }, "mode", "debug", "new_exported") // For cc_aconfig_library: Generate C++ library cppRule = pctx.AndroidStaticRule("cc_aconfig_library", diff --git a/aconfig/codegen/java_aconfig_library.go b/aconfig/codegen/java_aconfig_library.go index 9f399bf76..cd1767b95 100644 --- a/aconfig/codegen/java_aconfig_library.go +++ b/aconfig/codegen/java_aconfig_library.go @@ -98,14 +98,23 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild ctx.PropertyErrorf("mode", "exported mode requires its aconfig_declaration has exportable prop true") } + var newExported bool + if useNewExported, ok := ctx.Config().GetBuildFlag("RELEASE_ACONFIG_NEW_EXPORTED"); ok { + // The build flag (RELEASE_ACONFIG_REQUIRE_ALL_READ_ONLY) is the negation of the aconfig flag + // (allow-read-write) for historical reasons. + // Bool build flags are always "" for false, and generally "true" for true. + newExported = useNewExported == "true" + } + ctx.Build(pctx, android.BuildParams{ Rule: javaRule, Input: declarations.IntermediateCacheOutputPath, Output: srcJarPath, Description: "aconfig.srcjar", Args: map[string]string{ - "mode": mode, - "debug": strconv.FormatBool(ctx.Config().ReleaseReadFromNewStorage()), + "mode": mode, + "debug": strconv.FormatBool(ctx.Config().ReleaseReadFromNewStorage()), + "new_exported": strconv.FormatBool(newExported), }, }) diff --git a/android/container_violations.go b/android/container_violations.go index 42514849e..cfee562ac 100644 --- a/android/container_violations.go +++ b/android/container_violations.go @@ -827,6 +827,13 @@ var ContainerDependencyViolationAllowlist = map[string][]string{ "framework-connectivity-pre-jarjar", // apex [com.android.tethering] -> system }, + // TODO(b/382743602): Remove "app-compat-annotations" and depend on the stub version jar + // TODO(b/382301972): Remove the violations and use jarjar_rename or jarjar_prefix + "framework-connectivity-b.impl": { + "app-compat-annotations", // apex [com.android.tethering] -> system + "framework-connectivity-pre-jarjar", // apex [com.android.tethering] -> system + }, + "framework-connectivity.impl": { "app-compat-annotations", // apex [com.android.tethering] -> system }, @@ -1029,6 +1036,13 @@ var ContainerDependencyViolationAllowlist = map[string][]string{ "framework-connectivity-t-pre-jarjar", // apex [com.android.tethering] -> system }, + // TODO(b/382301972): Remove the violations and use jarjar_rename or jarjar_prefix + "service-connectivity-b-pre-jarjar": { + "framework-connectivity-pre-jarjar", // apex [com.android.tethering] -> system + "framework-connectivity-b-pre-jarjar", // apex [com.android.tethering] -> system + "framework-connectivity-t-pre-jarjar", // apex [com.android.tethering] -> system + }, + "service-entitlement": { "auto_value_annotations", // apex [com.android.wifi, test_com.android.wifi] -> apex [com.android.adservices, com.android.extservices, com.android.extservices_tplus] }, diff --git a/android/logtags.go b/android/logtags.go index 7929057ff..1e92dad68 100644 --- a/android/logtags.go +++ b/android/logtags.go @@ -16,41 +16,8 @@ package android import "github.com/google/blueprint" -func init() { - RegisterParallelSingletonType("logtags", LogtagsSingleton) -} - type LogtagsInfo struct { Logtags Paths } var LogtagsProviderKey = blueprint.NewProvider[*LogtagsInfo]() - -func LogtagsSingleton() Singleton { - return &logtagsSingleton{} -} - -type logtagsSingleton struct{} - -func MergedLogtagsPath(ctx PathContext) OutputPath { - return PathForIntermediates(ctx, "all-event-log-tags.txt") -} - -func (l *logtagsSingleton) GenerateBuildActions(ctx SingletonContext) { - var allLogtags Paths - ctx.VisitAllModules(func(module Module) { - if !module.ExportedToMake() { - return - } - if logtagsInfo, ok := OtherModuleProvider(ctx, module, LogtagsProviderKey); ok { - allLogtags = append(allLogtags, logtagsInfo.Logtags...) - } - }) - - builder := NewRuleBuilder(pctx, ctx) - builder.Command(). - BuiltTool("merge-event-log-tags"). - FlagWithOutput("-o ", MergedLogtagsPath(ctx)). - Inputs(SortedUniquePaths(allLogtags)) - builder.Build("all-event-log-tags.txt", "merge logtags") -} diff --git a/cmd/find_input_delta/find_input_delta/main.go b/cmd/find_input_delta/find_input_delta/main.go index 036b239d0..65ef88145 100644 --- a/cmd/find_input_delta/find_input_delta/main.go +++ b/cmd/find_input_delta/find_input_delta/main.go @@ -17,11 +17,13 @@ package main import ( "flag" "os" - "strings" + "regexp" fid_lib "android/soong/cmd/find_input_delta/find_input_delta_lib" ) +var fileSepRegex = regexp.MustCompile("[^[:space:]]+") + func main() { var top string var prior_state_file string @@ -46,6 +48,8 @@ func main() { if target == "" { panic("must specify --target") } + // Drop any extra file names that arrived in `target`. + target = fileSepRegex.FindString(target) if prior_state_file == "" { prior_state_file = target + ".pc_state" } @@ -63,7 +67,7 @@ func main() { if err != nil { panic(err) } - inputs = append(inputs, strings.Split(string(data), "\n")...) + inputs = append(inputs, fileSepRegex.FindAllString(string(data), -1)...) } // Read the prior state diff --git a/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh b/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh index cbaf7d056..cbaf7d056 100644..100755 --- a/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh +++ b/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh diff --git a/cmd/soong_ui/main.go b/cmd/soong_ui/main.go index 972179422..c119823cd 100644 --- a/cmd/soong_ui/main.go +++ b/cmd/soong_ui/main.go @@ -215,8 +215,7 @@ func main() { emet.Dump(executionMetricsFile, args) // If there are execution metrics, upload them. if _, err := os.Stat(executionMetricsFile); err == nil { - // TODO: Upload the metrics file. - // metricsFiles = append(metricsFiles, executionMetricsFile) + metricsFiles = append(metricsFiles, executionMetricsFile) } if !config.SkipMetricsUpload() { build.UploadMetrics(buildCtx, config, c.simpleOutput, buildStarted, metricsFiles...) diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index b9cb0769a..1d32b8f70 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -98,6 +98,14 @@ type SymlinkDefinition struct { Name *string } +// CopyWithNamePrefix returns a new [SymlinkDefinition] with prefix added to Name. +func (s *SymlinkDefinition) CopyWithNamePrefix(prefix string) SymlinkDefinition { + return SymlinkDefinition{ + Target: s.Target, + Name: proptools.StringPtr(filepath.Join(prefix, proptools.String(s.Name))), + } +} + type FilesystemProperties struct { // When set to true, sign the image with avbtool. Default is false. Use_avb *bool @@ -878,8 +886,7 @@ func (f *filesystem) buildEventLogtagsFile(ctx android.ModuleContext, builder *a eventLogtagsPath := etcPath.Join(ctx, "event-log-tags") builder.Command().Text("mkdir").Flag("-p").Text(etcPath.String()) cmd := builder.Command().BuiltTool("merge-event-log-tags"). - FlagWithArg("-o ", eventLogtagsPath.String()). - FlagWithInput("-m ", android.MergedLogtagsPath(ctx)) + FlagWithArg("-o ", eventLogtagsPath.String()) for _, path := range android.SortedKeys(logtagsFilePaths) { cmd.Text(path) diff --git a/fsgen/Android.bp b/fsgen/Android.bp index 365d9540f..1b828c5d9 100644 --- a/fsgen/Android.bp +++ b/fsgen/Android.bp @@ -14,6 +14,7 @@ bootstrap_go_package { ], srcs: [ "boot_imgs.go", + "config.go", "filesystem_creator.go", "fsgen_mutators.go", "prebuilt_etc_modules_gen.go", diff --git a/fsgen/config.go b/fsgen/config.go new file mode 100644 index 000000000..31f721b45 --- /dev/null +++ b/fsgen/config.go @@ -0,0 +1,142 @@ +// 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 fsgen + +import ( + "android/soong/filesystem" + + "github.com/google/blueprint/proptools" +) + +var ( + // Most of the symlinks and directories listed here originate from create_root_structure.mk, + // but the handwritten generic system image also recreates them: + // https://cs.android.com/android/platform/superproject/main/+/main:build/make/target/product/generic/Android.bp;l=33;drc=db08311f1b6ef6cb0a4fbcc6263b89849360ce04 + // TODO(b/377734331): only generate the symlinks if the relevant partitions exist + commonSymlinksFromRoot = []filesystem.SymlinkDefinition{ + { + Target: proptools.StringPtr("/system/bin/init"), + Name: proptools.StringPtr("init"), + }, + { + Target: proptools.StringPtr("/system/etc"), + Name: proptools.StringPtr("etc"), + }, + { + Target: proptools.StringPtr("/system/bin"), + Name: proptools.StringPtr("bin"), + }, + { + Target: proptools.StringPtr("/data/user_de/0/com.android.shell/files/bugreports"), + Name: proptools.StringPtr("bugreports"), + }, + { + Target: proptools.StringPtr("/sys/kernel/debug"), + Name: proptools.StringPtr("d"), + }, + { + Target: proptools.StringPtr("/product/etc/security/adb_keys"), + Name: proptools.StringPtr("adb_keys"), + }, + { + Target: proptools.StringPtr("/vendor/odm/app"), + Name: proptools.StringPtr("odm/app"), + }, + { + Target: proptools.StringPtr("/vendor/odm/bin"), + Name: proptools.StringPtr("odm/bin"), + }, + { + Target: proptools.StringPtr("/vendor/odm/etc"), + Name: proptools.StringPtr("odm/etc"), + }, + { + Target: proptools.StringPtr("/vendor/odm/firmware"), + Name: proptools.StringPtr("odm/firmware"), + }, + { + Target: proptools.StringPtr("/vendor/odm/framework"), + Name: proptools.StringPtr("odm/framework"), + }, + { + Target: proptools.StringPtr("/vendor/odm/lib"), + Name: proptools.StringPtr("odm/lib"), + }, + { + Target: proptools.StringPtr("/vendor/odm/lib64"), + Name: proptools.StringPtr("odm/lib64"), + }, + { + Target: proptools.StringPtr("/vendor/odm/overlay"), + Name: proptools.StringPtr("odm/overlay"), + }, + { + Target: proptools.StringPtr("/vendor/odm/priv-app"), + Name: proptools.StringPtr("odm/priv-app"), + }, + { + Target: proptools.StringPtr("/vendor/odm/usr"), + Name: proptools.StringPtr("odm/usr"), + }, + // For Treble Generic System Image (GSI), system-as-root GSI needs to work on + // both devices with and without /odm_dlkm partition. Those symlinks are for + // devices without /odm_dlkm partition. For devices with /odm_dlkm + // partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks. + // Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed + // via /odm/lib/modules directly. All of this also applies to the vendor_dlkm symlink + { + Target: proptools.StringPtr("/odm/odm_dlkm/etc"), + Name: proptools.StringPtr("odm_dlkm/etc"), + }, + { + Target: proptools.StringPtr("/vendor/vendor_dlkm/etc"), + Name: proptools.StringPtr("vendor_dlkm/etc"), + }, + } + + // Common directories between partitions that may be listed as `Dirs` property in the + // filesystem module. + commonPartitionDirs = []string{ + // From generic_rootdirs in build/make/target/product/generic/Android.bp + "acct", + "apex", + "bootstrap-apex", + "config", + "data", + "data_mirror", + "debug_ramdisk", + "dev", + "linkerconfig", + "metadata", + "mnt", + "odm", + "odm_dlkm", + "oem", + "postinstall", + "proc", + "second_stage_resources", + "storage", + "sys", + "system", + "system_dlkm", + "tmp", + "vendor", + "vendor_dlkm", + + // from android_rootdirs in build/make/target/product/generic/Android.bp + "system_ext", + "product", + } +) diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go index 137851301..b9fddcab5 100644 --- a/fsgen/filesystem_creator.go +++ b/fsgen/filesystem_creator.go @@ -235,146 +235,37 @@ func partitionSpecificFsProps(ctx android.EarlyModuleContext, fsProps *filesyste } fsProps.Fsverity.Libs = []string{":framework-res{.export-package.apk}"} } - // Most of the symlinks and directories listed here originate from create_root_structure.mk, - // but the handwritten generic system image also recreates them: - // https://cs.android.com/android/platform/superproject/main/+/main:build/make/target/product/generic/Android.bp;l=33;drc=db08311f1b6ef6cb0a4fbcc6263b89849360ce04 - // TODO(b/377734331): only generate the symlinks if the relevant partitions exist - fsProps.Symlinks = []filesystem.SymlinkDefinition{ - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/system/bin/init"), - Name: proptools.StringPtr("init"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/system/etc"), - Name: proptools.StringPtr("etc"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/system/bin"), - Name: proptools.StringPtr("bin"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/data/user_de/0/com.android.shell/files/bugreports"), - Name: proptools.StringPtr("bugreports"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/sys/kernel/debug"), - Name: proptools.StringPtr("d"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/storage/self/primary"), - Name: proptools.StringPtr("sdcard"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/product/etc/security/adb_keys"), - Name: proptools.StringPtr("adb_keys"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/app"), - Name: proptools.StringPtr("odm/app"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/bin"), - Name: proptools.StringPtr("odm/bin"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/etc"), - Name: proptools.StringPtr("odm/etc"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/firmware"), - Name: proptools.StringPtr("odm/firmware"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/framework"), - Name: proptools.StringPtr("odm/framework"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/lib"), - Name: proptools.StringPtr("odm/lib"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/lib64"), - Name: proptools.StringPtr("odm/lib64"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/overlay"), - Name: proptools.StringPtr("odm/overlay"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/priv-app"), - Name: proptools.StringPtr("odm/priv-app"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/odm/usr"), - Name: proptools.StringPtr("odm/usr"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/product"), - Name: proptools.StringPtr("system/product"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/system_ext"), - Name: proptools.StringPtr("system/system_ext"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor"), - Name: proptools.StringPtr("system/vendor"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/system_dlkm/lib/modules"), - Name: proptools.StringPtr("system/lib/modules"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/data/cache"), - Name: proptools.StringPtr("cache"), - }, - // For Treble Generic System Image (GSI), system-as-root GSI needs to work on - // both devices with and without /odm_dlkm partition. Those symlinks are for - // devices without /odm_dlkm partition. For devices with /odm_dlkm - // partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks. - // Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed - // via /odm/lib/modules directly. All of this also applies to the vendor_dlkm symlink - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/odm/odm_dlkm/etc"), - Name: proptools.StringPtr("odm_dlkm/etc"), - }, - filesystem.SymlinkDefinition{ - Target: proptools.StringPtr("/vendor/vendor_dlkm/etc"), - Name: proptools.StringPtr("vendor_dlkm/etc"), - }, - } + fsProps.Symlinks = commonSymlinksFromRoot + fsProps.Symlinks = append(fsProps.Symlinks, + []filesystem.SymlinkDefinition{ + { + Target: proptools.StringPtr("/data/cache"), + Name: proptools.StringPtr("cache"), + }, + { + Target: proptools.StringPtr("/storage/self/primary"), + Name: proptools.StringPtr("sdcard"), + }, + { + Target: proptools.StringPtr("/system_dlkm/lib/modules"), + Name: proptools.StringPtr("system/lib/modules"), + }, + { + Target: proptools.StringPtr("/product"), + Name: proptools.StringPtr("system/product"), + }, + { + Target: proptools.StringPtr("/system_ext"), + Name: proptools.StringPtr("system/system_ext"), + }, + { + Target: proptools.StringPtr("/vendor"), + Name: proptools.StringPtr("system/vendor"), + }, + }..., + ) fsProps.Base_dir = proptools.StringPtr("system") - fsProps.Dirs = proptools.NewSimpleConfigurable([]string{ - // From generic_rootdirs in build/make/target/product/generic/Android.bp - "acct", - "apex", - "bootstrap-apex", - "config", - "data", - "data_mirror", - "debug_ramdisk", - "dev", - "linkerconfig", - "metadata", - "mnt", - "odm", - "odm_dlkm", - "oem", - "postinstall", - "proc", - "second_stage_resources", - "storage", - "sys", - "system", - "system_dlkm", - "tmp", - "vendor", - "vendor_dlkm", - - // from android_rootdirs in build/make/target/product/generic/Android.bp - "system_ext", - "product", - }) + fsProps.Dirs = proptools.NewSimpleConfigurable(commonPartitionDirs) case "system_ext": if partitionVars.ProductFsverityGenerateMetadata { fsProps.Fsverity.Inputs = []string{ @@ -438,22 +329,35 @@ func partitionSpecificFsProps(ctx android.EarlyModuleContext, fsProps *filesyste }) } case "recovery": - // Following https://cs.android.com/android/platform/superproject/main/+/main:build/make/core/Makefile;l=2826;drc=ad7cfb56010cb22c3aa0e70cf71c804352553526 - fsProps.Dirs = android.NewSimpleConfigurable([]string{ + dirs := append(commonPartitionDirs, []string{ + "odm_file_contexts", + "odm_property_contexts", + "plat_file_contexts", + "plat_property_contexts", + "plat_service_contexts", + "product_file_contexts", + "product_property_contexts", + "product_service_contexts", "sdcard", - "tmp", - }) - fsProps.Symlinks = []filesystem.SymlinkDefinition{ - { - Target: proptools.StringPtr("/system/bin/init"), - Name: proptools.StringPtr("init"), - }, - { - Target: proptools.StringPtr("prop.default"), - Name: proptools.StringPtr("default.prop"), - }, - } - fsProps.Base_dir = proptools.StringPtr("recovery") + "sepolicy", + "system_ext_file_contexts", + "system_ext_property_contexts", + "system_ext_service_contexts", + "vendor_file_contexts", + "vendor_property_contexts", + "vendor_service_contexts", + }...) + + dirsWithRoot := make([]string, len(dirs)) + for i, dir := range dirs { + dirsWithRoot[i] = filepath.Join("root", dir) + } + + fsProps.Dirs = proptools.NewSimpleConfigurable(dirsWithRoot) + fsProps.Symlinks = symlinksWithNamePrefix(append(commonSymlinksFromRoot, filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("prop.default"), + Name: proptools.StringPtr("default.prop"), + }), "root") } } @@ -586,6 +490,7 @@ func (f *filesystemCreator) createPrebuiltKernelModules(ctx android.LoadHookCont Load_by_default *bool Blocklist_file *string Options_file *string + Strip_debug_symbols *bool }{ Name: proptools.StringPtr(name), } @@ -601,6 +506,7 @@ func (f *filesystemCreator) createPrebuiltKernelModules(ctx android.LoadHookCont if blocklistFile := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.SystemKernelBlocklistFile; blocklistFile != "" { props.Blocklist_file = proptools.StringPtr(blocklistFile) } + props.Strip_debug_symbols = proptools.BoolPtr(false) case "vendor_dlkm": props.Srcs = android.ExistentPathsForSources(ctx, ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.VendorKernelModules).Strings() if len(ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.SystemKernelModules) > 0 { @@ -610,12 +516,14 @@ func (f *filesystemCreator) createPrebuiltKernelModules(ctx android.LoadHookCont if blocklistFile := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.VendorKernelBlocklistFile; blocklistFile != "" { props.Blocklist_file = proptools.StringPtr(blocklistFile) } + props.Strip_debug_symbols = proptools.BoolPtr(false) case "odm_dlkm": props.Srcs = android.ExistentPathsForSources(ctx, ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.OdmKernelModules).Strings() props.Odm_dlkm_specific = proptools.BoolPtr(true) if blocklistFile := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.OdmKernelBlocklistFile; blocklistFile != "" { props.Blocklist_file = proptools.StringPtr(blocklistFile) } + props.Strip_debug_symbols = proptools.BoolPtr(false) case "vendor_ramdisk": props.Srcs = android.ExistentPathsForSources(ctx, ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.VendorRamdiskKernelModules).Strings() props.Vendor_ramdisk = proptools.BoolPtr(true) diff --git a/fsgen/fsgen_mutators.go b/fsgen/fsgen_mutators.go index f0a54db3a..20e4c3e72 100644 --- a/fsgen/fsgen_mutators.go +++ b/fsgen/fsgen_mutators.go @@ -164,6 +164,7 @@ func createFsGenState(ctx android.LoadHookContext, generatedPrebuiltEtcModuleNam // Add common resources `prebuilt_res` module as dep of recovery partition (*fsGenState.fsDeps["recovery"])[fmt.Sprintf("recovery-resources-common-%s", getDpi(ctx))] = defaultDepCandidateProps(ctx.Config()) + (*fsGenState.fsDeps["recovery"])[getRecoveryFontModuleName(ctx)] = defaultDepCandidateProps(ctx.Config()) return &fsGenState }).(*FsGenState) diff --git a/fsgen/util.go b/fsgen/util.go index 9ab3ad809..008f9fef3 100644 --- a/fsgen/util.go +++ b/fsgen/util.go @@ -16,6 +16,7 @@ package fsgen import ( "android/soong/android" + "android/soong/filesystem" "fmt" "strconv" "strings" @@ -58,3 +59,21 @@ func getDpi(ctx android.LoadHookContext) string { return recoveryDensity } + +// Returns the name of the appropriate prebuilt module for installing font.png file. +// https://cs.android.com/android/platform/superproject/main/+/main:build/make/core/Makefile;l=2536;drc=a6af369e71ded123734523ea640b97b70a557cb9 +func getRecoveryFontModuleName(ctx android.LoadHookContext) string { + if android.InList(getDpi(ctx), []string{"xxxhdpi", "xxhdpi", "xhdpi"}) { + return "recovery-fonts-18" + } + return "recovery-fonts-12" +} + +// Returns a new list of symlinks with prefix added to the dest directory for all symlinks +func symlinksWithNamePrefix(symlinks []filesystem.SymlinkDefinition, prefix string) []filesystem.SymlinkDefinition { + ret := make([]filesystem.SymlinkDefinition, len(symlinks)) + for i, symlink := range symlinks { + ret[i] = symlink.CopyWithNamePrefix(prefix) + } + return ret +} diff --git a/java/builder.go b/java/builder.go index 895ddb6f9..01fbbddf5 100644 --- a/java/builder.go +++ b/java/builder.go @@ -46,6 +46,7 @@ var ( `mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` + `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` + `(if [ -s $srcJarDir/list ] || [ -s $out.rsp ] ; then ` + + `${config.FindInputDeltaCmd} --template '' --target "$out" --inputs_file "$out.rsp" && ` + `${config.SoongJavacWrapper} $javaTemplate${config.JavacCmd} ` + `${config.JavacHeapFlags} ${config.JavacVmFlags} ${config.CommonJdkFlags} ` + `$processorpath $processor $javacFlags $bootClasspath $classpath ` + @@ -55,8 +56,10 @@ var ( `$zipTemplate${config.SoongZipCmd} -jar -o $out.tmp -C $outDir -D $outDir && ` + `if ! cmp -s "$out.tmp" "$out"; then mv "$out.tmp" "$out"; fi && ` + `if ! cmp -s "$annoSrcJar.tmp" "$annoSrcJar"; then mv "$annoSrcJar.tmp" "$annoSrcJar"; fi && ` + + `if [[ -f "$out.pc_state.new" ]]; then mv "$out.pc_state.new" "$out.pc_state"; fi && ` + `rm -rf "$srcJarDir" "$outDir"`, CommandDeps: []string{ + "${config.FindInputDeltaCmd}", "${config.JavacCmd}", "${config.SoongZipCmd}", "${config.ZipSyncCmd}", diff --git a/java/config/config.go b/java/config/config.go index 87703d821..7c29722a2 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -159,6 +159,7 @@ func init() { pctx.SourcePathVariable("ResourceProcessorBusyBox", "prebuilts/bazel/common/android_tools/android_tools/all_android_tools_deploy.jar") pctx.HostBinToolVariable("GenKotlinBuildFileCmd", "gen-kotlin-build-file") + pctx.HostBinToolVariable("FindInputDeltaCmd", "find_input_delta") pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh") pctx.SourcePathVariable("PackageCheckCmd", "build/soong/scripts/package-check.sh") diff --git a/java/gen.go b/java/gen.go index 1b4f4c7dc..aab841851 100644 --- a/java/gen.go +++ b/java/gen.go @@ -26,15 +26,14 @@ import ( ) func init() { - pctx.SourcePathVariable("logtagsCmd", "build/make/tools/java-event-log-tags.py") - pctx.SourcePathVariable("logtagsLib", "build/make/tools/event_log_tags.py") + pctx.HostBinToolVariable("logtagsCmd", "java-event-log-tags") } var ( logtags = pctx.AndroidStaticRule("logtags", blueprint.RuleParams{ Command: "$logtagsCmd -o $out $in", - CommandDeps: []string{"$logtagsCmd", "$logtagsLib"}, + CommandDeps: []string{"$logtagsCmd"}, }) ) diff --git a/java/kotlin.go b/java/kotlin.go index f42d16304..e1a3f71a3 100644 --- a/java/kotlin.go +++ b/java/kotlin.go @@ -181,6 +181,7 @@ var kaptStubs = pctx.AndroidRemoteStaticRule("kaptStubs", android.RemoteRuleSupp Command: `rm -rf "$srcJarDir" "$kotlinBuildFile" "$kaptDir" && ` + `mkdir -p "$srcJarDir" "$kaptDir/sources" "$kaptDir/classes" && ` + `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` + + `${config.FindInputDeltaCmd} --template '' --target "$out" --inputs_file "$out.rsp" && ` + `${config.GenKotlinBuildFileCmd} --classpath "$classpath" --name "$name"` + ` --srcs "$out.rsp" --srcs "$srcJarDir/list"` + ` $commonSrcFilesArg --out "$kotlinBuildFile" && ` + @@ -197,8 +198,10 @@ var kaptStubs = pctx.AndroidRemoteStaticRule("kaptStubs", android.RemoteRuleSupp `$kaptProcessor ` + `-Xbuild-file=$kotlinBuildFile && ` + `${config.SoongZipCmd} -jar -write_if_changed -o $out -C $kaptDir/stubs -D $kaptDir/stubs && ` + + `if [[ -f "$out.pc_state.new" ]]; then mv "$out.pc_state.new" "$out.pc_state"; fi && ` + `rm -rf "$srcJarDir"`, CommandDeps: []string{ + "${config.FindInputDeltaCmd}", "${config.KotlincCmd}", "${config.KotlinCompilerJar}", "${config.KotlinKaptJar}", diff --git a/kernel/prebuilt_kernel_modules.go b/kernel/prebuilt_kernel_modules.go index 001a1e732..ec7a9714b 100644 --- a/kernel/prebuilt_kernel_modules.go +++ b/kernel/prebuilt_kernel_modules.go @@ -67,6 +67,10 @@ type prebuiltKernelModulesProperties struct { // Whether this module is directly installable to one of the partitions. Default is true Installable *bool + + // Whether debug symbols should be stripped from the *.ko files. + // Defaults to true. + Strip_debug_symbols *bool } // prebuilt_kernel_modules installs a set of prebuilt kernel module files to the correct directory. @@ -100,7 +104,9 @@ func (pkm *prebuiltKernelModules) GenerateAndroidBuildActions(ctx android.Module systemModules := android.PathsForModuleSrc(ctx, pkm.properties.System_deps) depmodOut := pkm.runDepmod(ctx, modules, systemModules) - strippedModules := stripDebugSymbols(ctx, modules) + if proptools.BoolDefault(pkm.properties.Strip_debug_symbols, true) { + modules = stripDebugSymbols(ctx, modules) + } installDir := android.PathForModuleInstall(ctx, "lib", "modules") // Kernel module is installed to vendor_ramdisk/lib/modules regardless of product @@ -114,7 +120,7 @@ func (pkm *prebuiltKernelModules) GenerateAndroidBuildActions(ctx android.Module installDir = installDir.Join(ctx, pkm.KernelVersion()) } - for _, m := range strippedModules { + for _, m := range modules { ctx.InstallFile(installDir, filepath.Base(m.String()), m) } ctx.InstallFile(installDir, "modules.load", depmodOut.modulesLoad) @@ -165,9 +171,9 @@ var ( }, "stripCmd") ) -func stripDebugSymbols(ctx android.ModuleContext, modules android.Paths) android.OutputPaths { +func stripDebugSymbols(ctx android.ModuleContext, modules android.Paths) android.Paths { dir := android.PathForModuleOut(ctx, "stripped").OutputPath - var outputs android.OutputPaths + var outputs android.Paths for _, m := range modules { stripped := dir.Join(ctx, filepath.Base(m.String())) @@ -305,7 +311,7 @@ func (pkm *prebuiltKernelModules) runDepmod(ctx android.ModuleContext, modules a finalModulesDep := modulesDep // Add a leading slash to paths in modules.dep of android dlkm if ctx.InstallInSystemDlkm() || ctx.InstallInVendorDlkm() || ctx.InstallInOdmDlkm() { - finalModulesDep := modulesDep.ReplaceExtension(ctx, "intermediates") + finalModulesDep = modulesDep.ReplaceExtension(ctx, "intermediates") ctx.Build(pctx, android.BuildParams{ Rule: addLeadingSlashToPaths, Input: modulesDep, |