aboutsummaryrefslogtreecommitdiff
path: root/rules.mak
diff options
context:
space:
mode:
authorFam Zheng <famz@redhat.com>2014-02-10 14:48:57 +0800
committerPaolo Bonzini <pbonzini@redhat.com>2014-02-20 13:14:18 +0100
commite26110cfc67d48331a76e9b1e6f7fed7569e1ab3 (patch)
tree9ac70ad405cdf18189017345ee184f268510db3b /rules.mak
parent17969268f5938ae1d7f3dedbd73e507badb6146d (diff)
module: implement module loading
This patch adds loading, stamp checking and initialization of modules. The init function of dynamic module is no longer directly called as __attribute__((constructor)) in static linked version, it is called only after passed the checking of presense of stamp symbol: qemu_stamp_$RELEASEHASH where $RELEASEHASH is generated by hashing version strings and content of configure script. With this, modules built from a different tree/version/configure will not be loaded. The module loading code requires gmodule-2.0. Modules are searched under - CONFIG_MODDIR - executable folder (to allow running qemu-{img,io} in the build directory) - ../ of executable folder (to allow running system emulator in the build directory) Modules are linked under their subdir respectively, then copied to top level of build directory for above convinience, e.g.: $(BUILD_DIR)/block/curl.so -> $(BUILD_DIR)/block-curl.so Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'rules.mak')
-rw-r--r--rules.mak3
1 files changed, 3 insertions, 0 deletions
diff --git a/rules.mak b/rules.mak
index 0abf3d1f36..9dda9f760f 100644
--- a/rules.mak
+++ b/rules.mak
@@ -82,6 +82,8 @@ DSO_CFLAGS := -fPIC -DBUILD_DSO
%$(DSOSUF): LDFLAGS += $(LDFLAGS_SHARED)
%$(DSOSUF): %.mo libqemustub.a
$(call LINK,$^)
+ @# Copy to build root so modules can be loaded when program started without install
+ $(if $(findstring /,$@),$(call quiet-command,cp $@ $(subst /,-,$@), " CP $(subst /,-,$@)"))
.PHONY: modules
modules:
@@ -211,6 +213,7 @@ $(foreach o,$(filter %.o,$($1)),
$(eval $(patsubst %.o,%.mo,$o): $o) \
$(eval $(patsubst %.o,%.mo,$o)-objs := $o))
$(foreach o,$(filter-out $(modules-m), $(patsubst %.o,%.mo,$($1))), \
+ $(eval $o-objs += module-common.o)
$(eval $o: $($o-objs))
$(eval modules-objs-m += $($o-objs))
$(eval modules-m += $o)