aboutsummaryrefslogtreecommitdiff
path: root/scripts/recreate-prereq.sh
blob: 328290ef3011c29ae1170b4c192e1d8f84feab2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash

# Regenerate scripts/prereq (hopefully) portable build.

# Detect toybox prerequisites using record-commands

mkroot/record-commands make clean defconfig toybox
sed -i 's/default y/default n/' generated/Config.probed
CMDLIST="$(echo toybox; ./toybox cut -DF 1 log.txt | sort -u)"
{
  for i in $(tr '[:lower:]' '[:upper:]' <<<"$CMDLIST")
  do
    grep -qi CONFIG_$i'[= ]' .config && echo CONFIG_$i=y
  done
} > prereq.mini

# Create minimal dependency-free build

make clean allnoconfig KCONFIG_ALLCONFIG=prereq.mini
make toybox
cat > scripts/prereq/build.sh << 'EOF'
#!/bin/sh

BUILD='cc -funsigned-char -I scripts/prereq -I . -Os -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -fno-strict-aliasing -DTOYBOX_VERSION=""'
LINK=''
EOF

# harvest stripped down headers

grep -A999 FILES= generated/build.sh >> scripts/prereq/build.sh
echo > scripts/prereq/generated/tags.h
sed 's/.*/#define HELP_& ""/' <<<"$CMDLIST" > scripts/prereq/generated/help.h
egrep "($(xargs <<<"$CMDLIST"|tr ' [:lower:]' '|[:upper:]'))" \
  generated/newtoys.h > scripts/prereq/generated/newtoys.h
FORS="$(sed -n 's/#define FOR_//p' $(grep -o 'toys/[^/]*/[^.]*\.c' scripts/prereq/build.sh) | xargs | tr ' ' '|')"
sed -En '1,/^$/p;/\/\/ ('"$FORS"') /,/^$/p;/#ifdef FOR_('"$FORS"')$/,/^$/p' generated/flags.h > scripts/prereq/generated/flags.h
egrep "OPTSTR_($(egrep -v "($FORS)" <<<"$CMDLIST" | xargs | tr ' ' '|'))" \
  generated/flags.h >> scripts/prereq/generated/flags.h
# TODO: slim down config.h
cp generated/{globals,config}.h scripts/prereq/generated/