yann@166: # Makefile to manage samples yann@63: yann@1001: # ---------------------------------------------------------- yann@166: # Build the list of available samples yann@182: CT_TOP_SAMPLES := $(patsubst $(CT_TOP_DIR)/samples/%/crosstool.config,%,$(wildcard $(CT_TOP_DIR)/samples/*/crosstool.config)) yann@182: CT_LIB_SAMPLES := $(filter-out $(CT_TOP_SAMPLES),$(patsubst $(CT_LIB_DIR)/samples/%/crosstool.config,%,$(wildcard $(CT_LIB_DIR)/samples/*/crosstool.config))) yann@1001: CT_SAMPLES := $(sort $(CT_TOP_SAMPLES) $(CT_LIB_SAMPLES)) yann@182: yann@1001: # ---------------------------------------------------------- yann@1001: # This part deals with the samples help entries yann@63: yann@176: help-config:: yann@333: @echo ' saveconfig - Save current config as a preconfigured target' yann@176: yann@176: help-samples:: yann@544: @echo ' list-samples - prints the list of all samples (for scripting)' yann@544: @echo ' show- - show a brief overview of (list below)' yann@544: @echo ' - preconfigure crosstool-NG with (list below)' yann@1025: @echo ' build-all[.#] - Build *all* samples (list below) and install in' yann@1025: @echo ' $${CT_PREFIX} (which you must set)' yann@1025: @echo ' Available samples:' yann@182: @$(CT_LIB_DIR)/scripts/showSamples.sh $(CT_SAMPLES) yann@176: yann@560: help-distrib:: yann@560: @echo ' wiki-samples - Print a DokuWiki table of samples' yann@560: yann@1025: help-env:: yann@1025: @echo ' CT_PREFIX - directory in which to auto-install samples' yann@1025: @echo ' (see action "build-all", above).' yann@1025: yann@1001: # ---------------------------------------------------------- yann@1001: # This part deals with printing samples information yann@1001: yann@1001: # Prints the details of a sample yann@1001: PHONY += $(patsubst %,show-%,$(CT_SAMPLES)) yann@539: $(patsubst %,show-%,$(CT_SAMPLES)): yann@539: @$(CT_LIB_DIR)/scripts/showSamples.sh -v $(patsubst show-%,%,$(@)) yann@539: yann@1001: # print the list of all available samples yann@544: PHONY += list-samples yann@544: list-samples: .FORCE yann@1155: @echo $(CT_SAMPLES) |$(sed) -r -e 's/ /\n/g;' |sort yann@474: yann@1001: wiki-samples: yann@1001: $(SILENT)$(CT_LIB_DIR)/scripts/showSamples.sh -w $(CT_SAMPLES) yann@1001: yann@1001: # ---------------------------------------------------------- yann@1001: # This part deals with saving/restoring samples yann@1001: yann@1001: # Save a sample yann@1001: saveconfig: yann@1001: $(SILENT)$(CT_LIB_DIR)/scripts/saveSample.sh yann@1001: yann@1001: # The 'sample_dir' function prints the directory in which the sample is, yann@1001: # searching first in local samples, then in global samples yann@1001: define sample_dir yann@1001: $$( [ -d $(CT_TOP_DIR)/samples/$(1) ] && echo "$(CT_TOP_DIR)/samples/$(1)" || echo "$(CT_LIB_DIR)/samples/$(1)") yann@1001: endef yann@1001: yann@933: # How we do recall one sample yann@182: PHONY += $(CT_SAMPLES) yann@166: $(CT_SAMPLES): yann@940: $(SILENT)cp $(call sample_dir,$@)/crosstool.config .config yann@1025: $(SILENT)$(MAKE) -rf $(CT_NG) V=$(V) oldconfig yann@935: @echo yann@935: @echo '***********************************************************' yann@935: @echo yann@940: $(SILENT)( . $(call sample_dir,$@)/reported.by; \ yann@935: echo "Initially reported by: $${reporter_name:-Yann E. MORIN}"; \ yann@935: echo "URL: $${reporter_url:-http://ymorin.is-a-geek.org/}"; \ yann@935: if [ -n "$${reporter_comment}" ]; then \ yann@935: echo ; \ yann@935: echo "Comment:"; \ yann@935: printf "$${reporter_comment}\n"; \ yann@935: fi; \ yann@935: echo ; \ yann@935: echo '***********************************************************'; \ yann@935: ) yann@1155: $(SILENT)if $(grep) -E '^CT_EXPERIMENTAL=y$$' .config >/dev/null 2>&1; then \ yann@940: echo ; \ yann@940: echo 'WARNING! This sample may enable experimental features.'; \ yann@940: echo ' Please be sure to review the configuration prior'; \ yann@940: echo ' to building and using your toolchain!'; \ yann@940: echo 'Now, you have been warned!'; \ yann@940: echo ; \ yann@940: echo '***********************************************************'; \ yann@822: fi yann@935: @echo yann@933: @echo 'Now configured for "$@"' yann@182: yann@1001: # ---------------------------------------------------------- yann@1025: # Some helper functions yann@166: yann@1025: # Create the rule to build a sample yann@1025: # $1: sample tuple yann@1025: # $2: prefix yann@1025: define build_sample yann@1067: @$(ECHO) ' CONF $(1)' yann@1025: $(SILENT)cp $(call sample_dir,$(1))/crosstool.config .config yann@1155: $(SILENT)$(sed) -i -r -e 's:^(CT_PREFIX_DIR=).*$$:\1"$(2)":;' .config yann@1155: $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_(WARN|INFO|EXTRA|DEBUG|ALL)).*$$:# \1 is not set:;' .config yann@1155: $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_ERROR).*$$:\1=y:;' .config yann@1155: $(SILENT)$(sed) -i -r -e 's:^(CT_LOG_LEVEL_MAX)=.*$$:\1="ERROR":;' .config yann@1155: $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_TO_FILE).*$$:\1=y:;' .config yann@1155: $(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_PROGRESS_BAR).*$$:\1=y:;' .config yann@1067: $(SILENT)$(MAKE) -rf $(CT_NG) V=0 oldconfig yann@1025: @$(ECHO) ' BUILD $(1)' yann@1067: $(SILENT)$(MAKE) -rf $(CT_NG) V=0 build yann@1025: endef yann@230: yann@1025: # ---------------------------------------------------------- yann@1025: # Build samples for use (not regtest!) yann@230: yann@1025: # Check that PREFIX is set if building samples yann@1025: ifneq ($(strip $(MAKECMDGOALS)),) yann@1025: ifneq ($(strip $(filter $(patsubst %,build-%,$(CT_SAMPLES)) build-all,$(MAKECMDGOALS))),) yann@230: yann@1025: ifeq ($(strip $(CT_PREFIX)),) yann@1025: $(error Please set 'CT_PREFIX' to where you want to install generated toolchain samples!) yann@1025: endif yann@333: yann@1025: endif # MAKECMDGOALS contains a build sample rule yann@1025: endif # MAKECMDGOALS != "" yann@1025: yann@1025: # Build a single sample yann@1025: $(patsubst %,build-%,$(CT_SAMPLES)): yann@1025: $(call build_sample,$(patsubst build-%,%,$@),$(CT_PREFIX)/$(patsubst build-%,%,$@)) yann@1025: yann@1025: # Build al samples yann@1025: build-all: $(patsubst %,build-%,$(CT_SAMPLES)) yann@1025: yann@1025: # Build all samples, overiding the number of // jobs per sample yann@1025: build-all.%: yann@1155: $(SILENT)$(MAKE) -rf $(CT_NG) V=$(V) $(shell echo "$(@)" |$(sed) -r -e 's|^([^.]+)\.([[:digit:]]+)$$|\1 CT_JOBS=\2|;') yann@1025: