config/config.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Aug 30 19:33:48 2009 +0200 (2009-08-30)
changeset 1497 1b90f0b34c80
parent 1256 acf1944ef6a4
child 1854 02b74bd4373f
permissions -rw-r--r--
config: move down companion libraries sub-menu

Move the companion libraries sub-menu down the main menu.
That way, the user does not need to go back and forth in the menu
to change options set by the different components that select the
companion libraries (binutils, gcc, gdb).
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@1269
    90
	    echo "    prompt \"$${entry}\"";                                    \
yann@1269
    91
	    dep_val=$$($(grep) -E '^# depends on ' $${file} 2>/dev/null);       \
yann@1269
    92
	    if [ -n "$${dep_val}" ]; then                                       \
yann@1269
    93
	      echo "    $${dep_val#\# }";                                       \
yann@1159
    94
	    fi;                                                                 \
yann@1256
    95
	    echo "";                                                            \
yann@1159
    96
	  done;                                                                 \
yann@1159
    97
	  echo "endchoice";                                                     \
yann@1159
    98
	  for entry in $(5); do                                                 \
yann@1159
    99
	    file="$(4)/$${entry}.in";                                           \
yann@1159
   100
	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
yann@1159
   101
	    echo "";                                                            \
yann@1159
   102
	    echo "if $(3)_$${_entry}";                                          \
yann@1159
   103
	    echo "config $(3)";                                                 \
yann@1159
   104
	    echo "    default \"$${entry}\" if $(3)_$${_entry}";                \
yann@1159
   105
	    echo "source $${file}";                                             \
yann@1159
   106
	    echo "endif";                                                       \
yann@1159
   107
	  done;                                                                 \
yann@1178
   108
	  echo "";                                                              \
yann@1178
   109
	  for file in $(wildcard $(4)/*.in-common); do                          \
yann@1178
   110
	    echo "source $${file}";                                             \
yann@1178
   111
	  done;                                                                 \
yann@912
   112
	 ) >$(1)
yann@912
   113
endef
yann@628
   114
yann@926
   115
# The function 'build_gen_menu_in' builds a menuconfig for each component in
yann@926
   116
# the given list, source-ing the associated files conditionnaly:
yann@916
   117
# $1 : destination file
yann@916
   118
# $2 : name of entries family (eg. Tools, Debug...)
yann@916
   119
# $3 : prefix for the menu entries (eg. TOOL, DEBUG)
yann@916
   120
# $4 : base directory containing config files
yann@916
   121
# $5 : list of config entries (eg. for tools: "libelf sstrip"..., and for
yann@916
   122
#      debug: "dmalloc duma gdb"...)
yann@916
   123
# Example to build the tools generated config file:
yann@916
   124
# $(call build_gen_menu_in,config.gen/tools.in,Tools,TOOL,config/tools,$(TOOLS))
yann@916
   125
define build_gen_menu_in
yann@940
   126
	@$(ECHO) '  IN    $(1)'
yann@1159
   127
	$(SILENT)(echo "# $(2) facilities menu";                                \
yann@1159
   128
	  echo "# Generated file, do not edit!!!";                              \
yann@1159
   129
	  echo "";                                                              \
yann@1159
   130
	  for entry in $(5); do                                                 \
yann@1159
   131
	    file="$(4)/$${entry}.in";                                           \
yann@1159
   132
	    _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;');        \
yann@1159
   133
	    echo "menuconfig $(3)_$${_entry}";                                  \
yann@1159
   134
	    echo "    bool";                                                    \
yann@1269
   135
	    echo "    prompt \"$${entry}\"";                                    \
yann@1269
   136
	    dep_val=$$($(grep) -E '^# depends on ' $${file} 2>/dev/null);       \
yann@1269
   137
	    if [ -n "$${dep_val}" ]; then                                       \
yann@1269
   138
	      echo "    $${dep_val#\# }";                                       \
yann@1159
   139
	    fi;                                                                 \
yann@1159
   140
	    echo "if $(3)_$${_entry}";                                          \
yann@1159
   141
	    echo "source $${file}";                                             \
yann@1159
   142
	    echo "endif";                                                       \
yann@1159
   143
	    echo "";                                                            \
yann@1159
   144
	  done;                                                                 \
yann@916
   145
	 ) >$(1)
yann@916
   146
endef
yann@916
   147
yann@926
   148
#-----------------------------------------------------------
yann@926
   149
# The rules for the generated config files
yann@916
   150
yann@926
   151
config.gen/arch.in: $(ARCH_CONFIG_FILES)
yann@926
   152
	$(call build_gen_choice_in,$@,Target Architecture,ARCH,config/arch,$(ARCHS))
yann@861
   153
yann@926
   154
config.gen/kernel.in: $(KERNEL_CONFIG_FILES)
yann@926
   155
	$(call build_gen_choice_in,$@,Target OS,KERNEL,config/kernel,$(KERNELS))
yann@182
   156
yann@926
   157
config.gen/cc.in: $(CC_CONFIG_FILES)
yann@926
   158
	$(call build_gen_choice_in,$@,C compiler,CC,config/cc,$(CCS))
yann@926
   159
yann@926
   160
config.gen/libc.in: $(LIBC_CONFIG_FILES)
yann@926
   161
	$(call build_gen_choice_in,$@,C library,LIBC,config/libc,$(LIBCS))
yann@926
   162
yann@926
   163
config.gen/tools.in: $(TOOL_CONFIG_FILES)
yann@926
   164
	$(call build_gen_menu_in,$@,Tools,TOOL,config/tools,$(TOOLS))
yann@926
   165
yann@926
   166
config.gen/debug.in: $(DEBUG_CONFIG_FILES)
yann@926
   167
	$(call build_gen_menu_in,$@,Debug,DEBUG,config/debug,$(DEBUGS))
yann@926
   168
yann@926
   169
#-----------------------------------------------------------
yann@926
   170
# Cleaning up the mess...
yann@926
   171
yann@1
   172
clean::
yann@940
   173
	@$(ECHO) "  CLEAN config"
yann@940
   174
	$(SILENT)rm -f config 2>/dev/null || true
yann@940
   175
	@$(ECHO) "  CLEAN config.gen"
yann@940
   176
	$(SILENT)rm -rf config.gen