build: Track explicit module dependencies in Makefile.core.def

Add a new keyword, "depends", to the module definition syntax
used in Makefile.core.def. This allows specifying explicit module
dependencies together with the module definition.

Do not track the "extra_deps.lst" file in the repository anymore,
it is now auto-generated.

Make use of this new keyword in the bli module definition.

Signed-off-by: Oliver Steffen <osteffen@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Oliver Steffen 2024-02-22 14:32:31 +01:00 committed by Daniel Kiper
parent 8719cc2040
commit 6744840b17
7 changed files with 16 additions and 6 deletions

1
.gitignore vendored
View File

@ -11,7 +11,6 @@
*.img *.img
*.log *.log
*.lst *.lst
!/grub-core/extra_deps.lst
*.marker *.marker
*.mod *.mod
*.o *.o

View File

@ -111,6 +111,7 @@ MOD_FILES =
MODULE_FILES = MODULE_FILES =
MARKER_FILES = MARKER_FILES =
KERNEL_HEADER_FILES = KERNEL_HEADER_FILES =
EXTRA_DEPS =
bin_SCRIPTS = bin_SCRIPTS =
bin_PROGRAMS = bin_PROGRAMS =

View File

@ -631,6 +631,9 @@ def platform_values(defn, platform, suffix):
def extra_dist(defn): def extra_dist(defn):
return foreach_value(defn, "extra_dist", lambda value: value + " ") return foreach_value(defn, "extra_dist", lambda value: value + " ")
def extra_dep(defn):
return foreach_value(defn, "depends", lambda value: value + " ")
def platform_sources(defn, p): return platform_values(defn, p, "") def platform_sources(defn, p): return platform_values(defn, p, "")
def platform_nodist_sources(defn, p): return platform_values(defn, p, "_nodist") def platform_nodist_sources(defn, p): return platform_values(defn, p, "_nodist")
@ -699,6 +702,10 @@ def module(defn, platform):
gvar_add("MOD_FILES", name + ".mod") gvar_add("MOD_FILES", name + ".mod")
gvar_add("MARKER_FILES", name + ".marker") gvar_add("MARKER_FILES", name + ".marker")
gvar_add("CLEANFILES", name + ".marker") gvar_add("CLEANFILES", name + ".marker")
for dep in defn.find_all("depends"):
gvar_add("EXTRA_DEPS", "depends " + name + " " + dep + ":")
output(""" output("""
""" + name + """.marker: $(""" + cname(defn) + """_SOURCES) $(nodist_""" + cname(defn) + """_SOURCES) """ + name + """.marker: $(""" + cname(defn) + """_SOURCES) $(nodist_""" + cname(defn) + """_SOURCES)
$(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname(defn) + """_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname(defn) + """_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1)

View File

@ -454,8 +454,11 @@ crypto.lst: $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst
platform_DATA += crypto.lst platform_DATA += crypto.lst
CLEANFILES += crypto.lst CLEANFILES += crypto.lst
syminfo.lst: gensyminfo.sh kernel_syms.lst $(top_srcdir)/grub-core/extra_deps.lst $(MODULE_FILES) extra_deps.lst:
cat kernel_syms.lst $(top_srcdir)/grub-core/extra_deps.lst > $@.new @echo $(EXTRA_DEPS) | sed "s/\s*:\s*/\n/g" > $@
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 \ for m in $(MODULE_FILES); do \
sh $< $$m >> $@.new || exit 1; \ sh $< $$m >> $@.new || exit 1; \
done done
@ -465,7 +468,7 @@ syminfo.lst: gensyminfo.sh kernel_syms.lst $(top_srcdir)/grub-core/extra_deps.ls
moddep.lst: syminfo.lst genmoddep.awk video.lst moddep.lst: syminfo.lst genmoddep.awk video.lst
cat $< | sort | $(AWK) -f $(srcdir)/genmoddep.awk > $@ || (rm -f $@; exit 1) cat $< | sort | $(AWK) -f $(srcdir)/genmoddep.awk > $@ || (rm -f $@; exit 1)
platform_DATA += moddep.lst platform_DATA += moddep.lst
CLEANFILES += config.log syminfo.lst moddep.lst CLEANFILES += config.log syminfo.lst moddep.lst extra_deps.lst
$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT) build-grub-module-verifier$(BUILD_EXEEXT) $(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT) build-grub-module-verifier$(BUILD_EXEEXT)
TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@ TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@

View File

@ -2598,4 +2598,5 @@ module = {
name = bli; name = bli;
efi = commands/bli.c; efi = commands/bli.c;
enable = efi; enable = efi;
depends = part_gpt;
}; };

View File

@ -1 +0,0 @@
depends bli part_gpt

View File

@ -35,7 +35,7 @@ BEGIN {
for (i = 3; i <= NF; i++) { for (i = 3; i <= NF; i++) {
modtab[$2] = modtab[$2] " " $i; modtab[$2] = modtab[$2] " " $i;
} }
} } else if ($1 == "") {} #Skip empty lines
else { else {
printf "error: %u: unrecognized input format\n", NR >"/dev/stderr"; printf "error: %u: unrecognized input format\n", NR >"/dev/stderr";
error++; error++;