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