diff options
author | Bryan Hundven <bryanhundven@gmail.com> | 2015-11-04 02:50:05 -0800 |
---|---|---|
committer | Bryan Hundven <bryanhundven@gmail.com> | 2015-11-04 02:50:05 -0800 |
commit | 85f98147f57b3001282fc0365be245b9c81a3a16 (patch) | |
tree | 5f5287226ebc2039b016deff29eea450409c900f | |
parent | 5ffc9ecd10dec73024f8e7f3815c7b2f0851ba56 (diff) | |
parent | b2f8afef8532247c60764fffc938898903c06a4c (diff) | |
download | crosstool-ng-85f98147f57b3001282fc0365be245b9c81a3a16.tar.gz crosstool-ng-85f98147f57b3001282fc0365be245b9c81a3a16.tar.bz2 crosstool-ng-85f98147f57b3001282fc0365be245b9c81a3a16.zip |
Merge pull request #233 from stilor/fix-build-all
Fix build-all
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | config/config.mk | 20 | ||||
-rw-r--r-- | ct-ng.in | 21 | ||||
-rw-r--r-- | kconfig/kconfig.mk | 10 | ||||
-rw-r--r-- | samples/i686-w64-mingw32,nios2-spico-elf/crosstool.config (renamed from samples/nios2-elf-mingw32/crosstool.config) | 0 | ||||
-rw-r--r-- | samples/i686-w64-mingw32,nios2-spico-elf/reported.by (renamed from samples/nios2-elf-mingw32/reported.by) | 0 | ||||
-rw-r--r-- | samples/samples.mk | 74 | ||||
-rw-r--r-- | scripts/functions | 4 | ||||
-rw-r--r-- | scripts/scripts.mk | 8 | ||||
-rwxr-xr-x | scripts/showSamples.sh | 7 |
10 files changed, 100 insertions, 46 deletions
@@ -22,3 +22,5 @@ build.log .build/ # .. and the legacy location targets/ +# .. and log for 'build-all' +.build-all diff --git a/config/config.mk b/config/config.mk index 8cc2b15c..669e1576 100644 --- a/config/config.mk +++ b/config/config.mk @@ -50,12 +50,12 @@ config_files: $(STATIC_CONFIG_FILES) $(GEN_CONFIG_FILES) # Where to access to the source config files from config: - @$(ECHO) " LN config" + @$(CT_ECHO) " LN config" $(SILENT)ln -s $(CT_LIB_DIR)/config config # Where to store the generated config files into config.gen: - @$(ECHO) " MKDIR config.gen" + @$(CT_ECHO) " MKDIR config.gen" $(SILENT)mkdir -p config.gen #----------------------------------------------------------- @@ -74,34 +74,34 @@ DEBUGS = $(patsubst config/debug/%.in,%,$(DEBUG_CONFIG_FILES)) # WARNING! If a .in file disapears between two runs, that will NOT be detected! config.gen/arch.in: $(ARCH_CONFIG_FILES) $(ARCH_CONFIG_FILES_2) - @$(ECHO) ' IN $(@)' + @$(CT_ECHO) ' IN $(@)' $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "Target Architecture" "ARCH" "config/arch" "Y" $(ARCHS) config.gen/kernel.in: $(KERNEL_CONFIG_FILES) $(KERNEL_CONFIG_FILES_2) - @$(ECHO) ' IN $(@)' + @$(CT_ECHO) ' IN $(@)' $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "Target OS" "KERNEL" "config/kernel" "Y" $(KERNELS) config.gen/cc.in: $(CC_CONFIG_FILES) $(CC_CONFIG_FILES_2) - @$(ECHO) ' IN $(@)' + @$(CT_ECHO) ' IN $(@)' $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "C compiler" "CC" "config/cc" "N" $(CCS) config.gen/binutils.in: $(CC_BINUTILS_FILES) $(CC_BINUTILS_FILES_2) - @$(ECHO) ' IN $(@)' + @$(CT_ECHO) ' IN $(@)' $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "Binutils" "BINUTILS" "config/binutils" "N" $(BINUTILSS) config.gen/libc.in: $(LIBC_CONFIG_FILES) $(LIBC_CONFIG_FILES_2) - @$(ECHO) ' IN $(@)' + @$(CT_ECHO) ' IN $(@)' $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh choice "$@" "C library" "LIBC" "config/libc" "Y" $(LIBCS) config.gen/debug.in: $(DEBUG_CONFIG_FILES) - @$(ECHO) ' IN $(@)' + @$(CT_ECHO) ' IN $(@)' $(SILENT)$(CT_LIB_DIR)/scripts/gen_in_frags.sh menu "$@" "Debug facilities" "DEBUG" "config/debug" $(DEBUGS) #----------------------------------------------------------- # Cleaning up the mess... clean:: - @$(ECHO) " CLEAN config" + @$(CT_ECHO) " CLEAN config" $(SILENT)rm -f config 2>/dev/null || true - @$(ECHO) " CLEAN config.gen" + @$(CT_ECHO) " CLEAN config.gen" $(SILENT)rm -rf config.gen @@ -41,24 +41,24 @@ export CT_STOP:=$(STOP) export CT_RESTART:=$(RESTART) SILENT=@ -ECHO=echo +CT_ECHO=echo ifeq ($(strip $(origin V)),command line) ifeq ($(strip $(V)),0) SILENT=@ - ECHO=: + CT_ECHO=: else ifeq ($(strip $(V)),1) SILENT= - ECHO=: + CT_ECHO=: else ifeq ($(strip $(V)),2) SILENT= - ECHO=echo + CT_ECHO=echo endif # V == 2 endif # V== 1 endif # V == 0 endif # origin V -export V SILENT ECHO +export V SILENT CT_ECHO all: help @@ -123,7 +123,8 @@ help-config:: help-distrib:: help-env:: - @echo ' V=0|1|2 - 0 => show only human-readable messages (default)' + @echo ' V=0|1|2|<unset> - <unset> show only human-readable messages (default)' + @echo ' 0 => do not show commands or human-readable message' @echo ' 1 => show only the commands being executed' @echo ' 2 => show both' @@ -165,14 +166,14 @@ version: PHONY += clean clean:: - @$(ECHO) " CLEAN log" + @$(CT_ECHO) " CLEAN log" $(SILENT)rm -f build.log - @$(ECHO) " CLEAN build dir" + @$(CT_ECHO) " CLEAN build dir" $(SILENT)[ ! -d targets ] || chmod -R u+w targets $(SILENT)[ ! -d .build ] || chmod -R u+w .build - $(SILENT)rm -rf targets .build + $(SILENT)rm -rf targets .build .build-all PHONY += distclean distclean:: clean - @$(ECHO) " CLEAN .config" + @$(CT_ECHO) " CLEAN .config" $(SILENT)rm -f .config .config.* ..config* diff --git a/kconfig/kconfig.mk b/kconfig/kconfig.mk index f59de5aa..3d330b48 100644 --- a/kconfig/kconfig.mk +++ b/kconfig/kconfig.mk @@ -21,23 +21,23 @@ MCONF := $(CT_LIB_DIR)/kconfig/mconf NCONF := $(CT_LIB_DIR)/kconfig/nconf menuconfig: - @$(ECHO) " CONF $(KCONFIG_TOP)" + @$(CT_ECHO) " CONF $(KCONFIG_TOP)" $(SILENT)$(MCONF) $(KCONFIG_TOP) nconfig: - @$(ECHO) " CONF $(KCONFIG_TOP)" + @$(CT_ECHO) " CONF $(KCONFIG_TOP)" $(SILENT)$(NCONF) $(KCONFIG_TOP) oldconfig: .config - @$(ECHO) " CONF $(KCONFIG_TOP)" + @$(CT_ECHO) " CONF $(KCONFIG_TOP)" $(SILENT)$(CONF) --silent$@ $(KCONFIG_TOP) savedefconfig: .config - @$(ECHO) ' GEN $@' + @$(CT_ECHO) ' GEN $@' $(SILENT)$(CONF) --savedefconfig=$${DEFCONFIG-defconfig} $(KCONFIG_TOP) defconfig: - @$(ECHO) ' CONF $@' + @$(CT_ECHO) ' CONF $@' $(SILENT)$(CONF) --defconfig=$${DEFCONFIG-defconfig} $(KCONFIG_TOP) # Always be silent, the stdout an be >.config diff --git a/samples/nios2-elf-mingw32/crosstool.config b/samples/i686-w64-mingw32,nios2-spico-elf/crosstool.config index 167df552..167df552 100644 --- a/samples/nios2-elf-mingw32/crosstool.config +++ b/samples/i686-w64-mingw32,nios2-spico-elf/crosstool.config diff --git a/samples/nios2-elf-mingw32/reported.by b/samples/i686-w64-mingw32,nios2-spico-elf/reported.by index c2bc32b9..c2bc32b9 100644 --- a/samples/nios2-elf-mingw32/reported.by +++ b/samples/i686-w64-mingw32,nios2-spico-elf/reported.by diff --git a/samples/samples.mk b/samples/samples.mk index 4545d5c3..c87e5fce 100644 --- a/samples/samples.mk +++ b/samples/samples.mk @@ -117,7 +117,7 @@ $(patsubst %,wiki-%,$(CT_SAMPLES)): config_files PHONY += samples samples: - @$(ECHO) ' MKDIR $@' + @$(CT_ECHO) ' MKDIR $@' $(SILENT)mkdir -p $@ # Save a sample @@ -133,7 +133,7 @@ endef # How we do recall one sample PHONY += $(CT_SAMPLES) $(CT_SAMPLES): config_files - @$(ECHO) " CONF $(KCONFIG_TOP)" + @$(CT_ECHO) " CONF $(KCONFIG_TOP)" $(SILENT)$(CONF) --defconfig=$(call sample_dir,$@)/crosstool.config $(KCONFIG_TOP) @echo @echo '***********************************************************' @@ -164,21 +164,41 @@ $(CT_SAMPLES): config_files # ---------------------------------------------------------- # Some helper functions +# Construct a CT_PREFIX_DIR path from the sample name. Sample names use +# comma as a separator between host and target triplets in canadian cross +# configurations, but ct-ng does not allow commas in the path. Substitute +# with = (equal sign). +# $1: sample +__comma = , +prefix_dir = $(CT_PREFIX)/$(subst $(__comma),=,$(1)) +host_triplet = $(if $(findstring $(__comma),$(1)),$(firstword $(subst $(__comma), ,$(1)))) + # Create the rule to build a sample -# $1: sample tuple -# $2: prefix +# $1: sample name (target tuple, or host/target tuples separated by a comma) define build_sample - @$(ECHO) ' CONF $(1)' - $(SILENT)cp $(call sample_dir,$(1))/crosstool.config .config - $(SILENT)$(sed) -i -r -e 's:^(CT_PREFIX_DIR=).*$$:\1"$(2)":;' .config + @$(CT_ECHO) ' CONF $(1)' + $(SILENT)$(CONF) -s --defconfig=$(call sample_dir,$(1))/crosstool.config $(KCONFIG_TOP) + $(SILENT)$(sed) -i -r -e 's:^(CT_PREFIX_DIR=).*$$:\1"$(call prefix_dir,$(1))":;' .config $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_(WARN|INFO|EXTRA|DEBUG|ALL)).*$$:# \1 is not set:;' .config $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_ERROR).*$$:\1=y:;' .config $(SILENT)$(sed) -i -r -e 's:^(CT_LOG_LEVEL_MAX)=.*$$:\1="ERROR":;' .config $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_TO_FILE).*$$:\1=y:;' .config $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_PROGRESS_BAR).*$$:\1=y:;' .config - $(SILENT)$(MAKE) -rf $(CT_NG) V=0 oldconfig - @$(ECHO) ' BUILD $(1)' - $(SILENT)$(MAKE) -rf $(CT_NG) V=0 build + $(SILENT)$(CONF) -s --oldconfig $(KCONFIG_TOP) + @$(CT_ECHO) ' BUILD $(1)' + $(SILENT)if [ ! -z "$(call host_triplet,$(1))" -a -d "$(call prefix_dir,$(call host_triplet,$(1)))" ]; then \ + PATH="$$PATH:$(call prefix_dir,$(call host_triplet,$(1)))/bin"; \ + fi; \ + if $(MAKE) -rf $(CT_NG) V=0 build; then \ + status=PASS; \ + elif [ -e $(call sample_dir,$(1))/broken ]; then \ + status=XFAIL; \ + else \ + status=FAIL; \ + fi; \ + printf '\r %-5s %s\n' $$status '$(1)'; \ + mkdir -p .build-all/$$status/$(1); \ + bzip2 < build.log > .build-all/$$status/$(1)/build.log.bz2 endef # ---------------------------------------------------------- @@ -196,11 +216,37 @@ endif # MAKECMDGOALS contains a build sample rule endif # MAKECMDGOALS != "" # Build a single sample -$(patsubst %,build-%,$(CT_SAMPLES)): - $(call build_sample,$(patsubst build-%,%,$@),$(CT_PREFIX)/$(patsubst build-%,%,$@)) +$(patsubst %,build-%,$(CT_SAMPLES)): build-%: config_files + $(call build_sample,$*) + +# Cross samples (build==host) +CT_SAMPLES_CROSS = $(strip $(foreach s,$(CT_SAMPLES),$(if $(findstring $(__comma),$(s)),, $(s)))) +# Canadian cross (build!=host) +CT_SAMPLES_CANADIAN = $(strip $(foreach s,$(CT_SAMPLES),$(if $(findstring $(__comma),$(s)), $(s),))) -# Build al samples -build-all: $(patsubst %,build-%,$(CT_SAMPLES)) +# Build all samples; first, build simple cross as canadian configurations may depend on +# build-to-host cross being pre-built. +build-all: build-all-pre $(patsubst %,build-%,$(CT_SAMPLES_CROSS) $(CT_SAMPLES_CANADIAN)) + @echo + @if [ -d .build-all/PASS ]; then \ + echo 'Success:'; \ + (cd .build-all/PASS && ls | sed 's/^/ - /'); \ + echo; \ + fi + @if [ -d .build-all/XFAIL ]; then \ + echo 'Expected failure:'; \ + (cd .build-all/XFAIL && ls | sed 's/^/ - /'); \ + echo; \ + fi + @if [ -d .build-all/FAIL ]; then \ + echo 'Failure:'; \ + (cd .build-all/FAIL && ls | sed 's/^/ - /'); \ + echo; \ + fi + @[ ! -d .build-all/FAIL ] + +build-all-pre: + @rm -rf .build-all # Build all samples, overiding the number of // jobs per sample build-all.%: diff --git a/scripts/functions b/scripts/functions index 86653465..2261b8d0 100644 --- a/scripts/functions +++ b/scripts/functions @@ -14,7 +14,7 @@ CT_OnError() { # To avoid printing the backtace for each sub-shell # up to the top-level, just remember we've dumped it if [ ! -f "${CT_WORK_DIR}/backtrace" ]; then - touch "${CT_WORK_DIR}/backtrace" + [ -d "${CT_WORK_DIR}" ] && touch "${CT_WORK_DIR}/backtrace" # Print steps backtrace step_depth=${CT_STEP_COUNT} @@ -178,7 +178,7 @@ CT_DoLog() { if [ $# -eq 0 ]; then cat - else - printf "%s\n" "${*}" + echo -e "${*}" fi |( IFS="${CR}" # We want the full lines, even leading spaces _prog_bar_cpt=0 _prog_bar[0]='/' diff --git a/scripts/scripts.mk b/scripts/scripts.mk index 8373f9bf..77368a7e 100644 --- a/scripts/scripts.mk +++ b/scripts/scripts.mk @@ -33,16 +33,16 @@ endif PHONY += scripts scripts: - @$(ECHO) ' MKDIR $@' + @$(CT_ECHO) ' MKDIR $@' $(SILENT)mkdir -p $@ $(CONFIG_SUB_DEST): scripts FORCE - @$(ECHO) ' WGET $@' + @$(CT_ECHO) ' WGET $@' $(SILENT)wget $(wget_opt) -O $@ $(CONFIG_SUB_SRC) $(SILENT)chmod u+rwx,go+rx-w $@ $(CONFIG_GUESS_DEST): scripts FORCE - @$(ECHO) ' WGET $@' + @$(CT_ECHO) ' WGET $@' $(SILENT)wget $(wget_opt) -O $@ $(CONFIG_GUESS_SRC) $(SILENT)chmod u+rwx,go+rx-w $@ @@ -50,5 +50,5 @@ $(CONFIG_GUESS_DEST): scripts FORCE # Clean up the mess distclean:: - @$(ECHO) " CLEAN scripts" + @$(CT_ECHO) " CLEAN scripts" $(SILENT)[ $(CT_TOP_DIR) = $(CT_LIB_DIR) ] || rm -rf $(CT_TOP_DIR)/scripts diff --git a/scripts/showSamples.sh b/scripts/showSamples.sh index 684e1184..76609f25 100755 --- a/scripts/showSamples.sh +++ b/scripts/showSamples.sh @@ -23,10 +23,16 @@ dump_single_sample() { [ "$1" = "-v" ] && verbose=1 && shift [ "$1" = "-w" ] && wiki=1 && shift local sample="$1" + . $(pwd)/.config.sample case "${sample}" in current) sample_type="l" sample="$( ${CT_NG} show-tuple )" + case "${CT_TOOLCHAIN_TYPE}" in + canadian) + sample="${CT_HOST},$sample" + ;; + esac ;; *) if [ -f "${CT_TOP_DIR}/samples/${sample}/crosstool.config" ]; then sample_top="${CT_TOP_DIR}" @@ -37,7 +43,6 @@ dump_single_sample() { fi ;; esac - . $(pwd)/.config.sample if [ ${wiki} -eq 0 ]; then width=14 printf "[%s" "${sample_type}" |