config/config.mk
author Titus von Boxberg <titus@v9g.de>
Sat May 22 22:01:18 2010 +0200 (2010-05-22)
changeset 1970 cdd761ad2d1a
parent 1877 b579a5cb53d1
child 1976 2d90ec981ba3
permissions -rw-r--r--
scripts/build/internals.sh: compile wrapper with portable options.

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