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