mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
build,x86: remove the need for build32.mk
Rework "arch/x86/boot/Makefile" to allow it to build both file "cmdline.S" and "reloc.S" without "build32.mk". These will now use the main rules for "%.o: %.c", and thus generate a dependency file. (We will not need to track the dependency manually anymore.) But for that, we need to override the main CFLAGS to do a 32bit build. We introduce XEN_TREEWIDE_CFLAGS which can be reused in boot/Makefile, and avoid the need to reparse Config.mk with a different value for XEN_TARGET_ARCH. From this new $(XEN_TREEWIDE_CFLAGS), we only need to change -m64 to have the 32bit flags. Then those are applied only to "cmdline.o" and "reloc.o". Specifically apply the rule "%.S: %.bin" to both cmdline.S and reloc.S to avoid make trying to regenerate other %.S files with it. There is no change expected to the resulting "cmdline.S" and "reloc.S", only the *.o file changes as their symbol for FILE goes from "cmdline.c" to "arch/x86//cmdline.c". (No idea why "boot" is missing from the string.) (I've only check with GCC, not clang.) Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
1f410b0c74
commit
d58a509e01
3 files changed
+37
-56
No files matched your search
@@ -171,6 +171,10 @@ export LEX = $(if $(FLEX),$(FLEX),flex)
|
||||
# Default file for 'make defconfig'.
|
||||
export KBUILD_DEFCONFIG := $(ARCH)_defconfig
|
||||
|
||||
# Copy CFLAGS generated by "Config.mk" so they can be reused later without
|
||||
# reparsing Config.mk by e.g. arch/x86/boot/.
|
||||
export XEN_TREEWIDE_CFLAGS := $(CFLAGS)
|
||||
|
||||
# CLANG_FLAGS needs to be calculated before calling Kconfig
|
||||
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
|
||||
CLANG_FLAGS :=
|
||||
|
||||
+33
-16
@@ -1,25 +1,42 @@
|
||||
obj-bin-y += head.o
|
||||
head-srcs := cmdline.S reloc.S
|
||||
|
||||
DEFS_H_DEPS = $(abs_srctree)/$(src)/defs.h $(abs_srctree)/include/xen/stdbool.h
|
||||
nocov-y += $(head-srcs:.S=.o)
|
||||
noubsan-y += $(head-srcs:.S=.o)
|
||||
targets += $(head-srcs:.S=.o)
|
||||
|
||||
CMDLINE_DEPS = $(DEFS_H_DEPS) $(abs_srctree)/$(src)/video.h \
|
||||
$(BASEDIR)/include/xen/kconfig.h \
|
||||
$(BASEDIR)/include/generated/autoconf.h
|
||||
head-srcs := $(addprefix $(obj)/, $(head-srcs))
|
||||
|
||||
RELOC_DEPS = $(DEFS_H_DEPS) \
|
||||
$(BASEDIR)/include/generated/autoconf.h \
|
||||
$(BASEDIR)/include/xen/kconfig.h \
|
||||
$(BASEDIR)/include/xen/multiboot.h \
|
||||
$(BASEDIR)/include/xen/multiboot2.h \
|
||||
$(BASEDIR)/include/xen/const.h \
|
||||
$(BASEDIR)/include/public/arch-x86/hvm/start_info.h
|
||||
$(obj)/head.o: $(head-srcs)
|
||||
|
||||
$(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
|
||||
CFLAGS_x86_32 := $(subst -m64,-m32 -march=i686,$(XEN_TREEWIDE_CFLAGS))
|
||||
$(call cc-options-add,CFLAGS_x86_32,CC,$(EMBEDDED_EXTRA_CFLAGS))
|
||||
CFLAGS_x86_32 += -Werror -fno-builtin -g0 -msoft-float
|
||||
CFLAGS_x86_32 += -I$(srctree)/include
|
||||
|
||||
$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS) $(src)/build32.lds
|
||||
$(MAKE) -f $(abs_srctree)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
|
||||
# override for 32bit binaries
|
||||
$(head-srcs:.S=.o): CFLAGS_stack_boundary :=
|
||||
$(head-srcs:.S=.o): XEN_CFLAGS := $(CFLAGS_x86_32) -fpic
|
||||
|
||||
$(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS) $(src)/build32.lds
|
||||
$(MAKE) -f $(abs_srctree)/$(src)/build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
|
||||
$(head-srcs): %.S: %.bin
|
||||
(od -v -t x $< | tr -s ' ' | awk 'NR > 1 {print s} {s=$$0}' | \
|
||||
sed 's/ /,0x/g' | sed 's/,0x$$//' | sed 's/^[0-9]*,/ .long /') >$@
|
||||
|
||||
# Drop .got.plt during conversion to plain binary format.
|
||||
# Please check build32.lds for more details.
|
||||
%.bin: %.lnk
|
||||
$(OBJDUMP) -h $< | sed -n '/[0-9]/{s,00*,0,g;p;}' | \
|
||||
while read idx name sz rest; do \
|
||||
case "$$name" in \
|
||||
.got.plt) \
|
||||
test $$sz != 0c || continue; \
|
||||
echo "Error: non-empty $$name: 0x$$sz" >&2; \
|
||||
exit $$(expr $$idx + 1);; \
|
||||
esac; \
|
||||
done
|
||||
$(OBJCOPY) -O binary -R .got.plt $< $@
|
||||
|
||||
%.lnk: %.o $(src)/build32.lds
|
||||
$(LD) $(subst x86_64,i386,$(LDFLAGS_DIRECT)) -N -T $(filter %.lds,$^) -o $@ $<
|
||||
|
||||
clean-files := cmdline.S reloc.S *.lnk *.bin
|
||||
@@ -1,40 +0,0 @@
|
||||
override XEN_TARGET_ARCH=x86_32
|
||||
CFLAGS =
|
||||
include $(XEN_ROOT)/Config.mk
|
||||
|
||||
$(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
|
||||
|
||||
CFLAGS += -Werror -fno-builtin -g0 -msoft-float
|
||||
CFLAGS += -I$(BASEDIR)/include
|
||||
CFLAGS := $(filter-out -flto,$(CFLAGS))
|
||||
|
||||
# NB. awk invocation is a portable alternative to 'head -n -1'
|
||||
%.S: %.bin
|
||||
(od -v -t x $< | tr -s ' ' | awk 'NR > 1 {print s} {s=$$0}' | \
|
||||
sed 's/ /,0x/g' | sed 's/,0x$$//' | sed 's/^[0-9]*,/ .long /') >$@
|
||||
|
||||
# Drop .got.plt during conversion to plain binary format.
|
||||
# Please check build32.lds for more details.
|
||||
%.bin: %.lnk
|
||||
$(OBJDUMP) -h $< | sed -n '/[0-9]/{s,00*,0,g;p;}' | \
|
||||
while read idx name sz rest; do \
|
||||
case "$$name" in \
|
||||
.got.plt) \
|
||||
test $$sz != 0c || continue; \
|
||||
echo "Error: non-empty $$name: 0x$$sz" >&2; \
|
||||
exit $$(expr $$idx + 1);; \
|
||||
esac; \
|
||||
done
|
||||
$(OBJCOPY) -O binary -R .got.plt $< $@
|
||||
|
||||
%.lnk: %.o build32.lds
|
||||
$(LD) $(LDFLAGS_DIRECT) -N -T build32.lds -o $@ $<
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -fpic $< -o $@
|
||||
|
||||
cmdline.o: cmdline.c $(CMDLINE_DEPS)
|
||||
|
||||
reloc.o: reloc.c $(RELOC_DEPS)
|
||||
|
||||
.PRECIOUS: %.bin %.lnk
|
||||