1 # ===========================================================================
2 # crosstool-NG genererated config files
3 # These targets are used from top-level makefile
5 #-----------------------------------------------------------
6 # List all config files, wether sourced or generated
8 # The top-level config file to be used be configurators
9 KCONFIG_TOP = config/config.in
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
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))
24 # Build the list of generated config files
25 GEN_CONFIG_FILES = config.gen/arch.in \
26 config.gen/kernel.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
38 # Helper entry for the configurators
40 config_files: $(STATIC_CONFIG_FILES) $(GEN_CONFIG_FILES)
42 # Where to access to the source config files from
45 $(SILENT)ln -s $(CT_LIB_DIR)/config config
47 # Where to store the generated config files into
49 @$(ECHO) " MKDIR config.gen"
50 $(SILENT)mkdir -p config.gen
52 #-----------------------------------------------------------
53 # Build list of per-component-type items to easily build generated files
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))
62 #-----------------------------------------------------------
63 # Helper functions to ease building generated config files
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
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
78 $(SILENT)(echo "# $(2) menu"; \
79 echo "# Generated file, do not edit!!!"; \
83 echo " prompt \"$(2)\""; \
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}"; \
90 echo " prompt \"$${entry}\""; \
91 dep_val=$$($(grep) -E '^# depends on ' $${file} 2>/dev/null); \
92 if [ -n "$${dep_val}" ]; then \
93 echo " $${dep_val#\# }"; \
98 for entry in $(5); do \
99 file="$(4)/$${entry}.in"; \
100 _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;'); \
102 echo "if $(3)_$${_entry}"; \
103 echo "config $(3)"; \
104 echo " default \"$${entry}\" if $(3)_$${_entry}"; \
105 echo "source $${file}"; \
109 for file in $(wildcard $(4)/*.in-common); do \
110 echo "source $${file}"; \
115 # The function 'build_gen_menu_in' builds a menuconfig for each component in
116 # the given list, source-ing the associated files conditionnaly:
117 # $1 : destination file
118 # $2 : name of entries family (eg. Tools, Debug...)
119 # $3 : prefix for the menu entries (eg. TOOL, DEBUG)
120 # $4 : base directory containing config files
121 # $5 : list of config entries (eg. for tools: "libelf sstrip"..., and for
122 # debug: "dmalloc duma gdb"...)
123 # Example to build the tools generated config file:
124 # $(call build_gen_menu_in,config.gen/tools.in,Tools,TOOL,config/tools,$(TOOLS))
125 define build_gen_menu_in
127 $(SILENT)(echo "# $(2) facilities menu"; \
128 echo "# Generated file, do not edit!!!"; \
130 for entry in $(5); do \
131 file="$(4)/$${entry}.in"; \
132 _entry=$$(echo "$${entry}" |$(sed) -r -s -e 's/[-.+]/_/g;'); \
133 echo "menuconfig $(3)_$${_entry}"; \
135 echo " prompt \"$${entry}\""; \
136 dep_val=$$($(grep) -E '^# depends on ' $${file} 2>/dev/null); \
137 if [ -n "$${dep_val}" ]; then \
138 echo " $${dep_val#\# }"; \
140 echo "if $(3)_$${_entry}"; \
141 echo "source $${file}"; \
148 #-----------------------------------------------------------
149 # The rules for the generated config files
151 config.gen/arch.in: $(ARCH_CONFIG_FILES)
152 $(call build_gen_choice_in,$@,Target Architecture,ARCH,config/arch,$(ARCHS))
154 config.gen/kernel.in: $(KERNEL_CONFIG_FILES)
155 $(call build_gen_choice_in,$@,Target OS,KERNEL,config/kernel,$(KERNELS))
157 config.gen/cc.in: $(CC_CONFIG_FILES)
158 $(call build_gen_choice_in,$@,C compiler,CC,config/cc,$(CCS))
160 config.gen/libc.in: $(LIBC_CONFIG_FILES)
161 $(call build_gen_choice_in,$@,C library,LIBC,config/libc,$(LIBCS))
163 config.gen/tools.in: $(TOOL_CONFIG_FILES)
164 $(call build_gen_menu_in,$@,Tools,TOOL,config/tools,$(TOOLS))
166 config.gen/debug.in: $(DEBUG_CONFIG_FILES)
167 $(call build_gen_menu_in,$@,Debug,DEBUG,config/debug,$(DEBUGS))
169 #-----------------------------------------------------------
170 # Cleaning up the mess...
173 @$(ECHO) " CLEAN config"
174 $(SILENT)rm -f config 2>/dev/null || true
175 @$(ECHO) " CLEAN config.gen"
176 $(SILENT)rm -rf config.gen