samples/samples.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Dec 30 15:36:22 2009 +0100 (2009-12-30)
changeset 1669 61edd9d19e3c
parent 1618 7f52e1cca71e
child 1682 bcf3da3bb165
permissions -rw-r--r--
scripts/functions: add aria2, a powerfull downloader

aria2 is a powerfull downloader that is capable of chunking and
parallel retrieval.

Due to li;itations in crosstool-NG retrieval facilities, it's not possible
to take fully advantage of aria2. It might happen that, in the future,
those limitations get lifted away, so we can take use features such as
parallel downloading from more than one server at the same time. For now,
it should still speed up downloads thanks to parallel downloading of chunks.
     1 # Makefile to manage samples
     2 
     3 # ----------------------------------------------------------
     4 # Build the list of available samples
     5 CT_TOP_SAMPLES := $(patsubst $(CT_TOP_DIR)/samples/%/crosstool.config,%,$(wildcard $(CT_TOP_DIR)/samples/*/crosstool.config))
     6 CT_LIB_SAMPLES := $(filter-out $(CT_TOP_SAMPLES),$(patsubst $(CT_LIB_DIR)/samples/%/crosstool.config,%,$(wildcard $(CT_LIB_DIR)/samples/*/crosstool.config)))
     7 CT_SAMPLES := $(sort $(CT_TOP_SAMPLES) $(CT_LIB_SAMPLES))
     8 
     9 # ----------------------------------------------------------
    10 # This part deals with the samples help entries
    11 
    12 help-config::
    13 	@echo  '  saveconfig         - Save current config as a preconfigured target'
    14 
    15 help-samples::
    16 	@echo  '  list-samples       - prints the list of all samples (for scripting)'
    17 	@echo  '  show-<sample>      - show a brief overview of <sample> (list below)'
    18 	@echo  '  <sample>           - preconfigure crosstool-NG with <sample> (list below)'
    19 	@echo  '  build-all[.#]      - Build *all* samples (list below) and install in'
    20 	@echo  '                       $${CT_PREFIX} (which you must set)'
    21 	@echo  '  Available samples:'
    22 	@$(CT_LIB_DIR)/scripts/showSamples.sh $(CT_SAMPLES)
    23 
    24 help-distrib::
    25 	@echo  '  wiki-samples       - Print a DokuWiki table of samples'
    26 
    27 help-env::
    28 	@echo  '  CT_PREFIX          - directory in which to auto-install samples'
    29 	@echo  '                       (see action "build-all", above).'
    30 
    31 # ----------------------------------------------------------
    32 # This part deals with printing samples information
    33 
    34 # Prints the details of a sample
    35 PHONY += $(patsubst %,show-%,$(CT_SAMPLES))
    36 $(patsubst %,show-%,$(CT_SAMPLES)):
    37 	@$(CT_LIB_DIR)/scripts/showSamples.sh -v $(patsubst show-%,%,$(@))
    38 
    39 # print the list of all available samples
    40 PHONY += list-samples
    41 list-samples: FORCE
    42 	@echo $(CT_SAMPLES) |$(sed) -r -e 's/ /\n/g;' |sort
    43 
    44 wiki-samples:
    45 	$(SILENT)$(CT_LIB_DIR)/scripts/showSamples.sh -w $(CT_SAMPLES)
    46 
    47 # ----------------------------------------------------------
    48 # This part deals with saving/restoring samples
    49 
    50 PHONY += samples
    51 samples:
    52 	@$(ECHO) '  MKDIR $@'
    53 	$(SILENT)mkdir -p $@
    54 
    55 # Save a sample
    56 saveconfig: .config samples
    57 	$(SILENT)$(CT_LIB_DIR)/scripts/saveSample.sh
    58 
    59 # The 'sample_dir' function prints the directory in which the sample is,
    60 # searching first in local samples, then in global samples
    61 define sample_dir
    62 $$( [ -d $(CT_TOP_DIR)/samples/$(1) ] && echo "$(CT_TOP_DIR)/samples/$(1)" || echo "$(CT_LIB_DIR)/samples/$(1)")
    63 endef
    64 
    65 # How we do recall one sample
    66 PHONY += $(CT_SAMPLES)
    67 $(CT_SAMPLES):
    68 	$(SILENT)cp $(call sample_dir,$@)/crosstool.config .config
    69 	$(SILENT)$(MAKE) -rf $(CT_NG) V=$(V) oldconfig
    70 	@echo
    71 	@echo  '***********************************************************'
    72 	@echo
    73 	$(SILENT)( . $(call sample_dir,$@)/reported.by;                             \
    74 	   echo "Initially reported by: $${reporter_name:-Yann E. MORIN}";          \
    75 	   echo "URL: $${reporter_url:-http://ymorin.is-a-geek.org/}";              \
    76 	   if [ -n "$${reporter_comment}" ]; then                                   \
    77 	     echo  ;                                                                \
    78 	     echo  "Comment:";                                                      \
    79 	     printf "$${reporter_comment}\n";                                       \
    80 	   fi;                                                                      \
    81 	   echo  ;                                                                  \
    82 	   echo  '***********************************************************';     \
    83 	 )
    84 	$(SILENT)if $(grep) -E '^CT_EXPERIMENTAL=y$$' .config >/dev/null 2>&1; then \
    85 	   echo  ;                                                                  \
    86 	   echo  'WARNING! This sample may enable experimental features.';          \
    87 	   echo  '         Please be sure to review the configuration prior';       \
    88 	   echo  '         to building and using your toolchain!';                  \
    89 	   echo  'Now, you have been warned!';                                      \
    90 	   echo  ;                                                                  \
    91 	   echo  '***********************************************************';     \
    92 	 fi
    93 	@echo
    94 	@echo  'Now configured for "$@"'
    95 
    96 # ----------------------------------------------------------
    97 # Some helper functions
    98 
    99 # Create the rule to build a sample
   100 # $1: sample tuple
   101 # $2: prefix
   102 define build_sample
   103 	@$(ECHO) '  CONF  $(1)'
   104 	$(SILENT)cp $(call sample_dir,$(1))/crosstool.config .config
   105 	$(SILENT)$(sed) -i -r -e 's:^(CT_PREFIX_DIR=).*$$:\1"$(2)":;' .config
   106 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_(WARN|INFO|EXTRA|DEBUG|ALL)).*$$:# \1 is not set:;' .config
   107 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_ERROR).*$$:\1=y:;' .config
   108 	$(SILENT)$(sed) -i -r -e 's:^(CT_LOG_LEVEL_MAX)=.*$$:\1="ERROR":;' .config
   109 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_TO_FILE).*$$:\1=y:;' .config
   110 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_PROGRESS_BAR).*$$:\1=y:;' .config
   111 	$(SILENT)$(MAKE) -rf $(CT_NG) V=0 oldconfig
   112 	@$(ECHO) '  BUILD $(1)'
   113 	$(SILENT)$(MAKE) -rf $(CT_NG) V=0 build
   114 endef
   115 
   116 # ----------------------------------------------------------
   117 # Build samples for use (not regtest!)
   118 
   119 # Check that PREFIX is set if building samples
   120 ifneq ($(strip $(MAKECMDGOALS)),)
   121 ifneq ($(strip $(filter $(patsubst %,build-%,$(CT_SAMPLES)) build-all,$(MAKECMDGOALS))),)
   122 
   123 ifeq ($(strip $(CT_PREFIX)),)
   124 $(error Please set 'CT_PREFIX' to where you want to install generated toolchain samples!)
   125 endif
   126 
   127 endif # MAKECMDGOALS contains a build sample rule
   128 endif # MAKECMDGOALS != ""
   129 
   130 # Build a single sample
   131 $(patsubst %,build-%,$(CT_SAMPLES)):
   132 	$(call build_sample,$(patsubst build-%,%,$@),$(CT_PREFIX)/$(patsubst build-%,%,$@))
   133 
   134 # Build al samples
   135 build-all: $(patsubst %,build-%,$(CT_SAMPLES))
   136 
   137 # Build all samples, overiding the number of // jobs per sample
   138 build-all.%:
   139 	$(SILENT)$(MAKE) -rf $(CT_NG) V=$(V) $(shell echo "$(@)" |$(sed) -r -e 's|^([^.]+)\.([[:digit:]]+)$$|\1 CT_JOBS=\2|;')
   140