Add options_file support for prebuilt_kernel_modules
The build rule for the options file is pretty much identical to that of
the blocklist file, thus this change is inspired from
https://r.android.com/3344224, which added the blocklist_file support
for the module.
Test: diff vendor_ramdisk/lib/modules/modules.options
Bug: 381104942
Change-Id: I3eec03ca5233dce5b8d7ddab3ae50874a52539be
diff --git a/kernel/prebuilt_kernel_modules.go b/kernel/prebuilt_kernel_modules.go
index 13d6482..e4302e1 100644
--- a/kernel/prebuilt_kernel_modules.go
+++ b/kernel/prebuilt_kernel_modules.go
@@ -58,6 +58,9 @@
Blocklist_file *string `android:"path"`
+ // Path to the kernel module options file
+ Options_file *string `android:"path"`
+
// Kernel version that these modules are for. Kernel modules are installed to
// /lib/modules/<kernel_version> directory in the corresponding partition. Default is "".
Kernel_version *string
@@ -112,6 +115,7 @@
ctx.InstallFile(installDir, "modules.softdep", depmodOut.modulesSoftdep)
ctx.InstallFile(installDir, "modules.alias", depmodOut.modulesAlias)
pkm.installBlocklistFile(ctx, installDir)
+ pkm.installOptionsFile(ctx, installDir)
ctx.SetOutputFiles(modules, ".modules")
}
@@ -130,6 +134,20 @@
ctx.InstallFile(installDir, "modules.blocklist", blocklistOut)
}
+func (pkm *prebuiltKernelModules) installOptionsFile(ctx android.ModuleContext, installDir android.InstallPath) {
+ if pkm.properties.Options_file == nil {
+ return
+ }
+ optionsOut := android.PathForModuleOut(ctx, "modules.options")
+
+ ctx.Build(pctx, android.BuildParams{
+ Rule: processOptionsFile,
+ Input: android.PathForModuleSrc(ctx, proptools.String(pkm.properties.Options_file)),
+ Output: optionsOut,
+ })
+ ctx.InstallFile(installDir, "modules.options", optionsOut)
+}
+
var (
pctx = android.NewPackageContext("android/soong/kernel")
@@ -189,6 +207,19 @@
` END { exit exit_status }'`,
},
)
+ // Remove empty lines. Raise an exception if line is _not_ formatted as `options $name.ko`
+ processOptionsFile = pctx.AndroidStaticRule("process_options_file",
+ blueprint.RuleParams{
+ Command: `rm -rf $out && awk <$in > $out` +
+ ` '/^#/ { print; next }` +
+ ` NF == 0 { next }` +
+ ` NF < 2 || $$1 != "options"` +
+ ` { print "Invalid options line " FNR ": " $$0 >"/dev/stderr";` +
+ ` exit_status = 1; next }` +
+ ` { $$1 = $$1; print }` +
+ ` END { exit exit_status }'`,
+ },
+ )
)
// This is the path in soong intermediates where the .ko files will be copied.