Makefile: Revise support for generated sources

Handle generated source files more independently from normal source
files. This allows mixing of generated specs with existing source
bodies.

As with the source file list, we filter the list of generated sources,
`$(name)-gens`: All spec (.ads) files that have a respective body file
(.adb), are moved into `$(name)-extra-gens`. This way, we can still
add these files as dependencies to all pre-existing source files.

Change-Id: I5479c436f39088ae9d0ebddf9a97446be0f191f3
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/libhwbase/+/27139
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Nico Huber 2018-06-17 17:58:57 +02:00
parent 455ed64bff
commit bd0ed91cb9
2 changed files with 16 additions and 9 deletions

View File

@ -190,12 +190,16 @@ $(name)-ada-dirs := $(sort $(dir $(filter %.ads %.adb,$($(name)-srcs) $($(name)-
# *-srcs. Extract / filter all specification files that have a matching
# body (.adb) file here (specifications without a body are valid sources
# in Ada).
$(name)-extra-specs := \
# $1 source list
filter_extra_specs = \
$(filter \
$(addprefix %/,$(patsubst %.adb,%.ads,$(notdir $(filter %.adb,$($(name)-srcs))))), \
$(filter %.ads,$($(name)-srcs) $($(name)-gens)))
$(addprefix %/,$(patsubst %.adb,%.ads, \
$(notdir $(filter %.adb,$($(name)-srcs) $($(name)-gens))))), \
$(filter %.ads,$(1)))
$(name)-extra-specs := $(call filter_extra_specs,$($(name)-srcs))
$(name)-srcs := $(filter-out $($(name)-extra-specs),$($(name)-srcs))
$(name)-gens := $(filter-out $($(name)-extra-specs),$($(name)-gens))
$(name)-extra-gens := $(call filter_extra_specs,$($(name)-gens))
$(name)-gens := $(filter-out $($(name)-extra-gens),$($(name)-gens))
$(name)-objs := $(call src-to-obj,,$($(name)-srcs) $($(name)-gens))
$(name)-alis := $(call src-to-ali,,$($(name)-srcs) $($(name)-gens))
@ -216,8 +220,8 @@ create_ada_deps = \
$(if $(wildcard $(1)),\
$(filter \
$(addprefix %/,$(shell sed -ne's/^D \([^\t]\+\).*$$/\1/p' $(1) 2>/dev/null)), \
$($(name)-srcs) $($(name)-gens) $($(name)-extra-specs)), \
$($(name)-gens))
$($(name)-srcs) $($(name)-gens) $($(name)-extra-specs) $($(name)-extra-gens)), \
$($(name)-gens) $($(name)-extra-gens))
# Adds dependency rules
# $1 source file
@ -283,7 +287,7 @@ $(call src-to-obj,,$(filter %.c,$($(name)-srcs))): $(obj)/%.o: %.c
$(shell mkdir -p $(alldirs))
$(name)-install-srcs = $(sort \
$($(name)-extra-specs) $(filter %.ads,$($(name)-srcs) $($(name)-gens)) \
$($(name)-extra-specs) $($(name)-extra-gens) $(filter %.ads,$($(name)-srcs) $($(name)-gens)) \
$(foreach adb,$(filter %.adb,$($(name)-srcs)), \
$(shell grep -q '^U .*\<BN\>' $(call src-to-ali,,$(adb)) 2>/dev/null && echo $(adb))))

View File

@ -18,7 +18,8 @@ quote-list = $(subst $(space),$(comma),$(patsubst %,"%",$(1)))
$(name)-exclude-srcs = \
$(filter-out \
$(sort $(notdir $($(name)-proof) $($(name)-srcs) $($(name)-gens) $($(name)-extra-specs))), \
$(sort $(notdir $($(name)-proof) \
$($(name)-srcs) $($(name)-gens) $($(name)-extra-specs) $($(name)-extra-gens))), \
$(sort $(notdir \
$(wildcard $(addsuffix *.ad[sb],$($(name)-proof-dirs))))))
@ -63,7 +64,9 @@ $(libgpr): $$(MAKEFILE_LIST)
echo ' for Object_Dir use external ("obj", "build");' >>$@
echo 'end lib$(name);' >>$@
$(obj)/gnatprove/gnatprove.out: $(gpr) $$($(name)-srcs) $$($(name)-gens) $(obj)/proofmode
$(obj)/gnatprove/gnatprove.out: $$($(name)-srcs) $$($(name)-gens)
$(obj)/gnatprove/gnatprove.out: $$($(name)-extra-specs) $$($(name)-extra-gens)
$(obj)/gnatprove/gnatprove.out: $(gpr) $(obj)/proofmode
gnatprove -P$< $(SPARKFLAGS) -Xobj=$(abspath $(obj))
proof: