xref: /aosp_15_r20/external/toybox/scripts/recreate-prereq.sh (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker# Regenerate scripts/prereq (hopefully) portable build.
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker# Detect toybox prerequisites using record-commands
6*cf5a6c84SAndroid Build Coastguard Worker
7*cf5a6c84SAndroid Build Coastguard Workermkroot/record-commands make clean defconfig toybox
8*cf5a6c84SAndroid Build Coastguard Workersed -i 's/default y/default n/' generated/Config.probed
9*cf5a6c84SAndroid Build Coastguard WorkerCMDLIST="$(echo toybox; ./toybox cut -DF 1 log.txt | sort -u | grep -v nproc)"
10*cf5a6c84SAndroid Build Coastguard Worker{
11*cf5a6c84SAndroid Build Coastguard Worker  for i in $(tr '[:lower:]' '[:upper:]' <<<"$CMDLIST")
12*cf5a6c84SAndroid Build Coastguard Worker  do
13*cf5a6c84SAndroid Build Coastguard Worker    grep -qi CONFIG_$i'[= ]' .config && echo CONFIG_$i=y
14*cf5a6c84SAndroid Build Coastguard Worker  done
15*cf5a6c84SAndroid Build Coastguard Worker} > prereq.mini
16*cf5a6c84SAndroid Build Coastguard Worker
17*cf5a6c84SAndroid Build Coastguard Worker# Create minimal dependency-free build
18*cf5a6c84SAndroid Build Coastguard Worker
19*cf5a6c84SAndroid Build Coastguard Workermake clean allnoconfig KCONFIG_ALLCONFIG=prereq.mini
20*cf5a6c84SAndroid Build Coastguard Workermake toybox
21*cf5a6c84SAndroid Build Coastguard Workercat > scripts/prereq/build.sh << 'EOF'
22*cf5a6c84SAndroid Build Coastguard Worker#!/bin/sh
23*cf5a6c84SAndroid Build Coastguard Worker
24*cf5a6c84SAndroid Build Coastguard WorkerBUILD='cc -funsigned-char -I scripts/prereq -I . -Os -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -fno-strict-aliasing -DTOYBOX_VERSION=""'
25*cf5a6c84SAndroid Build Coastguard WorkerLINK=''
26*cf5a6c84SAndroid Build Coastguard WorkerEOF
27*cf5a6c84SAndroid Build Coastguard Workergrep -A999 FILES= generated/build.sh >> scripts/prereq/build.sh
28*cf5a6c84SAndroid Build Coastguard Workersed -i 's/ toybox$/&-prereq/' scripts/prereq/build.sh
29*cf5a6c84SAndroid Build Coastguard Worker
30*cf5a6c84SAndroid Build Coastguard Worker# harvest stripped down headers
31*cf5a6c84SAndroid Build Coastguard Worker
32*cf5a6c84SAndroid Build Coastguard Workerecho > scripts/prereq/generated/tags.h
33*cf5a6c84SAndroid Build Coastguard Workersed 's/.*/#define HELP_& ""/' <<<"$CMDLIST" > scripts/prereq/generated/help.h
34*cf5a6c84SAndroid Build Coastguard Workeregrep "($(xargs <<<"$CMDLIST"|tr ' [:lower:]' '|[:upper:]'))" \
35*cf5a6c84SAndroid Build Coastguard Worker  generated/newtoys.h > scripts/prereq/generated/newtoys.h
36*cf5a6c84SAndroid Build Coastguard WorkerFORS="$(sed -n 's/#define FOR_//p' $(grep -o 'toys/[^/]*/[^.]*\.c' scripts/prereq/build.sh) | xargs | tr ' ' '|')"
37*cf5a6c84SAndroid Build Coastguard Workersed -En '1,/^$/p;/\/\/ ('"$FORS"') /,/^$/p;/#ifdef FOR_('"$FORS"')$/,/^$/p' generated/flags.h > scripts/prereq/generated/flags.h
38*cf5a6c84SAndroid Build Coastguard Workeregrep "OPTSTR_($(egrep -v "($FORS)" <<<"$CMDLIST" | xargs | tr ' ' '|'))" \
39*cf5a6c84SAndroid Build Coastguard Worker  generated/flags.h >> scripts/prereq/generated/flags.h
40*cf5a6c84SAndroid Build Coastguard Worker# TODO: slim down config.h
41*cf5a6c84SAndroid Build Coastguard Workercp generated/{globals,config}.h scripts/prereq/generated/
42