[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |