[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 1/3] Allow explicit module dependencies
From: |
Oliver Steffen |
Subject: |
[PATCH v3 1/3] Allow explicit module dependencies |
Date: |
Thu, 16 Nov 2023 16:37:38 +0100 |
The build system deduces inter-module dependencies from the symbols
required and exported by the modules. This works well, except for some
rare cases where the dependency is indirect or hidden. A module might
not make use of any function of some other module, but still expect its
functionality to be available to GRUB.
To solve this, introduce a new file (currently empty) called
extra_deps.lst to track these cases manually. This file gets
processed in the same way as the (automatically generated) syminfo.lst,
making it possible to inject data into the dependency resolver.
Since *.lst files are set to be ignored by git, add an exception for
extra_deps.lst.
Additionally, introduce a new keyword for the syminfo.lst syntax:
"depends" allows specifying a module dependency directly:
depends <module> <depdendency>...
Signed-off-by: Oliver Steffen <osteffen@redhat.com>
---
.gitignore | 1 +
grub-core/Makefile.am | 4 ++--
grub-core/extra_deps.lst | 0
grub-core/genmoddep.awk | 4 ++++
4 files changed, 7 insertions(+), 2 deletions(-)
create mode 100644 grub-core/extra_deps.lst
diff --git a/.gitignore b/.gitignore
index 11fcecf5c..4d0dfb700 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@
*.img
*.log
*.lst
+!/grub-core/extra_deps.lst
*.marker
*.mod
*.o
diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
index f0cb2f2cc..b8173f4e1 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
@@ -452,8 +452,8 @@ crypto.lst: $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst
platform_DATA += crypto.lst
CLEANFILES += crypto.lst
-syminfo.lst: gensyminfo.sh kernel_syms.lst $(MODULE_FILES)
- cat kernel_syms.lst > $@.new
+syminfo.lst: gensyminfo.sh kernel_syms.lst extra_deps.lst $(MODULE_FILES)
+ cat kernel_syms.lst extra_deps.lst > $@.new
for m in $(MODULE_FILES); do \
sh $< $$m >> $@.new || exit 1; \
done
diff --git a/grub-core/extra_deps.lst b/grub-core/extra_deps.lst
new file mode 100644
index 000000000..e69de29bb
diff --git a/grub-core/genmoddep.awk b/grub-core/genmoddep.awk
index 247436392..cc987a53a 100644
--- a/grub-core/genmoddep.awk
+++ b/grub-core/genmoddep.awk
@@ -31,6 +31,10 @@ BEGIN {
printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr";
error++;
}
+ } else if ($1 == "depends") {
+ for (i = 3; i <= NF; i++) {
+ modtab[$2] = modtab[$2] " " $i;
+ }
}
else {
printf "error: %u: unrecognized input format\n", NR >"/dev/stderr";
--
2.41.0