[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH v3 20/23] build: Switch build directory as CURDIR



Fixdep and other kconfig autogenerate files on fixed path. Instead of
patching the kconfig and fixdep, we make current working directory as
build directory.

Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>
---
 Config.uk                    |  2 +-
 Makefile                     | 81 ++++++++++++++++++++++++++++++--------------
 arch/Config.uk               |  6 ++--
 support/scripts/configupdate |  4 +--
 4 files changed, 62 insertions(+), 31 deletions(-)

diff --git a/Config.uk b/Config.uk
index 01a7ac8..772db85 100644
--- a/Config.uk
+++ b/Config.uk
@@ -26,7 +26,7 @@ config UK_DEFNAME
        default "$(UK_NAME)"
 
 menu "Architecture Selection"
-       source "arch/Config.uk"
+       source "$(UK_BASE)/arch/Config.uk"
 endmenu
 
 menu "Platform Configuration"
diff --git a/Makefile b/Makefile
index 2bcdc32..5cfd445 100644
--- a/Makefile
+++ b/Makefile
@@ -65,7 +65,7 @@ space := $(empty) $(empty)
 export CDPATH :=
 
 # Use current directory as base
-CONFIG_UK_BASE := $(CURDIR)
+CONFIG_UK_BASE ?= $(CURDIR)
 override CONFIG_UK_BASE := $(realpath $(CONFIG_UK_BASE))
 ifeq ($(CONFIG_UK_BASE),)
 $(error "Invalid base directory (CONFIG_UK_BASE)")
@@ -103,12 +103,20 @@ ifeq ("$(origin P)", "command line")
 $(foreach E,$(subst :, ,$(P)), \
 $(if $(wildcard $(E)), \
        $(eval EPLAT_DIR += $(E)) \
-, \
+, $(if $(wildcard $(CONFIG_UK_BASE)/$(E)),\
+       $(eval EPLAT_DIR += $(CONFIG_UK_BASE)/$(E)), \
        $(error Cannot find platform library: $(E)) \
+   ) \
 ) \
 )
 endif
 EPLAT_DIR := $(realpath $(patsubst %/,%,$(patsubst %.,%,$(EPLAT_DIR))))
+build_dir_make  := 0
+ifneq ($(BUILD_DIR),$(UK_BASE))
+       build_dir_make := 1;
+else
+       sub_make_exec := 1;
+endif
 
 # ELIB_DIR (list of external libraries)
 # Retrieved from L variable from the command line (paths separated by colon)
@@ -117,8 +125,10 @@ ifeq ("$(origin L)", "command line")
 $(foreach E,$(subst :, ,$(L)), \
 $(if $(wildcard $(E)), \
        $(eval ELIB_DIR += $(E)) \
-, \
+, $(if $(wildcard $(CONFIG_UK_BASE)/$(E)),\
+       $(eval ELIB_DIR += $(CONFIG_UK_BASE)/$(E)), \
        $(error Cannot find library: $(E)) \
+   )\
 ) \
 )
 endif
@@ -428,6 +438,7 @@ endif
 
################################################################################
 # Compiler and linker tools
 
################################################################################
+ifeq ($(sub_make_exec), 1)
 ifeq ($(UK_HAVE_DOT_CONFIG),y)
 # Hide troublesome environment variables from sub processes
 unexport CONFIG_CROSS_COMPILE
@@ -617,19 +628,25 @@ clean: clean-libs
 
 else # !($(UK_HAVE_DOT_CONFIG),y)
 
-all: menuconfig
 
-.PHONY: prepare image libs objs clean-libs clean
+$(filter %config,$(MAKECMDGOALS)): $(BUILD_DIR)/Makefile
+
+## ukconfig
+ukconfig: $(BUILD_DIR)/Makefile menuconfig
+
+all: ukconfig
 
-fetch: menuconfig
+.PHONY: prepare image libs objs clean-libs clean ukconfig
 
-prepare: menuconfig
+fetch: ukconfig
 
-objs: menuconfig
+prepare: ukconfig
 
-libs: menuconfig
+objs: ukconfig
 
-images: menuconfig
+libs: ukconfig
+
+images: ukconfig
 
 clean-libs clean:
        $(error Do not know which files to clean without having a 
configuration. Did you mean 'properclean' or 'distclean'?)
@@ -700,13 +717,13 @@ iscriptconfig: $(KCONFIG_DIR)/fixdep
 kmenuconfig:$(KCONFIG_DIR)/fixdep
        @$(COMMON_CONFIG_ENV) $(kpython) $(CONFIGLIB)/menuconfig.py \
                $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 scriptsyncconfig: $(KCONFIG_DIR)/fixdep
        @$(COMMON_CONFIG_ENV) $(kpython) $(CONFIGLIB)/genconfig.py \
                --sync-deps=$(BUILD_DIR)/include/config \
                --header-path=$(KCONFIG_AUTOHEADER) $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 guiconfig: $(KCONFIG_DIR)/fixdep
        @$(COMMON_CONFIG_ENV) $(kpython) $(CONFIGLIB)/guiconfig.py 
$(CONFIG_CONFIG_IN)
@@ -718,23 +735,23 @@ dumpvarsconfig:$(KCONFIG_DIR)/fixdep
 
 xconfig: $(KCONFIG_DIR)/qconf
        @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 gconfig: $(KCONFIG_DIR)/gconf
        @$(COMMON_CONFIG_ENV) srctree=$(CONFIG_UK_BASE) $< $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 menuconfig: $(KCONFIG_DIR)/mconf
        @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 nconfig: $(KCONFIG_DIR)/nconf
        @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 config: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 # For the config targets that automatically select options, we pass
 # SKIP_LEGACY=y to disable the legacy options. However, in that case
@@ -742,34 +759,34 @@ config: $(KCONFIG_DIR)/conf
 # will query them. Therefore, run an additional olddefconfig.
 oldconfig: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) $< --oldconfig $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 randconfig: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --randconfig $(CONFIG_CONFIG_IN)
        @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 allyesconfig: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --allyesconfig 
$(CONFIG_CONFIG_IN)
        @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 allnoconfig: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --allnoconfig $(CONFIG_CONFIG_IN)
        @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 syncconfig: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) $< --syncconfig $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 olddefconfig: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 defconfig: $(KCONFIG_DIR)/conf
        @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) 
$(CONFIG_CONFIG_IN)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 # Override the UK_DEFCONFIG from COMMON_CONFIG_ENV with the new defconfig
 %_defconfig: $(KCONFIG_DIR)/conf $(A)/configs/%_defconfig
@@ -781,7 +798,7 @@ savedefconfig: $(KCONFIG_DIR)/conf
                --savedefconfig=$(if 
$(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \
                $(CONFIG_CONFIG_IN)
        @$(SED) '/UK_DEFCONFIG=/d' $(if 
$(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig)
-       @$(SCRIPTS_DIR)/configupdate $(UK_CONFIG) $(UK_CONFIG_OUT)
+       @$(COMMON_CONFIG_ENV) $(SCRIPTS_DIR)/configupdate $(UK_CONFIG) 
$(UK_CONFIG_OUT)
 
 .PHONY: defconfig savedefconfig silentoldconfig
 
@@ -860,6 +877,20 @@ print-objs:
 print-srcs:
        $(error Do not have a configuration. Please run one of the 
configuration targets first)
 endif
+else #!($(sub_make_exec),)
+export sub_make_exec:=1
+
+$(BUILD_DIR)/Makefile:
+       ln -sn $(CONFIG_UK_BASE)/Makefile $(@)
+
+$(filter-out _all $(BUILD_DIR)/Makefile sub-make distclean properclean help 
$(lastword $(MAKEFILE_LIST)), \
+  $(MAKECMDGOALS)) all: sub-make
+       @:
+
+sub-make: $(BUILD_DIR)/Makefile
+       $(Q)$(MAKE) CONFIG_UK_BASE=$(CONFIG_UK_BASE) -C $(BUILD_DIR) -f 
$(BUILD_DIR)/Makefile $(MAKECMDGOALS)
+
+endif
 
 help:
        @echo 'Cleaning:'
diff --git a/arch/Config.uk b/arch/Config.uk
index d091dcb..9f21504 100644
--- a/arch/Config.uk
+++ b/arch/Config.uk
@@ -16,13 +16,13 @@ config ARCH_ARM_32
 endchoice
 
 if (ARCH_X86_64)
-       source "arch/x86/x86_64/Config.uk"
+       source "$(UK_BASE)/arch/x86/x86_64/Config.uk"
 endif
 if (ARCH_ARM_32)
-       source "arch/arm/arm/Config.uk"
+       source "$(UK_BASE)/arch/arm/arm/Config.uk"
 endif
 if (ARCH_ARM_64)
-       source "arch/arm/arm64/Config.uk"
+       source "$(UK_BASE)/arch/arm/arm64/Config.uk"
 endif
 
 config STACK_SIZE_PAGE_ORDER
diff --git a/support/scripts/configupdate b/support/scripts/configupdate
index ce5ce98..86b835c 100755
--- a/support/scripts/configupdate
+++ b/support/scripts/configupdate
@@ -1,6 +1,6 @@
 #!/bin/bash
-UK_CONFIG="${1:-.config}"
-UK_CONFIG_OLD="${2:-.config.old}"
+UK_CONFIG="${1:-${UK_BASE}/.config}"
+UK_CONFIG_OLD="${2:-${UK_BASE}/.config.old}"
 
 _subconfig()
 {
-- 
2.7.4


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.