rules.mak: Fix module build
Module build is broken since commit c261d774fb
( rules.mak: Fix DSO
build by pulling in archive symbols). That commit added .mo placeholders
of DSO to -y variables, in order to pull stub symbols to executable. But
the placeholders are unintentionally expanded in -y, rather than
filtered out while linking.
Fix it by moving the -objs expanding to before inserting .mo
placeholders. Note that passing -cflags and -libs to member objects are
also moved to keep it happening before object expanding.
Reported-by: Bharata B Rao <bharata.rao@gmail.com>
Tested-by: Bharata B Rao <bharata.rao@gmail.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
6f84da3a07
commit
c88f68ec3c
23
rules.mak
23
rules.mak
@ -326,7 +326,17 @@ define unnest-vars
|
||||
$(if $1,$(call fix-paths,$1/,,$2))
|
||||
|
||||
# Descend and include every subdir Makefile.objs
|
||||
$(foreach v, $2, $(call unnest-var-recursive,$1,$2,$v))
|
||||
$(foreach v, $2,
|
||||
$(call unnest-var-recursive,$1,$2,$v)
|
||||
# Pass the .mo-cflags and .mo-libs along to its member objects
|
||||
$(foreach o, $(filter %.mo,$($v)),
|
||||
$(foreach p,$($o-objs),
|
||||
$(if $($o-cflags), $(eval $p-cflags += $($o-cflags)))
|
||||
$(if $($o-libs), $(eval $p-libs += $($o-libs))))))
|
||||
|
||||
# For all %.mo objects that are directly added into -y, just expand them
|
||||
$(foreach v,$(filter %-y,$2),
|
||||
$(eval $v := $(foreach o,$($v),$(if $($o-objs),$($o-objs),$o))))
|
||||
|
||||
$(foreach v,$(filter %-m,$2),
|
||||
# All .o found in *-m variables are single object modules, create .mo
|
||||
@ -353,18 +363,9 @@ define unnest-vars
|
||||
# according to .mo-objs. Report error if not set
|
||||
$(if $($o-objs),
|
||||
$(eval $(o:%.mo=%$(DSOSUF)): module-common.o $($o-objs)),
|
||||
$(error $o added in $v but $o-objs is not set))
|
||||
# Pass the .mo-cflags and .mo-libs along to member objects
|
||||
$(foreach p,$($o-objs),
|
||||
$(if $($o-cflags), $(eval $p-cflags += $($o-cflags)))
|
||||
$(if $($o-libs), $(eval $p-libs += $($o-libs)))))
|
||||
$(error $o added in $v but $o-objs is not set)))
|
||||
$(shell mkdir -p ./ $(sort $(dir $($v))))
|
||||
# Include all the .d files
|
||||
$(eval -include $(addsuffix *.d, $(sort $(dir $($v)))))
|
||||
$(eval $v := $(filter-out %/,$($v))))
|
||||
|
||||
# For all %.mo objects that are directly added into -y, expand them to %.mo-objs
|
||||
$(foreach v,$2,
|
||||
$(eval $v := $(foreach o,$($v),$(if $($o-objs),$($o-objs),$o))))
|
||||
|
||||
endef
|
||||
|
Loading…
Reference in New Issue
Block a user