]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/scripts/configure
kernel: Remove ARM LPAE image
[ipfire-3.x.git] / kernel / scripts / configure
1 #!/bin/bash
2 ###############################################################################
3 # IPFire.org - An Open Source Firewall Solution #
4 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
5 ###############################################################################
6
7 BASEDIR=$(dirname ${0})
8 SCRIPTS_DIR=${BASEDIR}
9
10 # x86_64
11 CONFIGS="x86_64:default"
12
13 # i686
14 CONFIGS="${CONFIGS} i686:legacy i686:default"
15
16 # aarch64
17 CONFIGS="${CONFIGS} aarch64:default"
18
19 # armv7hl
20 CONFIGS="${CONFIGS} armv7hl:default"
21
22 PLATFORMS="x86 arm"
23 declare -A SUBPLATFORMS
24 SUBPLATFORMS=(
25 [arm]="arm64 arm32"
26 )
27
28 function get_platform() {
29 local arch="${1}"
30
31 case "${arch}" in
32 aarch64|arm*)
33 echo "arm"
34 ;;
35 x86_64|i?86)
36 echo "x86"
37 ;;
38 *)
39 return 1
40 ;;
41 esac
42 }
43
44 function get_subplatform() {
45 local arch="${1}"
46
47 case "${arch}" in
48 aarch64)
49 echo "arm64"
50 ;;
51 arm*)
52 echo "arm32"
53 ;;
54 *)
55 return 1
56 ;;
57 esac
58 }
59
60 function get_kernel_arch() {
61 local arch="${1}"
62
63 case "${arch}" in
64 aarch64)
65 echo "arm64"
66 ;;
67 arm*)
68 echo "arm"
69 ;;
70 x86_64|i?86)
71 echo "x86"
72 ;;
73 esac
74 }
75
76 function merge_config() {
77 local arch=${1}
78 local flavour=${2}
79 local output=${3}
80 shift 3
81
82 local arg
83 for arg in arch flavour output; do
84 if [ -z "${!arg}" ]; then
85 echo >&2 "merge usage: <arch> <flavour> <output filename>"
86 exit 2
87 fi
88 done
89
90 local config_mode="oldnoconfig"
91 local extra_configs
92 while [ $# -gt 0 ]; do
93 case "${1}" in
94 --mode=*)
95 config_mode=${1#--mode=}
96 shift
97 ;;
98 -*)
99 echo >&2 "Unknown option: ${1}"
100 ;;
101 *)
102 extra_configs="${extra_configs} ${1}"
103 ;;
104 esac
105 shift
106 done
107
108 local configs="${extra_configs} config-generic"
109
110 case "${arch}:${flavour}" in
111 # x86
112 x86_64:default)
113 configs="${configs} config-x86-generic config-x86_64-default"
114 ;;
115 i686:default)
116 configs="${configs} config-x86-generic config-i686-default"
117 ;;
118 i686:legacy)
119 configs="${configs} config-x86-generic config-i686-default"
120 configs="${configs} config-i686-legacy"
121 ;;
122
123 # ARM64
124 aarch64:default)
125 configs="${configs} config-arm-generic config-arm64-generic"
126 ;;
127
128 # ARM
129 armv7hl:default)
130 configs="${configs} config-arm-generic config-arm32-generic"
131 ;;
132 *)
133 echo >&2 "ERROR: Invalid parameters given: $@"
134 return 1
135 ;;
136 esac
137
138 # Merge the configuration files from its elementary configuration
139 # files.
140 local tmp_out=$(mktemp)
141 local tmp_in=$(mktemp)
142
143 local config
144 for config in ${configs}; do
145 cat ${tmp_out} > ${tmp_in}
146 perl ${SCRIPTS_DIR}/merge.pl \
147 ${config} ${tmp_in} > ${tmp_out}
148 done
149
150 if [ "${config_mode}" != "none" ]; then
151 echo "Running 'make oldnoconfig' for ${arch} (${flavour})..."
152 local kernel_arch="$(get_kernel_arch "${arch}")"
153 (
154 cd ${KERNEL_DIR}
155 cat ${tmp_out} > .config
156 make ARCH="${kernel_arch}" ${config_mode}
157 cat .config > ${tmp_out}
158 )
159 fi
160
161 cat ${tmp_out} > ${output}
162 rm -f ${tmp_in} ${tmp_out}
163 }
164
165 # This function runs an interactive "make oldconfig".
166 function make_oldconfig() {
167 local arch="x86_64"
168 local kernel_arch="x86"
169 local flavour="default"
170
171 local config_in=$(mktemp)
172 local config_out=$(mktemp)
173 local diff_out=$(mktemp)
174
175 merge_config ${arch} ${flavour} ${config_in} --mode=none
176
177 (
178 cd ${KERNEL_DIR}
179 cat ${config_in} > .config
180
181 echo "You may now edit the configuration..."
182
183 local option
184 select option in oldconfig menuconfig oldnoconfig startover quit; do
185 case "${option}" in
186 oldconfig|menuconfig|oldnoconfig)
187 make ARCH=${kernel_arch} ${option}
188 ;;
189 startover)
190 cat ${config_in} > .config
191 ;;
192 quit)
193 break
194 ;;
195 esac
196 done
197
198 cat .config > ${config_out}
199 )
200
201 ${SCRIPTS_DIR}/configdiff.py ${config_in} ${config_out} > ${diff_out}
202
203 # Update the rest of the configurations.
204 diff_configs ${diff_out} --mode=oldconfig
205
206 rm -f ${config_in} ${config_out} ${diff_out}
207 }
208
209 # config-generic
210 # Intersection of all files.
211 # config-x86-generic
212 # Diff of (intersection of (i686-{default,legacy} and x86_64-default)
213 # against config-generic).
214 # config-x86-x86_64
215 # Diff against merge of (config-generic and config-x86-generic).
216
217 function diff_configs() {
218 local extra_configs="$@"
219
220 local filename
221 local platform
222 local subplatform
223
224 declare -A platform_configs
225 declare -A subplatform_configs
226
227 tmpdir=$(mktemp -d)
228
229 for config in ${CONFIGS}; do
230 arch=${config%:*}
231 flavour=${config#*:}
232
233 filename=${tmpdir}/config-${arch}-${flavour}
234
235 merge_config ${arch} ${flavour} ${filename} ${extra_configs}
236
237 # Do not include leaf configuration.
238 case "${config}" in
239 i686:legacy)
240 continue
241 ;;
242 esac
243
244 platform="$(get_platform "${arch}")"
245 subplatform="$(get_subplatform "${arch}")"
246
247 if [ -n "${subplatform}" ]; then
248 subplatform_configs[${subplatform}]="${subplatform_configs[${subplatform}]} ${filename}"
249 else
250 platform_configs[${platform}]="${platform_configs[${platform}]} ${filename}"
251 fi
252 done
253
254 local common_configs
255 for platform in ${PLATFORMS}; do
256 for subplatform in ${SUBPLATFORMS[${platform}]}; do
257 filename="${tmpdir}/config-${subplatform}-common"
258 ${SCRIPTS_DIR}/configcommon.py ${subplatform_configs[${subplatform}]} \
259 > ${filename}
260
261 platform_configs[${platform}]="${platform_configs[${platform}]} ${filename}"
262 done
263
264 filename="${tmpdir}/config-${platform}-common"
265 ${SCRIPTS_DIR}/configcommon.py ${platform_configs[${platform}]} \
266 > ${filename}
267
268 common_configs="${common_configs} ${filename}"
269 done
270
271 ${SCRIPTS_DIR}/configcommon.py ${common_configs} > ${tmpdir}/config-generic
272
273 for platform in ${PLATFORMS}; do
274 for subplatform in ${SUBPLATFORMS[${platform}]}; do
275 ${SCRIPTS_DIR}/configdiff.py \
276 ${tmpdir}/config-${platform}-common \
277 ${tmpdir}/config-${subplatform}-common \
278 > ${tmpdir}/config-${subplatform}-generic
279 done
280
281 ${SCRIPTS_DIR}/configdiff.py \
282 ${tmpdir}/config-generic \
283 ${tmpdir}/config-${platform}-common \
284 > ${tmpdir}/config-${platform}-generic
285 done
286
287 for config in ${CONFIGS}; do
288 arch=${config%:*}
289 flavour=${config#*:}
290
291 filename=${tmpdir}/config-${arch}-${flavour}
292
293 case "${config}" in
294 aarch64:default|armv7hl:default)
295 # Virtual configuration
296 rm -f ${filename}
297 continue
298 ;;
299 i686:legacy)
300 # Legacy depends directly on the default configuration.
301 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-${arch}-default \
302 ${filename} > ${filename}.tmp
303 ;;
304 *)
305 platform="$(get_subplatform "${arch}" || get_platform "${arch}")"
306 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-${platform}-common \
307 ${filename} > ${filename}.tmp
308 ;;
309 esac
310 mv ${filename}{.tmp,}
311 done
312 rm -f ${tmpdir}/config-*-common
313
314 for config in ${tmpdir}/*; do
315 if ! cmp $(basename ${config}) ${config} &>/dev/null; then
316 echo "$(basename ${config}) has changed."
317 fi
318 cat ${config} > $(basename ${config})
319 done
320
321 rm -rf ${tmpdir}
322 }
323
324 KERNEL_DIR=
325
326 # Parse commandline.
327 while [ $# -gt 0 ]; do
328 arg=${1}; shift
329 case "${arg}" in
330 --kernel-dir=*)
331 KERNEL_DIR=${arg#--kernel-dir=}
332 ;;
333 help|"")
334 echo "${0} - available commands:"
335 echo " * merge <arch> <flavour> <output filename>"
336 echo " * update ..."
337 echo " * oldconfig"
338 echo ""
339 echo " You must always set --kernel-dir=..."
340 exit 0
341 ;;
342 merge|oldconfig|update)
343 action=${arg}
344 break
345 ;;
346 esac
347 done
348
349 if [ -z "${KERNEL_DIR}" ]; then
350 echo >&2 "--kernel-dir=... was not set!"
351 exit 2
352 fi
353
354 if [ -z "${action}" ]; then
355 echo >&2 "No action given... Try ${0} help."
356 exit 2
357 fi
358
359 case "${action}" in
360 merge)
361 merge_config $@
362 exit $?
363 ;;
364 oldconfig)
365 make_oldconfig
366 exit $?
367 ;;
368 update)
369 diff_configs $@
370 exit $?
371 ;;
372 esac
373
374 exit 1