Commit c88f68ec authored by Fam Zheng's avatar Fam Zheng Committed by Paolo Bonzini
Browse files

rules.mak: Fix module build



Module build is broken since commit c261d774 ( 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: default avatarBharata B Rao <bharata.rao@gmail.com>
Tested-by: default avatarBharata B Rao <bharata.rao@gmail.com>
Signed-off-by: default avatarFam Zheng <famz@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 6f84da3a
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -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