config/config.mk
author "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
Tue May 31 20:12:35 2011 +0200 (2011-05-31)
changeset 2487 481cd34691f0
parent 2453 3f3774e7e3b4
child 2529 7e191964d8f2
permissions -rw-r--r--
gcc: promote PKGVERSION and BUGURL options to toolchain level

This patch promotes the PKGVERSION and BUGURL options to toolchain level so that
all toolchain components supporting them can benefit from them.

These options are passed to configure through --with-pkgversion and
--with-bugurl.

They are supported by binutils 2.18+, gcc 4.3+, eglibc 2.9+ and gdb 7.0+.

Signed-off-by: "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
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@1976
    12
STATIC_CONFIG_FILES = $(patsubst $(CT_LIB_DIR)/%,%,$(shell find $(CT_LIB_DIR)/config -type f \( -name '*.in' -o -name '*.in.2' \) 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@1976
    17
ARCH_CONFIG_FILES     = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/arch/*.in))
yann@1976
    18
ARCH_CONFIG_FILES_2   = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/arch/*.in.2))
yann@1976
    19
KERNEL_CONFIG_FILES   = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/kernel/*.in))
yann@1976
    20
KERNEL_CONFIG_FILES_2 = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/kernel/*.in.2))
yann@1976
    21
CC_CONFIG_FILES       = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/cc/*.in))
yann@1976
    22
CC_CONFIG_FILES_2     = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/cc/*.in.2))
yann@1976
    23
LIBC_CONFIG_FILES     = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/libc/*.in))
yann@1976
    24
LIBC_CONFIG_FILES_2   = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/libc/*.in.2))
yann@1976
    25
DEBUG_CONFIG_FILES    = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/config/debug/*.in))
yann@182
    26
yann@926
    27
# Build the list of generated config files
yann@926
    28
GEN_CONFIG_FILES = config.gen/arch.in     \
yann@926
    29
                   config.gen/kernel.in   \
yann@926
    30
                   config.gen/cc.in       \
yann@926
    31
                   config.gen/libc.in     \
yann@926
    32
                   config.gen/debug.in
yann@926
    33
# ... and how to access them:
yann@945
    34
# Generated files depends on config.mk (this file) because it has the
yann@926
    35
# functions needed to build the genrated files, and thus they might
yann@945
    36
# need re-generation if config.mk changes
yann@926
    37
$(GEN_CONFIG_FILES): config.gen                         \
yann@945
    38
                     $(CT_LIB_DIR)/config/config.mk
yann@182
    39
yann@945
    40
# Helper entry for the configurators
yann@945
    41
PHONY += config_files
yann@945
    42
config_files: $(STATIC_CONFIG_FILES) $(GEN_CONFIG_FILES)
yann@182
    43
yann@926
    44
# Where to access to the source config files from
yann@926
    45
config:
yann@940
    46
	@$(ECHO) "  LN    config"
yann@940
    47
	$(SILENT)ln -s $(CT_LIB_DIR)/config config
yann@926
    48
yann@926
    49
# Where to store the generated config files into
yann@926
    50
config.gen:
yann@940
    51
	@$(ECHO) "  MKDIR config.gen"
yann@940
    52
	$(SILENT)mkdir -p config.gen
yann@926
    53
yann@926
    54
#-----------------------------------------------------------
yann@926
    55
# Build list of per-component-type items to easily build generated files
yann@926
    56
yann@926
    57
ARCHS   = $(patsubst config/arch/%.in,%,$(ARCH_CONFIG_FILES))
yann@926
    58
KERNELS = $(patsubst config/kernel/%.in,%,$(KERNEL_CONFIG_FILES))
yann@926
    59
CCS     = $(patsubst config/cc/%.in,%,$(CC_CONFIG_FILES))
yann@926
    60
LIBCS   = $(patsubst config/libc/%.in,%,$(LIBC_CONFIG_FILES))
yann@926
    61
DEBUGS  = $(patsubst config/debug/%.in,%,$(DEBUG_CONFIG_FILES))
yann@926
    62
yann@926
    63
#-----------------------------------------------------------
yann@926
    64
# Helper functions to ease building generated config files
yann@926
    65
yann@926
    66
# The function 'build_gen_choice_in' builds a choice-menu of a list of
yann@926
    67
# components in the given list, also adding source-ing of associazted
yann@926
    68
# config files:
yann@912
    69
# $1 : destination file
yann@912
    70
# $2 : name for the entries family (eg. Architecture, kernel...)
yann@912
    71
# $3 : prefix for the choice entries (eg. ARCH, KERNEL...)
yann@912
    72
# $4 : base directory containing config files
yann@1868
    73
# $5 : generate backend conditionals if Y, don't if anything else
yann@1868
    74
# $6 : list of config entries (eg. for architectures: "alpha arm ia64"...,
yann@912
    75
#      and for kernels: "bare-metal linux"...)
yann@912
    76
# Example to build the kernels generated config file:
yann@920
    77
# $(call build_gen_choice_in,config.gen/kernel.in,Target OS,KERNEL,config/kernel,$(KERNELS))
yann@912
    78
define build_gen_choice_in
yann@940
    79
	@$(ECHO) '  IN    $(1)'
yann@1159
    80
	$(SILENT)(echo "# $(2) menu";                                           \
yann@1159
    81
	  echo "# Generated file, do not edit!!!";                              \
yann@1159
    82
	  echo "";                                                              \
yann@2444
    83
	  echo "choice GEN_CHOICE_$(3)";                                        \
yann@1159
    84
	  echo "    bool";                                                      \
yann@1159
    85
	  echo "    prompt \"$(2)\"";                                           \
yann@1159
    86
	  echo "";                                                              \
yann@1868
    87
	  for entry in $(6); do                                                 \
yann@1159
    88
	    file="$(4)/$${entry}.in";                                           \
yann@1159
    89
	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
yann@1159
    90
	    echo "config $(3)_$${_entry}";                                      \
yann@1159
    91
	    echo "    bool";                                                    \
yann@1269
    92
	    echo "    prompt \"$${entry}\"";                                    \
yann@1868
    93
	    if [ "$(5)" = "Y" ]; then                                           \
yann@1877
    94
	      echo "    depends on $(3)_$${_entry}_AVAILABLE";                  \
yann@1868
    95
	    fi;                                                                 \
yann@2444
    96
	    sed -r -e '/^## depends on /!d; s/^## /    /;' $${file} 2>/dev/null;\
yann@2444
    97
	    sed -r -e '/^## select /!d; s/^## /    /;' $${file} 2>/dev/null;    \
yann@2445
    98
	    if grep -E '^## help' $${file} >/dev/null 2>&1; then                        \
yann@2445
    99
	      echo "    help";                                                          \
yann@2445
   100
	      sed -r -e '/^## help ?/!d; s/^## help ?/      /;' $${file} 2>/dev/null;   \
yann@2445
   101
	    fi;                                                                         \
yann@1256
   102
	    echo "";                                                            \
yann@1159
   103
	  done;                                                                 \
yann@1159
   104
	  echo "endchoice";                                                     \
yann@1868
   105
	  for entry in $(6); do                                                 \
yann@1159
   106
	    file="$(4)/$${entry}.in";                                           \
yann@1159
   107
	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
yann@1159
   108
	    echo "";                                                            \
benoit@2484
   109
	    if [ "$(5)" = "Y" ]; then                                                                     \
benoit@2484
   110
	      echo "config $(3)_$${_entry}_AVAILABLE";                                                    \
benoit@2484
   111
	      echo "    bool";                                                                            \
benoit@2484
   112
	      echo "    default y if BACKEND_$(3) = \"$${entry}\" || BACKEND_$(3) = \"\" || ! BACKEND";   \
benoit@2484
   113
	    fi;                                                                                           \
yann@1159
   114
	    echo "if $(3)_$${_entry}";                                          \
yann@1159
   115
	    echo "config $(3)";                                                 \
yann@1159
   116
	    echo "    default \"$${entry}\" if $(3)_$${_entry}";                \
yann@1870
   117
	    echo "source \"$${file}\"";                                         \
yann@1159
   118
	    echo "endif";                                                       \
yann@1159
   119
	  done;                                                                 \
yann@912
   120
	 ) >$(1)
yann@1976
   121
	$(SILENT)(echo "# $(2) second part options";                            \
yann@1976
   122
	  echo "# Generated file, do not edit!!!";                              \
yann@1976
   123
	  for entry in $(6); do                                                 \
yann@1976
   124
	    file="$(4)/$${entry}.in";                                           \
yann@1976
   125
	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
yann@1976
   126
	    if [ -f "$${file}.2" ]; then                                        \
yann@1976
   127
	      echo "";                                                          \
yann@1976
   128
	      echo "if $(3)_$${_entry}";                                        \
yann@1976
   129
	      echo "comment \"$${entry} other options\"";                       \
yann@1976
   130
	      echo "source \"$${file}.2\"";                                     \
yann@1976
   131
	      echo "endif";                                                     \
yann@1976
   132
	    fi;                                                                 \
yann@1976
   133
	  done;                                                                 \
yann@1976
   134
	 ) >$(1).2
yann@912
   135
endef
yann@628
   136
yann@926
   137
# The function 'build_gen_menu_in' builds a menuconfig for each component in
yann@926
   138
# the given list, source-ing the associated files conditionnaly:
yann@916
   139
# $1 : destination file
yann@916
   140
# $2 : name of entries family (eg. Tools, Debug...)
yann@1854
   141
# $3 : prefix for the menu entries (eg. DEBUG)
yann@916
   142
# $4 : base directory containing config files
yann@1854
   143
# $5 : list of config entries (eg. for debug: "dmalloc duma gdb"...)
yann@1854
   144
# Example to build the generated debug config file:
yann@1854
   145
# $(call build_gen_menu_in,config.gen/debug.in,Debug,DEBUG,config/debug,$(DEBUGS))
yann@916
   146
define build_gen_menu_in
yann@940
   147
	@$(ECHO) '  IN    $(1)'
yann@1159
   148
	$(SILENT)(echo "# $(2) facilities menu";                                \
yann@1159
   149
	  echo "# Generated file, do not edit!!!";                              \
yann@1159
   150
	  echo "";                                                              \
yann@1159
   151
	  for entry in $(5); do                                                 \
yann@1159
   152
	    file="$(4)/$${entry}.in";                                           \
yann@1159
   153
	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
yann@1159
   154
	    echo "menuconfig $(3)_$${_entry}";                                  \
yann@1159
   155
	    echo "    bool";                                                    \
yann@1269
   156
	    echo "    prompt \"$${entry}\"";                                    \
yann@2444
   157
	    sed -r -e '/^## depends on /!d; s/^## /    /;' $${file} 2>/dev/null;\
yann@2444
   158
	    sed -r -e '/^## select /!d; s/^## /    /;' $${file} 2>/dev/null;    \
yann@2445
   159
	    if grep -E '^## help' $${file} >/dev/null 2>&1; then                        \
yann@2445
   160
	      echo "    help";                                                          \
yann@2445
   161
	      sed -r -e '/^## help ?/!d; s/^## help ?/      /;' $${file} 2>/dev/null;   \
yann@2445
   162
	    fi;                                                                         \
yann@2444
   163
	    echo "";                                                            \
yann@1159
   164
	    echo "if $(3)_$${_entry}";                                          \
yann@1870
   165
	    echo "source \"$${file}\"";                                         \
yann@1159
   166
	    echo "endif";                                                       \
yann@1159
   167
	    echo "";                                                            \
yann@1159
   168
	  done;                                                                 \
yann@916
   169
	 ) >$(1)
yann@916
   170
endef
yann@916
   171
yann@926
   172
#-----------------------------------------------------------
yann@926
   173
# The rules for the generated config files
yann@916
   174
yann@1976
   175
# WARNING! If a .in file disapears between two runs, that will NOT be detected!
yann@1976
   176
yann@1976
   177
config.gen/arch.in: $(ARCH_CONFIG_FILES) $(ARCH_CONFIG_FILES_2)
yann@1868
   178
	$(call build_gen_choice_in,$@,Target Architecture,ARCH,config/arch,Y,$(ARCHS))
yann@861
   179
yann@1976
   180
config.gen/kernel.in: $(KERNEL_CONFIG_FILES) $(KERNEL_CONFIG_FILES_2)
yann@1868
   181
	$(call build_gen_choice_in,$@,Target OS,KERNEL,config/kernel,Y,$(KERNELS))
yann@182
   182
yann@1976
   183
config.gen/cc.in: $(CC_CONFIG_FILES) $(CC_CONFIG_FILES_2)
yann@1868
   184
	$(call build_gen_choice_in,$@,C compiler,CC,config/cc,,$(CCS))
yann@926
   185
yann@1976
   186
config.gen/libc.in: $(LIBC_CONFIG_FILES) $(LIBC_CONFIG_FILES_2)
yann@1878
   187
	$(call build_gen_choice_in,$@,C library,LIBC,config/libc,Y,$(LIBCS))
yann@926
   188
yann@926
   189
config.gen/debug.in: $(DEBUG_CONFIG_FILES)
yann@926
   190
	$(call build_gen_menu_in,$@,Debug,DEBUG,config/debug,$(DEBUGS))
yann@926
   191
yann@926
   192
#-----------------------------------------------------------
yann@926
   193
# Cleaning up the mess...
yann@926
   194
yann@1
   195
clean::
yann@940
   196
	@$(ECHO) "  CLEAN config"
yann@940
   197
	$(SILENT)rm -f config 2>/dev/null || true
yann@940
   198
	@$(ECHO) "  CLEAN config.gen"
yann@940
   199
	$(SILENT)rm -rf config.gen