summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--config/config.mk20
-rw-r--r--ct-ng.in21
-rw-r--r--kconfig/kconfig.mk10
-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.mk74
-rw-r--r--scripts/functions4
-rw-r--r--scripts/scripts.mk8
-rwxr-xr-xscripts/showSamples.sh7
10 files changed, 100 insertions, 46 deletions
diff --git a/.gitignore b/.gitignore
index 7854d8b..1a510d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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 8cc2b15..669e157 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
diff --git a/ct-ng.in b/ct-ng.in
index 6450aab..6149d1b 100644
--- a/ct-ng.in
+++ b/ct-ng.in
@@ -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 f59de5a..3d330b4 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 167df55..167df55 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 c2bc32b..c2bc32b 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 4545d5c..c87e5fc 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 8665346..2261b8d 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 8373f9b..77368a7 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 684e118..76609f2 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}"