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