From 5b493cd44d2acf515db21c9934e16f91c55451b7 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Thu, 7 Nov 2024 20:55:56 +0000 Subject: Autogenerate vendor_dlkm and odm_dlkm vendor_dlkm has a depdedency on system_dlkm, and its prebuilt kernel modules will be listed as deps. Bug: 377562851 Bug: 377563262 Test: m soong_generated_vendor_dlkm_filesystem_test NOTICE and /lib/modules/modules.blocklist missing Test: m soong_generated_odm_dlkm_filesystem_test NOTICE file missing Test: verified that modules.dep,modules.load are bit identical between kati and soong for AOSP CF Change-Id: If037430313cf10f661bc2bc7bdd468ca3707b2f3 --- fsgen/filesystem_creator.go | 49 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 10 deletions(-) (limited to 'fsgen/filesystem_creator.go') diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go index 5f6475afa..9cada0b36 100644 --- a/fsgen/filesystem_creator.go +++ b/fsgen/filesystem_creator.go @@ -211,6 +211,14 @@ func partitionSpecificFsProps(fsProps *filesystem.FilesystemProperties, partitio } } +var ( + dlkmPartitions = []string{ + "system_dlkm", + "vendor_dlkm", + "odm_dlkm", + } +) + // Creates a soong module to build the given partition. Returns false if we can't support building // it. func (f *filesystemCreator) createPartition(ctx android.LoadHookContext, partitionType string) bool { @@ -226,9 +234,8 @@ func (f *filesystemCreator) createPartition(ctx android.LoadHookContext, partiti fsProps.Linkerconfig.Linker_config_srcs = f.createLinkerConfigSourceFilegroups(ctx, partitionType) } - if partitionType == "system_dlkm" { - kernelModules := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.SystemKernelModules - f.createPrebuiltKernelModules(ctx, partitionType, kernelModules) + if android.InList(partitionType, dlkmPartitions) { + f.createPrebuiltKernelModules(ctx, partitionType) } var module android.Module @@ -249,24 +256,46 @@ func (f *filesystemCreator) createPartition(ctx android.LoadHookContext, partiti // createPrebuiltKernelModules creates `prebuilt_kernel_modules`. These modules will be added to deps of the // autogenerated *_dlkm filsystem modules. Each _dlkm partition should have a single prebuilt_kernel_modules dependency. // This ensures that the depmod artifacts (modules.* installed in /lib/modules/) are generated with a complete view. - -// The input `kernelModules` is a space separated list of .ko files in the workspace. -func (f *filesystemCreator) createPrebuiltKernelModules(ctx android.LoadHookContext, partitionType string, kernelModules []string) { +func (f *filesystemCreator) createPrebuiltKernelModules(ctx android.LoadHookContext, partitionType string) { fsGenState := ctx.Config().Get(fsGenStateOnceKey).(*FsGenState) name := generatedModuleName(ctx.Config(), fmt.Sprintf("%s-kernel-modules", partitionType)) props := &struct { Name *string Srcs []string + System_deps []string System_dlkm_specific *bool - Vendor_dlkm_specific *bool // TODO (b/377562851) - Odm_dlkm_specific *bool // TODO (b/377563262) + Vendor_dlkm_specific *bool + Odm_dlkm_specific *bool + Load_by_default *bool }{ Name: proptools.StringPtr(name), - Srcs: kernelModules, } - if partitionType == "system_dlkm" { + switch partitionType { + case "system_dlkm": + props.Srcs = ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.SystemKernelModules props.System_dlkm_specific = proptools.BoolPtr(true) + if len(ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.SystemKernelLoadModules) == 0 { + // Create empty modules.load file for system + // https://source.corp.google.com/h/googleplex-android/platform/build/+/ef55daac9954896161b26db4f3ef1781b5a5694c:core/Makefile;l=695-700;drc=549fe2a5162548bd8b47867d35f907eb22332023;bpv=1;bpt=0 + props.Load_by_default = proptools.BoolPtr(false) + } + case "vendor_dlkm": + props.Srcs = ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.VendorKernelModules + if len(ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.SystemKernelModules) > 0 { + props.System_deps = []string{":" + generatedModuleName(ctx.Config(), "system_dlkm-kernel-modules") + "{.modules}"} + } + props.Vendor_dlkm_specific = proptools.BoolPtr(true) + case "odm_dlkm": + props.Srcs = ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.OdmKernelModules + props.Odm_dlkm_specific = proptools.BoolPtr(true) + default: + ctx.ModuleErrorf("DLKM is not supported for %s\n", partitionType) } + + if len(props.Srcs) == 0 { + return // do not generate `prebuilt_kernel_modules` if there are no sources + } + kernelModule := ctx.CreateModuleInDirectory( kernel.PrebuiltKernelModulesFactory, ".", // create in root directory for now -- cgit v1.2.3-59-g8ed1b