From 325082a571fd769953036c1526b9bd61eaa83804 Mon Sep 17 00:00:00 2001 From: Takayuki Okamoto Date: Mon, 11 Sep 2017 15:29:53 +0900 Subject: [PATCH] adapt "out of tree build" for arm64 --- .../{Makefile.arch => Makefile.arch.in} | 9 +-- arch/arm64/kernel/vdso.so.S | 3 +- arch/arm64/kernel/vdso/Makefile.in | 56 +++++++++++-------- configure | 25 +++------ configure.ac | 23 +++----- kernel/Makefile.build.in | 4 ++ kernel/Makefile.in | 7 +++ 7 files changed, 65 insertions(+), 62 deletions(-) rename arch/arm64/kernel/{Makefile.arch => Makefile.arch.in} (74%) diff --git a/arch/arm64/kernel/Makefile.arch b/arch/arm64/kernel/Makefile.arch.in similarity index 74% rename from arch/arm64/kernel/Makefile.arch rename to arch/arm64/kernel/Makefile.arch.in index ac60a4a6..d6f87a66 100644 --- a/arch/arm64/kernel/Makefile.arch +++ b/arch/arm64/kernel/Makefile.arch.in @@ -1,5 +1,6 @@ # Makefile.arch COPYRIGHT FUJITSU LIMITED 2015-2017 VDSO_SRCDIR = $(SRC)/../arch/$(IHKARCH)/kernel/vdso +VDSO_BUILDDIR = @abs_builddir@/vdso VDSO_SO_O = $(O)/vdso.so.o IHK_OBJS += assert.o cache.o cpu.o cputable.o context.o entry.o entry-fpsimd.o @@ -16,12 +17,12 @@ IHK_OBJS += cpufeature.o # IHK_OBJS added coredump.o IHK_OBJS += coredump.o -$(VDSO_SO_O): $(VDSO_SRCDIR)/vdso.so +$(VDSO_SO_O): $(VDSO_BUILDDIR)/vdso.so -$(VDSO_SRCDIR)/vdso.so: FORCE +$(VDSO_BUILDDIR)/vdso.so: FORCE $(call echo_cmd,BUILD VDSO,$(TARGET)) @mkdir -p $(O)/vdso - @TARGETDIR="$(TARGETDIR)" $(submake) -C $(VDSO_SRCDIR) $(SUBOPTS) prepare - @TARGETDIR="$(TARGETDIR)" $(submake) -C $(VDSO_SRCDIR) $(SUBOPTS) + @TARGETDIR="$(TARGETDIR)" $(submake) -C $(VDSO_BUILDDIR) $(SUBOPTS) prepare + @TARGETDIR="$(TARGETDIR)" $(submake) -C $(VDSO_BUILDDIR) $(SUBOPTS) FORCE: diff --git a/arch/arm64/kernel/vdso.so.S b/arch/arm64/kernel/vdso.so.S index 6d29b98f..281de7d8 100644 --- a/arch/arm64/kernel/vdso.so.S +++ b/arch/arm64/kernel/vdso.so.S @@ -19,13 +19,14 @@ */ #include +#include .section ".vdso.txet", "aw" .globl vdso_start, vdso_end .balign PAGE_SIZE vdso_start: - .incbin "../../mckernel/arch/arm64/kernel/vdso/vdso.so" + .incbin VDSO_SO_PATH .balign PAGE_SIZE vdso_end: diff --git a/arch/arm64/kernel/vdso/Makefile.in b/arch/arm64/kernel/vdso/Makefile.in index c49a4e83..322868e0 100644 --- a/arch/arm64/kernel/vdso/Makefile.in +++ b/arch/arm64/kernel/vdso/Makefile.in @@ -8,14 +8,18 @@ HOST_KERNEL_CONFIG_ARM64_4K_PAGES=$(shell grep -E "^CONFIG_ARM64_4K_PAGES=y" $(H HOST_KERNEL_CONFIG_ARM64_16K_PAGES=$(shell grep -E "^CONFIG_ARM64_16K_PAGES=y" $(HOST_CONFIG) | sed 's|CONFIG_ARM64_16K_PAGES=||g') HOST_KERNEL_CONFIG_ARM64_64K_PAGES=$(shell grep -E "^CONFIG_ARM64_64K_PAGES=y" $(HOST_CONFIG) | sed 's|CONFIG_ARM64_64K_PAGES=||g') -VDSOBASE = $(CURDIR) -INCDIR = $(VDSOBASE)/../include +VDSOSRC = @abs_srcdir@ +VDSOBUILD = @abs_builddir@ +INCDIR = $(VDSOSRC)/../include ECHO_SUFFIX = [VDSO] -VDSO_OBJS := gettimeofday.o note.o sigreturn.o -DESTOBJS = $(addprefix $(VDSOBASE)/, $(VDSO_OBJS)) +VDSOOBJS := gettimeofday.o +DESTOBJS = $(addprefix $(VDSOBUILD)/, $(VDSOOBJS)) -$(if $(VDSOBASE),,$(error IHK output directory is not specified)) +VDSOASMOBJS := note.o sigreturn.o +DESTASMOBJS = $(addprefix $(VDSOBUILD)/, $(VDSOASMOBJS)) + +$(if $(VDSOSRC),,$(error IHK output directory is not specified)) $(if $(TARGET),,$(error Target is not specified)) #CFLAGS := -nostdinc -mlittle-endian -Wall -mabi=lp64 -Wa,-gdwarf-2 @@ -42,7 +46,7 @@ LDFLAGS += --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO LDFLAGS += -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(vdso.so)" LDFLAGS += -D"KBUILD_MODNAME=KBUILD_STR(vdso.so)" -D__KERNEL__ -DEPSRCS = $(wildcard $(VDSOBASE)/*.c $(VDSOBASE)/*.S) +DEPSRCS = $(wildcard $(VDSOSRC)/*.c $(VDSOSRC)/*.S) CFLAGS_lds := -E -P -C -U$(ARCH) CFLAGS_lds += -nostdinc @@ -62,43 +66,47 @@ CFLAGS_lds += -DPAGE_SIZE=0x10000 endif #load mckernel config (append CPPFLAGS) -include $(IHKBASE)/$(TARGETDIR)/Makefile.predefines +include @abs_top_builddir@/../ihk/cokernel/$(TARGETDIR)/Makefile.predefines default: all .PHONY: all clean depend prepare -all: depend $(VDSOBASE)/vdso.so $(INCDIR)/vdso-offsets.h +all: depend $(VDSOBUILD)/vdso.so $(VDSOBUILD)/../include/vdso-offsets.h $(VDSOBUILD)/../include/vdso-so-path.h # Strip rule for the .so file -$(VDSOBASE)/vdso.so: OBJCOPYFLAGS := -S -$(VDSOBASE)/vdso.so: $(VDSOBASE)/vdso.so.dbg +$(VDSOBUILD)/vdso.so: OBJCOPYFLAGS := -S +$(VDSOBUILD)/vdso.so: $(VDSOBUILD)/vdso.so.dbg $(objcopy_cmd) # Generate VDSO offsets using helper script -$(INCDIR)/vdso-offsets.h: $(VDSOBASE)/vdso.so.dbg +$(VDSOBUILD)/../include/vdso-offsets.h: $(VDSOBUILD)/vdso.so.dbg $(call echo_cmd,VDSOSYM,$<) - @nm $< | sh gen_vdso_offsets.sh | LC_ALL=C sort > $@ + @mkdir -p $(VDSOBUILD)/../include + @nm $< | sh $(VDSOSRC)/gen_vdso_offsets.sh | LC_ALL=C sort > $@ + +$(VDSOBUILD)/../include/vdso-so-path.h: + @echo "#define VDSO_SO_PATH \"@abs_builddir@/vdso.so\"" > $@ # Link rule for the .so file, .lds has to be first -$(VDSOBASE)/vdso.so.dbg: $(VDSOBASE)/vdso.lds $(DESTOBJS) +$(VDSOBUILD)/vdso.so.dbg: $(VDSOBUILD)/vdso.lds $(DESTOBJS) $(DESTASMOBJS) $(ld_cmd) -$(VDSOBASE)/vdso.lds: vdso.lds.S +$(VDSOBUILD)/vdso.lds: $(VDSOSRC)/vdso.lds.S $(lds_cmd) clean: - $(rm_cmd) $(DESTOBJS) $(VDSOBASE)/Makefile.dep + $(rm_cmd) $(DESTOBJS) $(DESTASMOBJS) $(VDSOBUILD)/Makefile.dep $(VDSOBUILD)/vdso.* -r $(VDSOBUILD)/../include -depend: $(VDSOBASE)/Makefile.dep +depend: $(VDSOBUILD)/Makefile.dep -$(VDSOBASE)/Makefile.dep: +$(VDSOBUILD)/Makefile.dep: $(call dep_cmd,$(DEPSRCS)) prepare: - @$(RM) $(VDSOBASE)/Makefile.dep + @$(RM) $(VDSOBUILD)/Makefile.dep --include $(VDSOBASE)/Makefile.dep +-include $(VDSOBUILD)/Makefile.dep # Actual build commands ifeq ($(V),1) @@ -109,15 +117,15 @@ echo_cmd = @echo ' ($(TARGET))' $1 $(ECHO_SUFFIX) $2; submake = make --no-print-directory endif -cc_cmd = $(call echo_cmd,CC,$<)$(CC) $(CFLAGS) -c -o $@ $< +cc_cmd = $(call echo_cmd,CC,$<)$(CC) $(CFLAGS) -c -o $@ ld_cmd = $(call echo_cmd,LD,$@)$(CC) $(LDFLAGS) $^ -o $@ dep_cmd = $(call echo_cmd,DEPEND,)$(CC) $(CFLAGS) -MM $1 > $@ rm_cmd = $(call echo_cmd,CLEAN,)$(RM) objcopy_cmd = $(call echo_cmd,OBJCOPY,$<)$(OBJCOPY) $(OBJCOPYFLAGS) $< $@ lds_cmd = $(call echo_cmd,LDS,$<)$(CC) $(CFLAGS_lds) -c -o $@ $< -.c.o: - $(cc_cmd) -.S.o: - $(cc_cmd) -D__ASSEMBLY__ +$(DESTOBJS): + $(cc_cmd) $(addprefix $(VDSOSRC)/, $(notdir $(@:.o=.c))) +$(DESTASMOBJS): + $(cc_cmd) $(addprefix $(VDSOSRC)/, $(notdir $(@:.o=.S))) -D__ASSEMBLY__ diff --git a/configure b/configure index ad115edc..fddca34f 100755 --- a/configure +++ b/configure @@ -5016,25 +5016,15 @@ _ACEOF ac_config_headers="$ac_config_headers config.h" # POSTK_DEBUG_ARCH_DEP_37 -#AC_CONFIG_FILES([ -# Makefile -# executer/user/Makefile -# executer/kernel/mcctrl/Makefile -# executer/kernel/mcctrl/arch/x86_64/Makefile -# executer/kernel/mcoverlayfs/Makefile -# kernel/Makefile -# kernel/Makefile.build -# arch/x86/tools/mcreboot-attached-mic.sh -# arch/x86/tools/mcshutdown-attached-mic.sh -# arch/x86/tools/mcreboot-builtin-x86.sh -# arch/x86/tools/mcreboot-smp-x86.sh -# arch/x86/tools/mcstop+release-smp-x86.sh -# arch/x86/tools/mcshutdown-builtin-x86.sh -# arch/x86/tools/mcreboot.1:arch/x86/tools/mcreboot.1in -#]) -ac_config_files="$ac_config_files Makefile executer/user/Makefile executer/user/arch/$ARCH/Makefile executer/kernel/mcctrl/Makefile executer/kernel/mcctrl/arch/$ARCH/Makefile executer/kernel/mcoverlayfs/Makefile executer/kernel/mcoverlayfs/linux-3.10.0-327.36.1.el7/Makefile executer/kernel/mcoverlayfs/linux-4.0.9/Makefile executer/kernel/mcoverlayfs/linux-4.6.7/Makefile executer/include/qlmpilib.h kernel/Makefile kernel/Makefile.build kernel/include/swapfmt.h arch/x86/tools/mcreboot-attached-mic.sh arch/x86/tools/mcshutdown-attached-mic.sh arch/x86/tools/mcreboot-builtin-x86.sh arch/x86/tools/mcreboot-smp-x86.sh arch/x86/tools/mcstop+release-smp-x86.sh arch/x86/tools/eclair-dump-backtrace.exp arch/x86/tools/mcshutdown-builtin-x86.sh arch/x86/tools/mcreboot.1:arch/x86/tools/mcreboot.1in arch/x86/tools/irqbalance_mck.service arch/x86/tools/irqbalance_mck.in kernel/config/config.smp-arm64 arch/arm64/kernel/vdso/Makefile" +# AC_CONFIG_FILES arch dependfiles separate +ac_config_files="$ac_config_files Makefile executer/user/Makefile executer/user/arch/$ARCH/Makefile executer/kernel/mcctrl/Makefile executer/kernel/mcctrl/arch/$ARCH/Makefile executer/kernel/mcoverlayfs/Makefile executer/kernel/mcoverlayfs/linux-3.10.0-327.36.1.el7/Makefile executer/kernel/mcoverlayfs/linux-4.0.9/Makefile executer/kernel/mcoverlayfs/linux-4.6.7/Makefile executer/include/qlmpilib.h kernel/Makefile kernel/Makefile.build kernel/include/swapfmt.h arch/x86/tools/mcreboot-attached-mic.sh arch/x86/tools/mcshutdown-attached-mic.sh arch/x86/tools/mcreboot-builtin-x86.sh arch/x86/tools/mcreboot-smp-x86.sh arch/x86/tools/mcstop+release-smp-x86.sh arch/x86/tools/eclair-dump-backtrace.exp arch/x86/tools/mcshutdown-builtin-x86.sh arch/x86/tools/mcreboot.1:arch/x86/tools/mcreboot.1in arch/x86/tools/irqbalance_mck.service arch/x86/tools/irqbalance_mck.in" +if test "$TARGET" = "smp-arm64"; then +ac_config_files="$ac_config_files kernel/config/config.smp-arm64 arch/arm64/kernel/vdso/Makefile arch/arm64/kernel/Makefile.arch" + +fi + if test "x$enable_dcfa" = xyes; then : ac_config_files="$ac_config_files kernel/Makefile.dcfa" @@ -5756,6 +5746,7 @@ do "arch/x86/tools/irqbalance_mck.in") CONFIG_FILES="$CONFIG_FILES arch/x86/tools/irqbalance_mck.in" ;; "kernel/config/config.smp-arm64") CONFIG_FILES="$CONFIG_FILES kernel/config/config.smp-arm64" ;; "arch/arm64/kernel/vdso/Makefile") CONFIG_FILES="$CONFIG_FILES arch/arm64/kernel/vdso/Makefile" ;; + "arch/arm64/kernel/Makefile.arch") CONFIG_FILES="$CONFIG_FILES arch/arm64/kernel/Makefile.arch" ;; "kernel/Makefile.dcfa") CONFIG_FILES="$CONFIG_FILES kernel/Makefile.dcfa" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; diff --git a/configure.ac b/configure.ac index b3c6b4b0..bf1e4561 100644 --- a/configure.ac +++ b/configure.ac @@ -513,22 +513,7 @@ AC_SUBST(uncomment_if_ENABLE_MEMDUMP) AC_CONFIG_HEADERS([config.h]) # POSTK_DEBUG_ARCH_DEP_37 -#AC_CONFIG_FILES([ -# Makefile -# executer/user/Makefile -# executer/kernel/mcctrl/Makefile -# executer/kernel/mcctrl/arch/x86_64/Makefile -# executer/kernel/mcoverlayfs/Makefile -# kernel/Makefile -# kernel/Makefile.build -# arch/x86/tools/mcreboot-attached-mic.sh -# arch/x86/tools/mcshutdown-attached-mic.sh -# arch/x86/tools/mcreboot-builtin-x86.sh -# arch/x86/tools/mcreboot-smp-x86.sh -# arch/x86/tools/mcstop+release-smp-x86.sh -# arch/x86/tools/mcshutdown-builtin-x86.sh -# arch/x86/tools/mcreboot.1:arch/x86/tools/mcreboot.1in -#]) +# AC_CONFIG_FILES arch dependfiles separate AC_CONFIG_FILES([ Makefile executer/user/Makefile @@ -553,9 +538,15 @@ AC_CONFIG_FILES([ arch/x86/tools/mcreboot.1:arch/x86/tools/mcreboot.1in arch/x86/tools/irqbalance_mck.service arch/x86/tools/irqbalance_mck.in +]) + +if test "$TARGET" = "smp-arm64"; then +AC_CONFIG_FILES([ kernel/config/config.smp-arm64 arch/arm64/kernel/vdso/Makefile + arch/arm64/kernel/Makefile.arch ]) +fi AS_IF([test "x$enable_dcfa" = xyes], [ AC_CONFIG_FILES([kernel/Makefile.dcfa])]) diff --git a/kernel/Makefile.build.in b/kernel/Makefile.build.in index 598a6ad0..e3bedb4c 100644 --- a/kernel/Makefile.build.in +++ b/kernel/Makefile.build.in @@ -23,7 +23,11 @@ ifeq ($(ARCH), arm64) default: all endif +ifeq ($(ARCH), arm64) +include @abs_builddir@/config/config.$(TARGET) +else include $(SRC)/config/config.$(TARGET) +endif include @abs_builddir@/../../ihk/cokernel/Makefile.common # CFLAGS += -I$(SRC)/../arch/$(IHKARCH)/kernel/include -I$(SRC)/../lib/include diff --git a/kernel/Makefile.in b/kernel/Makefile.in index cc85ad73..777eca9f 100644 --- a/kernel/Makefile.in +++ b/kernel/Makefile.in @@ -2,6 +2,10 @@ BUILD_TARGET ?= @TARGET@ KERNDIR=@KERNDIR@ VPATH=@abs_srcdir@ +ifeq ($(ARCH), arm64) +vdsodir=@abs_builddir@/../arch/$(ARCH)/kernel/vdso +endif + IHKBASE ?= $(VPATH)/../../ihk/cokernel O ?= $(CURDIR)/build V ?= $(VERBOSE) @@ -37,6 +41,9 @@ $(O): clean: rm -rf $(O) +ifeq ($(ARCH), arm64) + @rm -f $(vdsodir)/*.o $(vdsodir)/vdso.* $(vdsodir)/Makefile.dep -r $(vdsodir)/../include +endif install: mkdir -p -m 755 $(KERNDIR)