[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 2/8] rule.mak: allow per object cflags and li
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH v6 2/8] rule.mak: allow per object cflags and libs |
Date: |
Wed, 11 Sep 2013 15:43:17 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130805 Thunderbird/17.0.8 |
Il 11/09/2013 15:34, Fam Zheng ha scritto:
> Adds extract-libs in LINK to expand any "per object libs", the syntax to
> define
> such a libs options is like:
>
> foo.o-libs := $(CURL_LIBS)
>
> in block/Makefile.objs.
>
> Similarly,
>
> foo.o-cflags := $(FOO_CFLAGS)
>
> is also supported.
>
> "foo.o" must be listed a nested var (e.g. common-obj-y) to make the
> option variables effective.
>
> Signed-off-by: Fam Zheng <address@hidden>
> ---
> rules.mak | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/rules.mak b/rules.mak
> index 9344c27..b1d53b5 100644
> --- a/rules.mak
> +++ b/rules.mak
> @@ -17,15 +17,17 @@ QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(*D)/$(*F).d
> # Same as -I$(SRC_PATH) -I., but for the nested source/object directories
> QEMU_INCLUDES += -I$(<D) -I$(@D)
>
> +extract-libs = $(strip $(foreach o,$1,$($o-libs)))
> +
> %.o: %.c
> - $(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS)
> $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," CC $(TARGET_DIR)$@")
> + $(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS)
> $(QEMU_DGFLAGS) $(CFLAGS) $(address@hidden) -c -o $@ $<," CC
> $(TARGET_DIR)$@")
> %.o: %.rc
> $(call quiet-command,$(WINDRES) -I. -o $@ $<," RC $(TARGET_DIR)$@")
>
> ifeq ($(LIBTOOL),)
> LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ \
> $(sort $(filter %.o, $1)) $(filter-out %.o, $1) $(version-obj-y) \
> - $(LIBS)," LINK $(TARGET_DIR)$@")
> + $(call extract-libs,$^) $(LIBS)," LINK $(TARGET_DIR)$@")
> else
> LIBTOOL += $(if $(V),,--quiet)
> %.lo: %.c
> @@ -41,7 +43,7 @@ LINK = $(call quiet-command,\
> $(sort $(filter %.o, $1)) $(filter-out %.o, $1) \
> $(if $(filter %.lo %.la,$^),$(version-lobj-y),$(version-obj-y)) \
> $(if $(filter %.lo %.la,$^),$(LIBTOOLFLAGS)) \
> - $(LIBS),$(if $(filter %.lo %.la,$^),"lt LINK ", " LINK
> ")"$(TARGET_DIR)$@")
> + $(call extract-libs,$^) $(LIBS),$(if $(filter %.lo %.la,$^),"lt LINK
> ", " LINK ")"$(TARGET_DIR)$@")
> endif
>
> %.asm: %.S
> @@ -114,11 +116,22 @@ $(eval $1 = $(value save-$2-$1) $$(subdir-$2-$1))
> $(eval save-$2-$1 :=)
> endef
>
> +define fix-obj-vars
> +$(foreach v,$($1), \
> + $(if $($v-cflags), \
> + $(eval $2$v-cflags := $($v-cflags)) \
> + $(eval $v-cflags := )) \
> + $(if $($v-libs), \
> + $(eval $2$v-libs := $($v-libs)) \
> + $(eval $v-libs := )))
> +endef
> +
> define unnest-dir
> $(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
> $(eval obj-parent-$1 := $(obj))
> $(eval obj := $(if $(obj),$(obj)/$1,$1))
> $(eval include $(SRC_PATH)/$1/Makefile.objs)
> +$(foreach v,$(nested-vars),$(call fix-obj-vars,$v,$(if $(obj),$(obj)/)))
> $(eval obj := $(obj-parent-$1))
> $(eval obj-parent-$1 := )
> $(foreach var,$(nested-vars),$(call pop-var,$(var),$1/))
>
I'm not sure this will work for targets in the toplevel directory when
obj-base is not empty. This can be fixed later though, as part of a
general revamping of obj-base. Please add a FIXME comment.
Paolo
[Qemu-devel] [PATCH v6 3/8] Makefile: introduce common-obj-m and block-obj-m for DSO, Fam Zheng, 2013/09/11
[Qemu-devel] [PATCH v6 4/8] module: implement module loading function, Fam Zheng, 2013/09/11