From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
Cc: "Anthony PERARD" <anthony.perard@citrix.com>,
"Jan Beulich" <jbeulich@suse.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"George Dunlap" <george.dunlap@citrix.com>,
"Ian Jackson" <iwj@xenproject.org>,
"Julien Grall" <julien@xen.org>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Wei Liu" <wl@xen.org>,
"Volodymyr Babchuk" <Volodymyr_Babchuk@epam.com>,
"Bertrand Marquis" <bertrand.marquis@arm.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
"Daniel De Graaf" <dgdegra@tycho.nsa.gov>,
"Daniel P. Smith" <dpsmith@apertussolutions.com>
Subject: [XEN PATCH v8 08/47] build: prepare to always invoke $(MAKE) from xen/, use $(obj)
Date: Thu, 25 Nov 2021 13:39:27 +0000 [thread overview]
Message-ID: <20211125134006.1076646-9-anthony.perard@citrix.com> (raw)
In-Reply-To: <20211125134006.1076646-1-anthony.perard@citrix.com>
In a future patch, when building a subdirectory, we will set
"obj=$subdir" rather than change directory.
Before that, we add "$(obj)" and "$(src)" in as many places as
possible where we will need to know which subdirectory is been built.
"$(obj)" is for files been generated during the build, and "$(src)" is
for files present in the source tree.
For now, we set both to "." in Rules.mk and Makefile.clean.
A few places don't tolerate the addition of "./", this is because make
remove the leading "./" in targets and dependencies in rules, so these
will be change later.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
Notes:
v8:
- acked
- rebased
xen/Rules.mk | 5 ++-
xen/arch/arm/Makefile | 14 ++++----
xen/arch/x86/Makefile | 48 ++++++++++++-------------
xen/arch/x86/boot/Makefile | 14 ++++----
xen/arch/x86/efi/Makefile | 6 ++--
xen/common/Makefile | 8 ++---
xen/common/libelf/Makefile | 4 +--
xen/common/libfdt/Makefile | 6 ++--
xen/include/Makefile | 44 +++++++++++------------
xen/scripts/Makefile.clean | 5 ++-
xen/xsm/flask/Makefile | 36 +++++++++----------
xen/xsm/flask/policy/mkaccess_vector.sh | 7 ++--
12 files changed, 103 insertions(+), 94 deletions(-)
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 77d359bedaf8..60d1d6c4f583 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -3,6 +3,9 @@
# Makefile and are consumed by Rules.mk
#
+obj := .
+src := $(obj)
+
-include $(BASEDIR)/include/config/auto.conf
include $(XEN_ROOT)/Config.mk
@@ -21,7 +24,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
$(foreach r,rel rel.ro,data.$(r).local)
# The filename build.mk has precedence over Makefile
-include $(firstword $(wildcard build.mk) Makefile)
+include $(firstword $(wildcard $(src)/build.mk) $(src)/Makefile)
# Linking
# ---------------------------------------------------------------------------
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 14952275772b..c993ce72a341 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -90,18 +90,18 @@ ifeq ($(CONFIG_ARM_64),y)
ln -sf $(@F) $@.efi
endif
-$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
- $(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
+$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+ $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
$(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
- $(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
+ $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
$(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
- $(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+ $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
$(@D)/.$(@F).1.o -o $@
$(NM) -pa --format=sysv $(@D)/$(@F) \
| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
@@ -111,13 +111,13 @@ $(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
.PHONY: include
include:
-xen.lds: xen.lds.S FORCE
+$(obj)/xen.lds: $(src)/xen.lds.S FORCE
$(call if_changed,cpp_lds_S)
-dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
+$(obj)/dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
.PHONY: clean
clean::
- rm -f xen.lds
+ rm -f $(obj)/xen.lds
rm -f $(BASEDIR)/.xen-syms.[0-9]*
rm -f $(TARGET).efi
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index b469ec8f2452..f9af39ba6138 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -81,7 +81,7 @@ extra-y += asm-macros.i
extra-y += xen.lds
ifneq ($(CONFIG_HVM),y)
-x86_emulate.o: CFLAGS-y += -Wno-unused-label
+$(obj)/x86_emulate.o: CFLAGS-y += -Wno-unused-label
endif
efi-y := $(shell if [ ! -r $(BASEDIR)/include/xen/compile.h -o \
@@ -112,8 +112,8 @@ syms-warn-dup-$(CONFIG_SUPPRESS_DUPLICATE_SYMBOL_WARNINGS) :=
syms-warn-dup-$(CONFIG_ENFORCE_UNIQUE_SYMBOLS) := --error-dup
$(TARGET): TMP = $(@D)/.$(@F).elf32
-$(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
- ./boot/mkelf32 $(notes_phdrs) $(TARGET)-syms $(TMP) $(XEN_IMG_OFFSET) \
+$(TARGET): $(TARGET)-syms $(efi-y) $(obj)/boot/mkelf32
+ $(obj)/boot/mkelf32 $(notes_phdrs) $(TARGET)-syms $(TMP) $(XEN_IMG_OFFSET) \
`$(NM) $(TARGET)-syms | sed -ne 's/^\([^ ]*\) . __2M_rwdata_end$$/0x\1/p'`
od -t x4 -N 8192 $(TMP) | grep 1badb002 > /dev/null || \
{ echo "No Multiboot1 header found" >&2; false; }
@@ -123,27 +123,27 @@ $(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
-$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
- $(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+ $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
$(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
>$(@D)/.$(@F).0.S
$(MAKE) -f $(BASEDIR)/Rules.mk efi-y= $(@D)/.$(@F).0.o
- $(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+ $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
$(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
>$(@D)/.$(@F).1.S
$(MAKE) -f $(BASEDIR)/Rules.mk efi-y= $(@D)/.$(@F).1.o
- $(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+ $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
$(@D)/.$(@F).1.o -o $@
$(NM) -pa --format=sysv $(@D)/$(@F) \
| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
>$(@D)/$(@F).map
rm -f $(@D)/.$(@F).[0-9]* $(@D)/..$(@F).[0-9]*
-note.o: $(TARGET)-syms
+$(obj)/note.o: $(TARGET)-syms
$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
--rename-section=.data=.note.gnu.build-id -S $@.bin $@
@@ -162,25 +162,25 @@ ifdef SOURCE_DATE_EPOCH
EFI_LDFLAGS += --no-insert-timestamp
endif
-$(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
+$(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) $(obj)/efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
ifeq ($(MKRELOC),:)
relocs-dummy :=
$(TARGET).efi: ALT_BASE :=
else
-relocs-dummy := efi/relocs-dummy.o
-$(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
+relocs-dummy := $(obj)/efi/relocs-dummy.o
+$(TARGET).efi: ALT_BASE = 0x$(shell $(NM) $(obj)/efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
endif
ifneq ($(build_id_linker),)
ifeq ($(call ld-ver-build-id,$(LD) $(filter -m%,$(EFI_LDFLAGS))),y)
CFLAGS-y += -DBUILD_ID_EFI
EFI_LDFLAGS += $(build_id_linker)
-note_file := efi/buildid.o
+note_file := $(obj)/efi/buildid.o
# NB: this must be the last input in the linker call, because inputs following
# the -b option will all be treated as being in the specified format.
note_file_option := -b pe-x86-64 $(note_file)
else
-note_file := note.o
+note_file := $(obj)/note.o
endif
else
note_file :=
@@ -189,25 +189,25 @@ note_file_option ?= $(note_file)
ifeq ($(XEN_BUILD_PE),y)
extra-y += efi.lds
-$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
+$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) $(obj)/efi.lds $(obj)/efi/relocs-dummy.o $(obj)/efi/mkreloc
ifeq ($(CONFIG_DEBUG_INFO),y)
$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
endif
$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
- $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< $(relocs-dummy) \
+ $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< $(relocs-dummy) \
$(BASEDIR)/common/symbols-dummy.o $(note_file_option) -o $(@D)/.$(@F).$(base).0 &&) :
$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
$(MAKE) -f $(BASEDIR)/Rules.mk efi-y= $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o
$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
- $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< \
+ $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< \
$(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file_option) -o $(@D)/.$(@F).$(base).1 &&) :
$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
$(MAKE) -f $(BASEDIR)/Rules.mk efi-y= $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
- $(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
+ $(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds -N $< \
$(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file_option) -o $@
$(NM) -pa --format=sysv $(@D)/$(@F) \
| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort >$(@D)/$(@F).map
@@ -219,14 +219,14 @@ $(TARGET).efi: FORCE
endif
# These should already have been rebuilt when building the prerequisite of "prelink.o"
-efi/buildid.o efi/relocs-dummy.o: ;
+$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
.PHONY: include
include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
-asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
+$(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
-$(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
+$(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
echo '#if 0' >$@.new
echo '.if 0' >>$@.new
echo '#endif' >>$@.new
@@ -240,14 +240,14 @@ $(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
echo '#endif' >>$@.new
$(call move-if-changed,$@.new,$@)
-efi.lds: AFLAGS-y += -DEFI
-xen.lds efi.lds: xen.lds.S FORCE
+$(obj)/efi.lds: AFLAGS-y += -DEFI
+$(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
$(call if_changed,cpp_lds_S)
-boot/mkelf32: boot/mkelf32.c
+$(obj)/boot/mkelf32: $(src)/boot/mkelf32.c
$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-efi/mkreloc: efi/mkreloc.c
+$(obj)/efi/mkreloc: $(src)/efi/mkreloc.c
$(HOSTCC) $(HOSTCFLAGS) -g -o $@ $<
.PHONY: clean
diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index d2eb277d428f..0aec8a464364 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -1,8 +1,8 @@
obj-bin-y += head.o
-DEFS_H_DEPS = defs.h $(BASEDIR)/include/xen/stdbool.h
+DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
-CMDLINE_DEPS = $(DEFS_H_DEPS) video.h \
+CMDLINE_DEPS = $(DEFS_H_DEPS) $(src)/video.h \
$(BASEDIR)/include/xen/kconfig.h \
$(BASEDIR)/include/generated/autoconf.h
@@ -14,10 +14,10 @@ RELOC_DEPS = $(DEFS_H_DEPS) \
$(BASEDIR)/include/xen/const.h \
$(BASEDIR)/include/public/arch-x86/hvm/start_info.h
-head.o: cmdline.S reloc.S
+$(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
-cmdline.S: cmdline.c $(CMDLINE_DEPS) build32.lds
- $(MAKE) -f build32.mk $@ CMDLINE_DEPS="$(CMDLINE_DEPS)"
+$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS) $(src)/build32.lds
+ $(MAKE) -f build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
-reloc.S: reloc.c $(RELOC_DEPS) build32.lds
- $(MAKE) -f build32.mk $@ RELOC_DEPS="$(RELOC_DEPS)"
+$(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS) $(src)/build32.lds
+ $(MAKE) -f build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index 87b927ed865b..ac815f02cb5e 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -3,16 +3,16 @@ CFLAGS-y += -fshort-wchar
quiet_cmd_objcopy_o_ihex = OBJCOPY $@
cmd_objcopy_o_ihex = $(OBJCOPY) -I ihex -O binary $< $@
-%.o: %.ihex FORCE
+$(obj)/%.o: $(src)/%.ihex FORCE
$(call if_changed,objcopy_o_ihex)
-boot.init.o: buildid.o
+$(obj)/boot.init.o: $(obj)/buildid.o
EFIOBJ-y := boot.init.o pe.init.o ebmalloc.o runtime.o
EFIOBJ-$(CONFIG_COMPAT) += compat.o
$(call cc-option-add,cflags-stack-boundary,CC,-mpreferred-stack-boundary=4)
-$(EFIOBJ-y): CFLAGS-stack-boundary := $(cflags-stack-boundary)
+$(addprefix $(obj)/,$(EFIOBJ-y)): CFLAGS-stack-boundary := $(cflags-stack-boundary)
obj-y := stub.o
obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ-y))
diff --git a/xen/common/Makefile b/xen/common/Makefile
index 141d7d40d3dc..ca839118e4d1 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -75,13 +75,13 @@ obj-$(CONFIG_NEEDS_LIBELF) += libelf/
obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/
CONF_FILE := $(if $(patsubst /%,,$(KCONFIG_CONFIG)),$(BASEDIR)/)$(KCONFIG_CONFIG)
-config.gz: $(CONF_FILE)
+$(obj)/config.gz: $(CONF_FILE)
gzip -n -c $< >$@
-config_data.o: config.gz
+$(obj)/config_data.o: $(obj)/config.gz
-config_data.S: $(BASEDIR)/tools/binfile FORCE
- $(call if_changed,binfile,config.gz xen_config_data)
+$(obj)/config_data.S: $(BASEDIR)/tools/binfile FORCE
+ $(call if_changed,binfile,$(obj)/config.gz xen_config_data)
targets += config_data.S
clean::
diff --git a/xen/common/libelf/Makefile b/xen/common/libelf/Makefile
index a92326c982e9..8a4522e4e141 100644
--- a/xen/common/libelf/Makefile
+++ b/xen/common/libelf/Makefile
@@ -7,10 +7,10 @@ OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
CFLAGS-y += -Wno-pointer-sign
-libelf.o: libelf-temp.o FORCE
+$(obj)/libelf.o: $(obj)/libelf-temp.o FORCE
$(call if_changed,objcopy)
-libelf-temp.o: $(libelf-objs) FORCE
+$(obj)/libelf-temp.o: $(addprefix $(obj)/,$(libelf-objs)) FORCE
$(call if_changed,ld)
extra-y += libelf-temp.o $(libelf-objs)
diff --git a/xen/common/libfdt/Makefile b/xen/common/libfdt/Makefile
index 6bd207cf8ffa..6708af12e583 100644
--- a/xen/common/libfdt/Makefile
+++ b/xen/common/libfdt/Makefile
@@ -1,4 +1,4 @@
-include Makefile.libfdt
+include $(src)/Makefile.libfdt
SECTIONS := text data $(SPECIAL_DATA_SECTIONS)
OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
@@ -8,10 +8,10 @@ nocov-y += libfdt.o
CFLAGS-y += -I$(BASEDIR)/include/xen/libfdt/
-libfdt.o: libfdt-temp.o FORCE
+$(obj)/libfdt.o: $(obj)/libfdt-temp.o FORCE
$(call if_changed,objcopy)
-libfdt-temp.o: $(LIBFDT_OBJS) FORCE
+$(obj)/libfdt-temp.o: $(addprefix $(obj)/,$(LIBFDT_OBJS)) FORCE
$(call if_changed,ld)
extra-y += libfdt-temp.o $(LIBFDT_OBJS)
diff --git a/xen/include/Makefile b/xen/include/Makefile
index 95daa8a28975..d2f5a956a11a 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -39,57 +39,57 @@ cppflags-$(CONFIG_X86) += -m32
endif
-public-$(CONFIG_X86) := $(wildcard public/arch-x86/*.h public/arch-x86/*/*.h)
-public-$(CONFIG_ARM) := $(wildcard public/arch-arm/*.h public/arch-arm/*/*.h)
+public-$(CONFIG_X86) := $(wildcard $(src)/public/arch-x86/*.h $(src)/public/arch-x86/*/*.h)
+public-$(CONFIG_ARM) := $(wildcard $(src)/public/arch-arm/*.h $(src)/public/arch-arm/*/*.h)
.PHONY: all
-all: $(headers-y)
+all: $(addprefix $(obj)/,$(headers-y))
-compat/%.h: compat/%.i Makefile $(BASEDIR)/tools/compat-build-header.py
- $(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $@ >>$@.new; \
+$(obj)/compat/%.h: $(obj)/compat/%.i $(src)/Makefile $(BASEDIR)/tools/compat-build-header.py
+ $(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $(patsubst $(obj)/%,%,$@) >>$@.new; \
mv -f $@.new $@
-compat/%.i: compat/%.c Makefile
+$(obj)/compat/%.i: $(obj)/compat/%.c $(src)/Makefile
$(CPP) $(filter-out -Wa$(comma)% -include %/include/xen/config.h,$(XEN_CFLAGS)) $(cppflags-y) -o $@ $<
-compat/%.c: public/%.h xlat.lst Makefile $(BASEDIR)/tools/compat-build-source.py
+$(obj)/compat/%.c: $(src)/public/%.h $(src)/xlat.lst $(src)/Makefile $(BASEDIR)/tools/compat-build-source.py
mkdir -p $(@D)
- $(PYTHON) $(BASEDIR)/tools/compat-build-source.py xlat.lst <$< >$@.new
+ $(PYTHON) $(BASEDIR)/tools/compat-build-source.py $(src)/xlat.lst <$< >$@.new
mv -f $@.new $@
-compat/.xlat/%.h: compat/%.h compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh Makefile
+$(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh $(src)/Makefile
export PYTHON=$(PYTHON); \
while read what name; do \
$(SHELL) $(BASEDIR)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
done <$(patsubst compat/%,compat/.xlat/%,$(basename $<)).lst >$@.new
mv -f $@.new $@
-.PRECIOUS: compat/.xlat/%.lst
-compat/.xlat/%.lst: xlat.lst Makefile
+.PRECIOUS: $(obj)/compat/.xlat/%.lst
+$(obj)/compat/.xlat/%.lst: $(src)/xlat.lst $(src)/Makefile
mkdir -p $(@D)
grep -v '^[[:blank:]]*#' $< | sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,[[:blank:]]+$*\.h[[:blank:]]*$$,,p' >$@.new
$(call move-if-changed,$@.new,$@)
-xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' xlat.lst | uniq)
+xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' $(src)/xlat.lst | uniq)
xlat-y := $(filter $(patsubst compat/%,%,$(headers-y)),$(xlat-y))
-compat/xlat.h: $(addprefix compat/.xlat/,$(xlat-y)) config/auto.conf Makefile
+$(obj)/compat/xlat.h: $(addprefix $(obj)/compat/.xlat/,$(xlat-y)) $(obj)/config/auto.conf $(src)/Makefile
cat $(filter %.h,$^) >$@.new
mv -f $@.new $@
ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
-all: headers.chk headers99.chk headers++.chk
+all: $(obj)/headers.chk $(obj)/headers99.chk $(obj)/headers++.chk
-PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h) $(public-y))
+PUBLIC_HEADERS := $(filter-out $(src)/public/arch-% $(src)/public/dom0_ops.h, $(wildcard $(src)/public/*.h $(src)/public/*/*.h) $(public-y))
-PUBLIC_C99_HEADERS := public/io/9pfs.h public/io/pvcalls.h
-PUBLIC_ANSI_HEADERS := $(filter-out public/%ctl.h public/xsm/% public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
+PUBLIC_C99_HEADERS := $(src)/public/io/9pfs.h $(src)/public/io/pvcalls.h
+PUBLIC_ANSI_HEADERS := $(filter-out $(src)/public/%ctl.h $(src)/public/xsm/% $(src)/public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
public/io/9pfs.h-prereq := string
public/io/pvcalls.h-prereq := string
-headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
+$(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(src)/Makefile
for i in $(filter %.h,$^); do \
$(CC) -x c -ansi -Wall -Werror -include stdint.h \
-S -o /dev/null $$i || exit 1; \
@@ -97,7 +97,7 @@ headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
done >$@.new
mv $@.new $@
-headers99.chk: $(PUBLIC_C99_HEADERS) Makefile
+$(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(src)/Makefile
rm -f $@.new
$(foreach i, $(filter %.h,$^), \
echo "#include "\"$(i)\" \
@@ -107,7 +107,7 @@ headers99.chk: $(PUBLIC_C99_HEADERS) Makefile
|| exit $$?; echo $(i) >> $@.new;)
mv $@.new $@
-headers++.chk: $(PUBLIC_HEADERS) Makefile
+$(obj)/headers++.chk: $(PUBLIC_HEADERS) $(src)/Makefile
rm -f $@.new
if ! $(CXX) -v >/dev/null 2>&1; then \
touch $@.new; \
@@ -116,7 +116,7 @@ headers++.chk: $(PUBLIC_HEADERS) Makefile
$(foreach i, $(filter %.h,$^), \
echo "#include "\"$(i)\" \
| $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__ \
- -include stdint.h -include public/xen.h \
+ -include stdint.h -include $(src)/public/xen.h \
$(foreach j, $($(i)-prereq), -include c$(j)) -S -o /dev/null - \
|| exit $$?; echo $(i) >> $@.new;)
mv $@.new $@
@@ -126,7 +126,7 @@ endif
ifeq ($(XEN_TARGET_ARCH),x86_64)
.PHONY: lib-x86-all
lib-x86-all:
- $(MAKE) -C xen/lib/x86 all
+ $(MAKE) -C $(obj)/xen/lib/x86 all
all: lib-x86-all
endif
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index 8582ec35e4da..c3b0681611da 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -3,11 +3,14 @@
# Cleaning up
# ==========================================================================
+obj := .
+src := $(obj)
+
clean::
include $(BASEDIR)/scripts/Kbuild.include
-include Makefile
+include $(src)/Makefile
# Figure out what we need to clean from the various variables
# ==========================================================================
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 11c530dcf458..51fd37f6c4d5 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -4,46 +4,46 @@ obj-y += flask_op.o
obj-y += ss/
-CFLAGS-y += -I./include
+CFLAGS-y += -I$(obj)/include
AWK = awk
-FLASK_H_DEPEND = policy/security_classes policy/initial_sids
-AV_H_DEPEND = policy/access_vectors
+FLASK_H_DEPEND := $(addprefix $(src)/policy/,security_classes initial_sids)
+AV_H_DEPEND = $(src)/policy/access_vectors
-FLASK_H_FILES = include/flask.h include/class_to_string.h include/initial_sid_to_string.h
-AV_H_FILES = include/av_perm_to_string.h include/av_permissions.h
-ALL_H_FILES = $(FLASK_H_FILES) $(AV_H_FILES)
+FLASK_H_FILES := flask.h class_to_string.h initial_sid_to_string.h
+AV_H_FILES := av_perm_to_string.h av_permissions.h
+ALL_H_FILES := $(addprefix include/,$(FLASK_H_FILES) $(AV_H_FILES))
-$(obj-y) ss/built_in.o: $(ALL_H_FILES)
+$(addprefix $(obj)/,$(obj-y)) $(obj)/ss/built_in.o: $(addprefix $(obj)/,$(ALL_H_FILES))
extra-y += $(ALL_H_FILES)
-mkflask := policy/mkflask.sh
+mkflask := $(src)/policy/mkflask.sh
quiet_cmd_mkflask = MKFLASK $@
-cmd_mkflask = $(SHELL) $(mkflask) $(AWK) include $(FLASK_H_DEPEND)
+cmd_mkflask = $(SHELL) $(mkflask) $(AWK) $(obj)/include $(FLASK_H_DEPEND)
-$(subst include/,%/,$(FLASK_H_FILES)): $(FLASK_H_DEPEND) $(mkflask) FORCE
+$(addprefix $(obj)/%/,$(FLASK_H_FILES)): $(FLASK_H_DEPEND) $(mkflask) FORCE
$(call if_changed,mkflask)
-mkaccess := policy/mkaccess_vector.sh
+mkaccess := $(src)/policy/mkaccess_vector.sh
quiet_cmd_mkaccess = MKACCESS VECTOR $@
-cmd_mkaccess = $(SHELL) $(mkaccess) $(AWK) $(AV_H_DEPEND)
+cmd_mkaccess = $(SHELL) $(mkaccess) $(AWK) $(obj)/include $(AV_H_DEPEND)
-$(subst include/,%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
+$(addprefix $(obj)/%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
$(call if_changed,mkaccess)
obj-bin-$(CONFIG_XSM_FLASK_POLICY) += flask-policy.o
-flask-policy.o: policy.bin
+$(obj)/flask-policy.o: $(obj)/policy.bin
-flask-policy.S: BINFILE_FLAGS := -i
-flask-policy.S: $(BASEDIR)/tools/binfile FORCE
- $(call if_changed,binfile,policy.bin xsm_flask_init_policy)
+$(obj)/flask-policy.S: BINFILE_FLAGS := -i
+$(obj)/flask-policy.S: $(BASEDIR)/tools/binfile FORCE
+ $(call if_changed,binfile,$(obj)/policy.bin xsm_flask_init_policy)
targets += flask-policy.S
FLASK_BUILD_DIR := $(CURDIR)
POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
-policy.bin: FORCE
+$(obj)/policy.bin: FORCE
$(MAKE) -f $(XEN_ROOT)/tools/flask/policy/Makefile.common \
-C $(XEN_ROOT)/tools/flask/policy \
FLASK_BUILD_DIR=$(FLASK_BUILD_DIR) POLICY_FILENAME=$(POLICY_SRC)
diff --git a/xen/xsm/flask/policy/mkaccess_vector.sh b/xen/xsm/flask/policy/mkaccess_vector.sh
index 942ede4713f1..ad9772193bff 100755
--- a/xen/xsm/flask/policy/mkaccess_vector.sh
+++ b/xen/xsm/flask/policy/mkaccess_vector.sh
@@ -8,9 +8,12 @@ set -e
awk=$1
shift
+output_dir=$1
+shift
+
# output files
-av_permissions="include/av_permissions.h"
-av_perm_to_string="include/av_perm_to_string.h"
+av_permissions="$output_dir/av_permissions.h"
+av_perm_to_string="$output_dir/av_perm_to_string.h"
cat $* | $awk "
BEGIN {
--
Anthony PERARD
next prev parent reply other threads:[~2021-11-25 13:40 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-25 13:39 [XEN PATCH v8 00/47] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 01/47] build: factorise generation of the linker scripts Anthony PERARD
2021-12-14 16:54 ` Julien Grall
2021-12-14 17:09 ` Anthony PERARD
2021-12-14 17:12 ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 02/47] xen: move include/asm-* to arch/*/include/asm Anthony PERARD
2021-12-02 13:54 ` Jan Beulich
2021-12-14 16:59 ` Julien Grall
2021-12-14 17:39 ` Andrew Cooper
2021-11-25 13:39 ` [XEN PATCH v8 03/47] build: generate "include/xen/compile.h" with if_changed Anthony PERARD
2021-12-02 13:57 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 04/47] build: set XEN_BUILD_EFI earlier Anthony PERARD
2021-12-02 14:06 ` Jan Beulich
2021-12-07 11:04 ` Anthony PERARD
2021-12-07 11:24 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 05/47] build: adjust $(TARGET).efi creation in arch/arm Anthony PERARD
2021-12-14 17:01 ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 06/47] build: avoid re-executing the main Makefile by introducing build.mk Anthony PERARD
2021-12-06 16:42 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 07/47] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile Anthony PERARD
2021-12-06 16:52 ` Jan Beulich
2021-12-07 11:23 ` Anthony PERARD
2021-11-25 13:39 ` Anthony PERARD [this message]
2021-12-14 17:02 ` [XEN PATCH v8 08/47] build: prepare to always invoke $(MAKE) from xen/, use $(obj) Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 09/47] build: rework test/livepatch/Makefile Anthony PERARD
2021-12-06 17:00 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 10/47] build: rework cloc recipe Anthony PERARD
2021-12-06 17:03 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 11/47] build: fix enforce unique symbols for recent clang version Anthony PERARD
2021-12-07 10:23 ` Jan Beulich
2021-12-07 11:33 ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 12/47] build: build everything from the root dir, use obj=$subdir Anthony PERARD
2021-12-07 11:10 ` Jan Beulich
2021-12-16 11:08 ` Anthony PERARD
2021-12-20 11:29 ` Anthony PERARD
2021-12-21 7:55 ` Jan Beulich
2021-12-21 9:30 ` Anthony PERARD
2021-12-14 17:03 ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 13/47] build: introduce if_changed_deps Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 14/47] build: rename __LINKER__ to LINKER_SCRIPT Anthony PERARD
2021-12-14 17:05 ` Julien Grall
2021-12-15 7:49 ` Jan Beulich
2021-12-15 9:20 ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 15/47] build: hook kconfig into xen build system Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 16/47] xen/tools/kconfig: fix build with -Wdeclaration-after-statement Anthony PERARD
2021-12-07 11:20 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 17/47] build: remove KBUILD_ specific from Makefile.host Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 18/47] build: handle always-y and hostprogs-always-y Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 19/47] build: start building the tools with the main makefiles Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 20/47] build: add headers path to CFLAGS once for all archs Anthony PERARD
2021-12-14 17:06 ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 21/47] build: generate x86's asm-macros.h with filechk Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 22/47] build: clean-up "clean" rules of duplication Anthony PERARD
2021-12-14 17:07 ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 23/47] build: rework "clean" to clean from the root dir Anthony PERARD
2021-12-10 13:29 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 24/47] build: use main rune to build host binary x86's mkelf32 and mkreloc Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 25/47] build: rework coverage and ubsan CFLAGS handling Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 26/47] build,x86: remove the need for build32.mk Anthony PERARD
2021-12-21 13:33 ` Jan Beulich
2022-01-18 10:50 ` Anthony PERARD
2022-01-18 13:44 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 27/47] build: grab common EFI source files in arch specific dir Anthony PERARD
2021-12-21 13:53 ` Jan Beulich
2022-01-18 11:06 ` Anthony PERARD
2022-01-18 13:49 ` Jan Beulich
2022-01-18 16:49 ` Anthony PERARD
2022-01-18 16:21 ` Anthony PERARD
2022-01-19 7:46 ` Jan Beulich
2022-01-20 10:16 ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 28/47] build: replace $(BASEDIR) by $(objtree) Anthony PERARD
2021-12-21 13:55 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 29/47] build: replace $(BASEDIR) and use $(srctree) Anthony PERARD
2021-12-21 14:00 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 30/47] build: rework "headers*.chk" prerequisite in include/ Anthony PERARD
2021-12-21 14:07 ` Jan Beulich
2022-01-18 11:41 ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 31/47] build: specify source tree in include/ for prerequisite Anthony PERARD
2021-12-21 14:16 ` Jan Beulich
2022-01-18 12:14 ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 32/47] build: shuffle main Makefile Anthony PERARD
2021-12-21 14:18 ` Jan Beulich
2022-01-20 17:27 ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 33/47] build: adding out-of-tree support to the xen build Anthony PERARD
2022-01-10 11:26 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 34/47] build: add %.E targets Anthony PERARD
2021-12-16 11:18 ` Andrew Cooper
2021-12-16 11:56 ` Anthony PERARD
2021-12-21 14:20 ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 35/47] RFC, no-VPATH: Kconfig: tell where Kconfig files are Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 36/47] RFC, no-VPATH: Kconfig: only ready auto.conf from objtree Anthony PERARD
2021-12-21 14:23 ` Jan Beulich
2021-12-21 15:12 ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 37/47] RFC, no-VPATH: build: remove --include-dir option from MAKEFLAGS Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 38/47] WIP, no-VPATH: rework Makefile.host Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 39/47] RFC, no-VPATH: x86/boot: workaround gcc including the wrong file Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 40/47] RFC, no-VPATH: prepend $(srctree) to source prerequisite Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 41/47] WIP, no-VPATH: build object from generated C files Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 42/47] RFC, no-VPATH: workaround includes in xsm/flask Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 43/47] WIP, no-VPATH: build object from generated assembly source file Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 44/47] WIP, no-VPATH: build object from S source to be in build_in.o Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 45/47] WIP, no-VPATH: build xen, out-of-tree! Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 46/47] RFC, no-VPATH: remove check for clean source tree for out-of-tree builds Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 47/47] WIP: no more link farming for xen-shim Anthony PERARD
2021-12-21 15:26 ` [XEN PATCH v8 00/47] xen: Build system improvements, now with out-of-tree build! Jan Beulich
2022-01-10 11:19 ` Jan Beulich
2022-01-18 10:33 ` Anthony PERARD
2022-01-21 6:59 ` Jan Beulich
2022-01-21 10:34 ` Anthony PERARD
2022-01-21 10:58 ` Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211125134006.1076646-9-anthony.perard@citrix.com \
--to=anthony.perard@citrix.com \
--cc=Volodymyr_Babchuk@epam.com \
--cc=andrew.cooper3@citrix.com \
--cc=bertrand.marquis@arm.com \
--cc=dgdegra@tycho.nsa.gov \
--cc=dpsmith@apertussolutions.com \
--cc=george.dunlap@citrix.com \
--cc=iwj@xenproject.org \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=roger.pau@citrix.com \
--cc=sstabellini@kernel.org \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.