samples/samples.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
parent 1155 21e86e18f344
child 1618 7f52e1cca71e
permissions -rw-r--r--
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
     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 # Save a sample
    51 saveconfig:
    52 	$(SILENT)$(CT_LIB_DIR)/scripts/saveSample.sh
    53 
    54 # The 'sample_dir' function prints the directory in which the sample is,
    55 # searching first in local samples, then in global samples
    56 define sample_dir
    57 $$( [ -d $(CT_TOP_DIR)/samples/$(1) ] && echo "$(CT_TOP_DIR)/samples/$(1)" || echo "$(CT_LIB_DIR)/samples/$(1)")
    58 endef
    59 
    60 # How we do recall one sample
    61 PHONY += $(CT_SAMPLES)
    62 $(CT_SAMPLES):
    63 	$(SILENT)cp $(call sample_dir,$@)/crosstool.config .config
    64 	$(SILENT)$(MAKE) -rf $(CT_NG) V=$(V) oldconfig
    65 	@echo
    66 	@echo  '***********************************************************'
    67 	@echo
    68 	$(SILENT)( . $(call sample_dir,$@)/reported.by;                             \
    69 	   echo "Initially reported by: $${reporter_name:-Yann E. MORIN}";          \
    70 	   echo "URL: $${reporter_url:-http://ymorin.is-a-geek.org/}";              \
    71 	   if [ -n "$${reporter_comment}" ]; then                                   \
    72 	     echo  ;                                                                \
    73 	     echo  "Comment:";                                                      \
    74 	     printf "$${reporter_comment}\n";                                       \
    75 	   fi;                                                                      \
    76 	   echo  ;                                                                  \
    77 	   echo  '***********************************************************';     \
    78 	 )
    79 	$(SILENT)if $(grep) -E '^CT_EXPERIMENTAL=y$$' .config >/dev/null 2>&1; then \
    80 	   echo  ;                                                                  \
    81 	   echo  'WARNING! This sample may enable experimental features.';          \
    82 	   echo  '         Please be sure to review the configuration prior';       \
    83 	   echo  '         to building and using your toolchain!';                  \
    84 	   echo  'Now, you have been warned!';                                      \
    85 	   echo  ;                                                                  \
    86 	   echo  '***********************************************************';     \
    87 	 fi
    88 	@echo
    89 	@echo  'Now configured for "$@"'
    90 
    91 # ----------------------------------------------------------
    92 # Some helper functions
    93 
    94 # Create the rule to build a sample
    95 # $1: sample tuple
    96 # $2: prefix
    97 define build_sample
    98 	@$(ECHO) '  CONF  $(1)'
    99 	$(SILENT)cp $(call sample_dir,$(1))/crosstool.config .config
   100 	$(SILENT)$(sed) -i -r -e 's:^(CT_PREFIX_DIR=).*$$:\1"$(2)":;' .config
   101 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_(WARN|INFO|EXTRA|DEBUG|ALL)).*$$:# \1 is not set:;' .config
   102 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_ERROR).*$$:\1=y:;' .config
   103 	$(SILENT)$(sed) -i -r -e 's:^(CT_LOG_LEVEL_MAX)=.*$$:\1="ERROR":;' .config
   104 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_TO_FILE).*$$:\1=y:;' .config
   105 	$(SILENT)$(sed) -i -r -e 's:^.*(CT_LOG_PROGRESS_BAR).*$$:\1=y:;' .config
   106 	$(SILENT)$(MAKE) -rf $(CT_NG) V=0 oldconfig
   107 	@$(ECHO) '  BUILD $(1)'
   108 	$(SILENT)$(MAKE) -rf $(CT_NG) V=0 build
   109 endef
   110 
   111 # ----------------------------------------------------------
   112 # Build samples for use (not regtest!)
   113 
   114 # Check that PREFIX is set if building samples
   115 ifneq ($(strip $(MAKECMDGOALS)),)
   116 ifneq ($(strip $(filter $(patsubst %,build-%,$(CT_SAMPLES)) build-all,$(MAKECMDGOALS))),)
   117 
   118 ifeq ($(strip $(CT_PREFIX)),)
   119 $(error Please set 'CT_PREFIX' to where you want to install generated toolchain samples!)
   120 endif
   121 
   122 endif # MAKECMDGOALS contains a build sample rule
   123 endif # MAKECMDGOALS != ""
   124 
   125 # Build a single sample
   126 $(patsubst %,build-%,$(CT_SAMPLES)):
   127 	$(call build_sample,$(patsubst build-%,%,$@),$(CT_PREFIX)/$(patsubst build-%,%,$@))
   128 
   129 # Build al samples
   130 build-all: $(patsubst %,build-%,$(CT_SAMPLES))
   131 
   132 # Build all samples, overiding the number of // jobs per sample
   133 build-all.%:
   134 	$(SILENT)$(MAKE) -rf $(CT_NG) V=$(V) $(shell echo "$(@)" |$(sed) -r -e 's|^([^.]+)\.([[:digit:]]+)$$|\1 CT_JOBS=\2|;')
   135