mirror of https://gitee.com/openkylin/qemu.git
rules.mak: fix $(obj) to a real relative path
Makefile.target includes rule.mak and unnested common-obj-y, then prefix them with '../', this will ignore object specific QEMU_CFLAGS in subdir Makefile.objs: $(obj)/curl.o: QEMU_CFLAGS += $(CURL_CFLAGS) Because $(obj) here is './block', instead of '../block'. This doesn't hurt compiling because we basically build all .o from top Makefile, before entering Makefile.target, but it will affact arriving per-object libs support. The starting point of $(obj) is passed in as argument of unnest-vars, as well as nested variables, so that different Makefiles can pass in a right value. Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
10f5bff622
commit
ba1183da9a
14
Makefile
14
Makefile
|
@ -122,6 +122,16 @@ defconfig:
|
||||||
|
|
||||||
ifneq ($(wildcard config-host.mak),)
|
ifneq ($(wildcard config-host.mak),)
|
||||||
include $(SRC_PATH)/Makefile.objs
|
include $(SRC_PATH)/Makefile.objs
|
||||||
|
endif
|
||||||
|
|
||||||
|
dummy := $(call unnest-vars,, \
|
||||||
|
stub-obj-y \
|
||||||
|
util-obj-y \
|
||||||
|
qga-obj-y \
|
||||||
|
block-obj-y \
|
||||||
|
common-obj-y)
|
||||||
|
|
||||||
|
ifneq ($(wildcard config-host.mak),)
|
||||||
include $(SRC_PATH)/tests/Makefile
|
include $(SRC_PATH)/tests/Makefile
|
||||||
endif
|
endif
|
||||||
ifeq ($(CONFIG_SMARTCARD_NSS),y)
|
ifeq ($(CONFIG_SMARTCARD_NSS),y)
|
||||||
|
@ -130,6 +140,10 @@ endif
|
||||||
|
|
||||||
all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all
|
all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all
|
||||||
|
|
||||||
|
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
|
||||||
|
|
||||||
|
vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
|
||||||
|
|
||||||
config-host.h: config-host.h-timestamp
|
config-host.h: config-host.h-timestamp
|
||||||
config-host.h-timestamp: config-host.mak
|
config-host.h-timestamp: config-host.mak
|
||||||
qemu-options.def: $(SRC_PATH)/qemu-options.hx
|
qemu-options.def: $(SRC_PATH)/qemu-options.hx
|
||||||
|
|
|
@ -41,7 +41,7 @@ libcacard-y += libcacard/vcardt.o
|
||||||
# single QEMU executable should support all CPUs and machines.
|
# single QEMU executable should support all CPUs and machines.
|
||||||
|
|
||||||
ifeq ($(CONFIG_SOFTMMU),y)
|
ifeq ($(CONFIG_SOFTMMU),y)
|
||||||
common-obj-y = $(block-obj-y) blockdev.o blockdev-nbd.o block/
|
common-obj-y = blockdev.o blockdev-nbd.o block/
|
||||||
common-obj-y += net/
|
common-obj-y += net/
|
||||||
common-obj-y += qdev-monitor.o device-hotplug.o
|
common-obj-y += qdev-monitor.o device-hotplug.o
|
||||||
common-obj-$(CONFIG_WIN32) += os-win32.o
|
common-obj-$(CONFIG_WIN32) += os-win32.o
|
||||||
|
@ -111,18 +111,3 @@ version-lobj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.lo
|
||||||
# by libqemuutil.a. These should be moved to a separate .json schema.
|
# by libqemuutil.a. These should be moved to a separate .json schema.
|
||||||
qga-obj-y = qga/ qapi-types.o qapi-visit.o
|
qga-obj-y = qga/ qapi-types.o qapi-visit.o
|
||||||
qga-vss-dll-obj-y = qga/
|
qga-vss-dll-obj-y = qga/
|
||||||
|
|
||||||
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
|
|
||||||
|
|
||||||
vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
|
|
||||||
|
|
||||||
QEMU_CFLAGS+=$(GLIB_CFLAGS)
|
|
||||||
|
|
||||||
nested-vars += \
|
|
||||||
stub-obj-y \
|
|
||||||
util-obj-y \
|
|
||||||
qga-obj-y \
|
|
||||||
qga-vss-dll-obj-y \
|
|
||||||
block-obj-y \
|
|
||||||
common-obj-y
|
|
||||||
dummy := $(call unnest-vars)
|
|
||||||
|
|
|
@ -139,13 +139,22 @@ endif # CONFIG_SOFTMMU
|
||||||
# Workaround for http://gcc.gnu.org/PR55489, see configure.
|
# Workaround for http://gcc.gnu.org/PR55489, see configure.
|
||||||
%/translate.o: QEMU_CFLAGS += $(TRANSLATE_OPT_CFLAGS)
|
%/translate.o: QEMU_CFLAGS += $(TRANSLATE_OPT_CFLAGS)
|
||||||
|
|
||||||
nested-vars += obj-y
|
dummy := $(call unnest-vars,,obj-y)
|
||||||
|
|
||||||
# This resolves all nested paths, so it must come last
|
# we are making another call to unnest-vars with different vars, protect obj-y,
|
||||||
|
# it can be overriden in subdir Makefile.objs
|
||||||
|
obj-y-save := $(obj-y)
|
||||||
|
|
||||||
|
block-obj-y :=
|
||||||
|
common-obj-y :=
|
||||||
include $(SRC_PATH)/Makefile.objs
|
include $(SRC_PATH)/Makefile.objs
|
||||||
|
dummy := $(call unnest-vars,..,block-obj-y common-obj-y)
|
||||||
|
|
||||||
all-obj-y = $(obj-y)
|
# Now restore obj-y
|
||||||
all-obj-y += $(addprefix ../, $(common-obj-y))
|
obj-y := $(obj-y-save)
|
||||||
|
|
||||||
|
all-obj-y = $(obj-y) $(common-obj-y)
|
||||||
|
all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y)
|
||||||
|
|
||||||
ifndef CONFIG_HAIKU
|
ifndef CONFIG_HAIKU
|
||||||
LIBS+=-lm
|
LIBS+=-lm
|
||||||
|
|
|
@ -2360,6 +2360,7 @@ fi
|
||||||
if $pkg_config --atleast-version=$glib_req_ver gthread-2.0; then
|
if $pkg_config --atleast-version=$glib_req_ver gthread-2.0; then
|
||||||
glib_cflags=`$pkg_config --cflags gthread-2.0`
|
glib_cflags=`$pkg_config --cflags gthread-2.0`
|
||||||
glib_libs=`$pkg_config --libs gthread-2.0`
|
glib_libs=`$pkg_config --libs gthread-2.0`
|
||||||
|
CFLAGS="$glib_cflags $CFLAGS"
|
||||||
LIBS="$glib_libs $LIBS"
|
LIBS="$glib_libs $LIBS"
|
||||||
libs_qga="$glib_libs $libs_qga"
|
libs_qga="$glib_libs $libs_qga"
|
||||||
else
|
else
|
||||||
|
|
14
rules.mak
14
rules.mak
|
@ -146,9 +146,6 @@ clean: clean-timestamp
|
||||||
|
|
||||||
# magic to descend into other directories
|
# magic to descend into other directories
|
||||||
|
|
||||||
obj := .
|
|
||||||
old-nested-dirs :=
|
|
||||||
|
|
||||||
define push-var
|
define push-var
|
||||||
$(eval save-$2-$1 = $(value $1))
|
$(eval save-$2-$1 = $(value $1))
|
||||||
$(eval $1 :=)
|
$(eval $1 :=)
|
||||||
|
@ -162,9 +159,11 @@ endef
|
||||||
|
|
||||||
define unnest-dir
|
define unnest-dir
|
||||||
$(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
|
$(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
|
||||||
$(eval obj := $(obj)/$1)
|
$(eval obj-parent-$1 := $(obj))
|
||||||
|
$(eval obj := $(if $(obj),$(obj)/$1,$1))
|
||||||
$(eval include $(SRC_PATH)/$1/Makefile.objs)
|
$(eval include $(SRC_PATH)/$1/Makefile.objs)
|
||||||
$(eval obj := $(patsubst %/$1,%,$(obj)))
|
$(eval obj := $(obj-parent-$1))
|
||||||
|
$(eval obj-parent-$1 := )
|
||||||
$(foreach var,$(nested-vars),$(call pop-var,$(var),$1/))
|
$(foreach var,$(nested-vars),$(call pop-var,$(var),$1/))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -179,7 +178,12 @@ $(if $(nested-dirs),
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define unnest-vars
|
define unnest-vars
|
||||||
|
$(eval obj := $1)
|
||||||
|
$(eval nested-vars := $2)
|
||||||
|
$(eval old-nested-dirs := )
|
||||||
$(call unnest-vars-1)
|
$(call unnest-vars-1)
|
||||||
|
$(if $1,$(foreach v,$(nested-vars),$(eval \
|
||||||
|
$v := $(addprefix $1/,$($v)))))
|
||||||
$(foreach var,$(nested-vars),$(eval $(var) := $(filter-out %/, $($(var)))))
|
$(foreach var,$(nested-vars),$(eval $(var) := $(filter-out %/, $($(var)))))
|
||||||
$(shell mkdir -p $(sort $(foreach var,$(nested-vars),$(dir $($(var))))))
|
$(shell mkdir -p $(sort $(foreach var,$(nested-vars),$(dir $($(var))))))
|
||||||
$(foreach var,$(nested-vars), $(eval \
|
$(foreach var,$(nested-vars), $(eval \
|
||||||
|
|
Loading…
Reference in New Issue