build-sys hack: link with whole .fa archives
In order to link the *-obj-y files into tests, we will make static libraries of them in Meson, and then link them as whole archives into the tests. To separate regular static libraries from link-whole libraries, give them a different file extension. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
fc92989286
commit
1f0a1d8a51
16
rules.mak
16
rules.mak
@ -39,6 +39,13 @@ find-symbols = $(if $1, $(sort $(shell $(NM) -P -g $1 | $2)))
|
||||
defined-symbols = $(call find-symbols,$1,awk '$$2!="U"{print $$1}')
|
||||
undefined-symbols = $(call find-symbols,$1,awk '$$2=="U"{print $$1}')
|
||||
|
||||
WL := -Wl,
|
||||
ifdef CONFIG_DARWIN
|
||||
whole-archive = $(WL)-force_load,$1
|
||||
else
|
||||
whole-archive = $(WL)--whole-archive $1 $(WL)--no-whole-archive
|
||||
endif
|
||||
|
||||
# All the .mo objects in -m variables are also added into corresponding -y
|
||||
# variable in unnest-vars, but filtered out here, when LINK is called.
|
||||
#
|
||||
@ -54,10 +61,11 @@ undefined-symbols = $(call find-symbols,$1,awk '$$2=="U"{print $$1}')
|
||||
# This is necessary because the exectuable itself may not use the function, in
|
||||
# which case the function would not be linked in. Then the DSO loading will
|
||||
# fail because of the missing symbol.
|
||||
process-archive-undefs = $(filter-out %.a %.mo,$1) \
|
||||
process-archive-undefs = $(filter-out %.a %.fa %.mo,$1) \
|
||||
$(addprefix $(WL_U), \
|
||||
$(filter $(call defined-symbols,$(filter %.a, $1)), \
|
||||
$(filter $(call defined-symbols,$(filter %.a %.fa, $1)), \
|
||||
$(call undefined-symbols,$(filter %.mo,$1)))) \
|
||||
$(foreach l,$(filter %.fa,$1),$(call whole-archive,$l)) \
|
||||
$(filter %.a,$1)
|
||||
|
||||
extract-libs = $(strip $(foreach o,$(filter-out %.mo,$1),$($o-libs)))
|
||||
@ -122,7 +130,7 @@ LD_REL := $(CC) -nostdlib $(LD_REL_FLAGS)
|
||||
modules:
|
||||
|
||||
%$(EXESUF): %.o
|
||||
$(call LINK,$(filter %.o %.a %.mo, $^))
|
||||
$(call LINK,$(filter %.o %.a %.mo %.fa, $^))
|
||||
|
||||
%.a:
|
||||
$(call quiet-command,rm -f $@ && $(AR) rcs $@ $^,"AR","$(TARGET_DIR)$@")
|
||||
@ -378,7 +386,7 @@ define unnest-vars
|
||||
$(error $o added in $v but $o-objs is not set)))
|
||||
$(shell mkdir -p ./ $(sort $(dir $($v))))
|
||||
# Include all the .d files
|
||||
$(eval -include $(patsubst %.o,%.d,$(patsubst %.mo,%.d,$($v))))
|
||||
$(eval -include $(patsubst %.o,%.d,$(patsubst %.mo,%.d,$(filter %.o,$($v)))))
|
||||
$(eval $v := $(filter-out %/,$($v))))
|
||||
endef
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user