config/config.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Mar 26 18:47:34 2009 +0000 (2009-03-26)
changeset 1268 5594b05bc2d8
parent 1178 41a84f7d3b4f
child 1269 17e37102a037
permissions -rw-r--r--
Add support for building toolchains with gcc-4.4 snapshots.
Initial patch by Dmitry PLOTNIKOV: http://sourceware.org/ml/crossgcc/2009-03/msg00053.html
It [the toolchain] uses current ct-ng (nightly snapshot 20090324, latest
release 1.3.2 work also), glibc 2.9 (from CVS), binutils 2.19 and latest
snapshot of GCC 4.4.0 (as of March 20, 2009).

We have successfully built linux kernel 2.6.29 and a lot of other stuff
with this toolchain.

Here's the patch that adds GCC 4.4.0 to the ct-ng menu and enables it to
download a 4.4.0 snapshot from ftp.

Patch was adpated by me, mostly to better fit the configuration layout.

/trunk/scripts/build/cc/gcc.sh | 34 22 12 0 ++++++++++++++++++++++------------
/trunk/config/cc/gcc.in | 35 30 5 0 ++++++++++++++++++++++++++++++-----
2 files changed, 52 insertions(+), 17 deletions(-)
     1 # ===========================================================================
     2 # crosstool-NG genererated config files
     3 # These targets are used from top-level makefile
     4 
     5 #-----------------------------------------------------------
     6 # List all config files, wether sourced or generated
     7 
     8 # The top-level config file to be used be configurators
     9 KCONFIG_TOP = config/config.in
    10 
    11 # Build the list of all source config files
    12 STATIC_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(shell find $(CT_LIB_DIR)/config -type f -name '*.in' 2>/dev/null))
    13 # ... and how to access them:
    14 $(STATIC_CONFIG_FILES): config
    15 
    16 # Build a list of per-component-type source config files
    17 ARCH_CONFIG_FILES   = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/arch/*.in))
    18 KERNEL_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/kernel/*.in))
    19 CC_CONFIG_FILES     = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/cc/*.in))
    20 LIBC_CONFIG_FILES   = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/libc/*.in))
    21 DEBUG_CONFIG_FILES  = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/debug/*.in))
    22 TOOL_CONFIG_FILES   = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/tools/*.in))
    23 
    24 # Build the list of generated config files
    25 GEN_CONFIG_FILES = config.gen/arch.in     \
    26                    config.gen/kernel.in   \
    27                    config.gen/cc.in       \
    28                    config.gen/libc.in     \
    29                    config.gen/tools.in    \
    30                    config.gen/debug.in
    31 # ... and how to access them:
    32 # Generated files depends on config.mk (this file) because it has the
    33 # functions needed to build the genrated files, and thus they might
    34 # need re-generation if config.mk changes
    35 $(GEN_CONFIG_FILES): config.gen                         \
    36                      $(CT_LIB_DIR)/config/config.mk
    37 
    38 # Helper entry for the configurators
    39 PHONY += config_files
    40 config_files: $(STATIC_CONFIG_FILES) $(GEN_CONFIG_FILES)
    41 
    42 # Where to access to the source config files from
    43 config:
    44 	@$(ECHO) "  LN    config"
    45 	$(SILENT)ln -s $(CT_LIB_DIR)/config config
    46 
    47 # Where to store the generated config files into
    48 config.gen:
    49 	@$(ECHO) "  MKDIR config.gen"
    50 	$(SILENT)mkdir -p config.gen
    51 
    52 #-----------------------------------------------------------
    53 # Build list of per-component-type items to easily build generated files
    54 
    55 ARCHS   = $(patsubst config/arch/%.in,%,$(ARCH_CONFIG_FILES))
    56 KERNELS = $(patsubst config/kernel/%.in,%,$(KERNEL_CONFIG_FILES))
    57 CCS     = $(patsubst config/cc/%.in,%,$(CC_CONFIG_FILES))
    58 LIBCS   = $(patsubst config/libc/%.in,%,$(LIBC_CONFIG_FILES))
    59 DEBUGS  = $(patsubst config/debug/%.in,%,$(DEBUG_CONFIG_FILES))
    60 TOOLS   = $(patsubst config/tools/%.in,%,$(TOOL_CONFIG_FILES))
    61 
    62 #-----------------------------------------------------------
    63 # Helper functions to ease building generated config files
    64 
    65 # The function 'build_gen_choice_in' builds a choice-menu of a list of
    66 # components in the given list, also adding source-ing of associazted
    67 # config files:
    68 # $1 : destination file
    69 # $2 : name for the entries family (eg. Architecture, kernel...)
    70 # $3 : prefix for the choice entries (eg. ARCH, KERNEL...)
    71 # $4 : base directory containing config files
    72 # $5 : list of config entries (eg. for architectures: "alpha arm ia64"...,
    73 #      and for kernels: "bare-metal linux"...)
    74 # Example to build the kernels generated config file:
    75 # $(call build_gen_choice_in,config.gen/kernel.in,Target OS,KERNEL,config/kernel,$(KERNELS))
    76 define build_gen_choice_in
    77 	@$(ECHO) '  IN    $(1)'
    78 	$(SILENT)(echo "# $(2) menu";                                           \
    79 	  echo "# Generated file, do not edit!!!";                              \
    80 	  echo "";                                                              \
    81 	  echo "choice";                                                        \
    82 	  echo "    bool";                                                      \
    83 	  echo "    prompt \"$(2)\"";                                           \
    84 	  echo "";                                                              \
    85 	  for entry in $(5); do                                                 \
    86 	    file="$(4)/$${entry}.in";                                           \
    87 	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
    88 	    echo "config $(3)_$${_entry}";                                      \
    89 	    echo "    bool";                                                    \
    90 	    printf "    prompt \"$${entry}";                                    \
    91 	    if $(grep) -E '^# +EXPERIMENTAL$$' $${file} >/dev/null 2>&1; then   \
    92 	      echo " (EXPERIMENTAL)\"";                                         \
    93 	      echo "    depends on EXPERIMENTAL";                               \
    94 	    else                                                                \
    95 	      echo "\"";                                                        \
    96 	    fi;                                                                 \
    97 	    echo "";                                                            \
    98 	  done;                                                                 \
    99 	  echo "endchoice";                                                     \
   100 	  for entry in $(5); do                                                 \
   101 	    file="$(4)/$${entry}.in";                                           \
   102 	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
   103 	    echo "";                                                            \
   104 	    echo "if $(3)_$${_entry}";                                          \
   105 	    echo "config $(3)";                                                 \
   106 	    echo "    default \"$${entry}\" if $(3)_$${_entry}";                \
   107 	    echo "source $${file}";                                             \
   108 	    echo "endif";                                                       \
   109 	  done;                                                                 \
   110 	  echo "";                                                              \
   111 	  for file in $(wildcard $(4)/*.in-common); do                          \
   112 	    echo "source $${file}";                                             \
   113 	  done;                                                                 \
   114 	 ) >$(1)
   115 endef
   116 
   117 # The function 'build_gen_menu_in' builds a menuconfig for each component in
   118 # the given list, source-ing the associated files conditionnaly:
   119 # $1 : destination file
   120 # $2 : name of entries family (eg. Tools, Debug...)
   121 # $3 : prefix for the menu entries (eg. TOOL, DEBUG)
   122 # $4 : base directory containing config files
   123 # $5 : list of config entries (eg. for tools: "libelf sstrip"..., and for
   124 #      debug: "dmalloc duma gdb"...)
   125 # Example to build the tools generated config file:
   126 # $(call build_gen_menu_in,config.gen/tools.in,Tools,TOOL,config/tools,$(TOOLS))
   127 define build_gen_menu_in
   128 	@$(ECHO) '  IN    $(1)'
   129 	$(SILENT)(echo "# $(2) facilities menu";                                \
   130 	  echo "# Generated file, do not edit!!!";                              \
   131 	  echo "";                                                              \
   132 	  for entry in $(5); do                                                 \
   133 	    file="$(4)/$${entry}.in";                                           \
   134 	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
   135 	    echo "menuconfig $(3)_$${_entry}";                                  \
   136 	    echo "    bool";                                                    \
   137 	    printf "    prompt \"$${entry}";                                    \
   138 	    if $(grep) -E '^# +EXPERIMENTAL$$' $${file} >/dev/null 2>&1; then   \
   139 	      echo " (EXPERIMENTAL)\"";                                         \
   140 	      echo "    depends on EXPERIMENTAL";                               \
   141 	    else                                                                \
   142 	      echo "\"";                                                        \
   143 	    fi;                                                                 \
   144 	    echo "if $(3)_$${_entry}";                                          \
   145 	    echo "source $${file}";                                             \
   146 	    echo "endif";                                                       \
   147 	    echo "";                                                            \
   148 	  done;                                                                 \
   149 	 ) >$(1)
   150 endef
   151 
   152 #-----------------------------------------------------------
   153 # The rules for the generated config files
   154 
   155 config.gen/arch.in: $(ARCH_CONFIG_FILES)
   156 	$(call build_gen_choice_in,$@,Target Architecture,ARCH,config/arch,$(ARCHS))
   157 
   158 config.gen/kernel.in: $(KERNEL_CONFIG_FILES)
   159 	$(call build_gen_choice_in,$@,Target OS,KERNEL,config/kernel,$(KERNELS))
   160 
   161 config.gen/cc.in: $(CC_CONFIG_FILES)
   162 	$(call build_gen_choice_in,$@,C compiler,CC,config/cc,$(CCS))
   163 
   164 config.gen/libc.in: $(LIBC_CONFIG_FILES)
   165 	$(call build_gen_choice_in,$@,C library,LIBC,config/libc,$(LIBCS))
   166 
   167 config.gen/tools.in: $(TOOL_CONFIG_FILES)
   168 	$(call build_gen_menu_in,$@,Tools,TOOL,config/tools,$(TOOLS))
   169 
   170 config.gen/debug.in: $(DEBUG_CONFIG_FILES)
   171 	$(call build_gen_menu_in,$@,Debug,DEBUG,config/debug,$(DEBUGS))
   172 
   173 #-----------------------------------------------------------
   174 # Cleaning up the mess...
   175 
   176 clean::
   177 	@$(ECHO) "  CLEAN config"
   178 	$(SILENT)rm -f config 2>/dev/null || true
   179 	@$(ECHO) "  CLEAN config.gen"
   180 	$(SILENT)rm -rf config.gen