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
|