xref: /aosp_15_r20/external/toybox/scripts/mcm-buildall.sh (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker# Script to build all cross and native compilers supported by musl-libc.
4*cf5a6c84SAndroid Build Coastguard Worker# This isn't directly used by toybox, but is useful for testing.
5*cf5a6c84SAndroid Build Coastguard Worker
6*cf5a6c84SAndroid Build Coastguard Workertrap "exit 1" INT
7*cf5a6c84SAndroid Build Coastguard Worker
8*cf5a6c84SAndroid Build Coastguard Workerif [ ! -d litecross ]
9*cf5a6c84SAndroid Build Coastguard Workerthen
10*cf5a6c84SAndroid Build Coastguard Worker  echo Run this script in musl-cross-make directory to make "ccc" directory.
11*cf5a6c84SAndroid Build Coastguard Worker  echo
12*cf5a6c84SAndroid Build Coastguard Worker  echo "  "git clone https://github.com/richfelker/musl-cross-make
13*cf5a6c84SAndroid Build Coastguard Worker  echo "  "cd musl-cross-make
14*cf5a6c84SAndroid Build Coastguard Worker  echo '  ~/toybox/scripts/mcm-buildall.sh'
15*cf5a6c84SAndroid Build Coastguard Worker  exit 1
16*cf5a6c84SAndroid Build Coastguard Workerfi
17*cf5a6c84SAndroid Build Coastguard Worker
18*cf5a6c84SAndroid Build Coastguard Worker# List of known targets. The format is TARGET[@RENAME]:EXTRA:CONFIG resulting
19*cf5a6c84SAndroid Build Coastguard Worker# in a gcc tuple TARGET-linux-muslEXTRA with CONFIG appended to $GCC_CONFIG
20*cf5a6c84SAndroid Build Coastguard Worker# (and thus the gcc ./configure command line). So i686:: builds i686-linux-musl
21*cf5a6c84SAndroid Build Coastguard Worker# and sh2eb::fdpic:--with-cpu=mj2 builds sh2eb-linux-muslfdpic adding
22*cf5a6c84SAndroid Build Coastguard Worker# --with-cpu=mj2 to the gcc ./configure command line. @RENAME (if present)
23*cf5a6c84SAndroid Build Coastguard Worker# changes the TARGET part of the toolchain prefix names afterwards.
24*cf5a6c84SAndroid Build Coastguard Worker
25*cf5a6c84SAndroid Build Coastguard WorkerTARGETS=(i686:: aarch64:eabi:
26*cf5a6c84SAndroid Build Coastguard Worker  armv4l:eabihf:"--with-arch=armv5t --with-float=soft"
27*cf5a6c84SAndroid Build Coastguard Worker  "armv5l:eabihf:--with-arch=armv5t --with-fpu=vfpv2 --with-float=hard"
28*cf5a6c84SAndroid Build Coastguard Worker  "armv7l:eabihf:--with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard"
29*cf5a6c84SAndroid Build Coastguard Worker  "armv7m:eabi:--with-arch=armv7-m --with-mode=thumb --disable-libatomic --enable-default-pie"
30*cf5a6c84SAndroid Build Coastguard Worker  armv7r:eabihf:"--with-arch=armv7-r --enable-default-pie"
31*cf5a6c84SAndroid Build Coastguard Worker  i486:: m68k:: microblaze:: mips:: mips64:: mipsel:: or1k:: powerpc::
32*cf5a6c84SAndroid Build Coastguard Worker  powerpc64:: powerpc64le:: riscv32:: riscv64:: s390x::
33*cf5a6c84SAndroid Build Coastguard Worker  sh2eb:fdpic:--with-cpu=mj2
34*cf5a6c84SAndroid Build Coastguard Worker  sh4::--enable-incomplete-targets sh4eb::--enable-incomplete-targets
35*cf5a6c84SAndroid Build Coastguard Worker  x86_64::--with-mtune=nocona x86_64@x32:x32:
36*cf5a6c84SAndroid Build Coastguard Worker)
37*cf5a6c84SAndroid Build Coastguard Worker
38*cf5a6c84SAndroid Build Coastguard Worker# All toolchains after the first are themselves cross compiled (so they
39*cf5a6c84SAndroid Build Coastguard Worker# can be statically linked against musl on the host, for binary portability.)
40*cf5a6c84SAndroid Build Coastguard Worker: ${BOOTSTRAP:=$(uname -m)} ${OUTPUT:="$PWD/ccc"}
41*cf5a6c84SAndroid Build Coastguard Worker
42*cf5a6c84SAndroid Build Coastguard Worker# Move the corresponding target to the front so rest of targets get built
43*cf5a6c84SAndroid Build Coastguard Worker# with full instead of partial -host compiler (missing threads and NLS and such)
44*cf5a6c84SAndroid Build Coastguard Workerunset TEMP
45*cf5a6c84SAndroid Build Coastguard Workerfor i in $(seq 0 $((${#TARGETS[@]}-1)));
46*cf5a6c84SAndroid Build Coastguard Workerdo
47*cf5a6c84SAndroid Build Coastguard Worker  [ "${TARGETS[$i]}" == "${TARGETS[$i]#"$BOOTSTRAP:"}" ] && continue
48*cf5a6c84SAndroid Build Coastguard Worker  TEMP="${TARGETS[$i]}"
49*cf5a6c84SAndroid Build Coastguard Worker  TARGETS[$i]="$TARGETS[0]"
50*cf5a6c84SAndroid Build Coastguard Worker  TARGETS[0]="$TEMP"
51*cf5a6c84SAndroid Build Coastguard Worker  break;
52*cf5a6c84SAndroid Build Coastguard Workerdone
53*cf5a6c84SAndroid Build Coastguard Worker[ -z "$TEMP" ] && { echo unknown target "$BOOTSTRAP"; exit 1; }
54*cf5a6c84SAndroid Build Coastguard Worker
55*cf5a6c84SAndroid Build Coastguard Workerif [ "$1" == clean ]
56*cf5a6c84SAndroid Build Coastguard Workerthen
57*cf5a6c84SAndroid Build Coastguard Worker  rm -rf ccc host-* *.log # Not gonna rm -rf "$OUTPUT" blindly, could be $HOME
58*cf5a6c84SAndroid Build Coastguard Worker  make clean
59*cf5a6c84SAndroid Build Coastguard Worker  exit
60*cf5a6c84SAndroid Build Coastguard Workerfi
61*cf5a6c84SAndroid Build Coastguard Worker
62*cf5a6c84SAndroid Build Coastguard Workermake_toolchain()
63*cf5a6c84SAndroid Build Coastguard Worker{
64*cf5a6c84SAndroid Build Coastguard Worker
65*cf5a6c84SAndroid Build Coastguard Worker  # Set cross compiler path
66*cf5a6c84SAndroid Build Coastguard Worker  LP="$PATH"
67*cf5a6c84SAndroid Build Coastguard Worker  if [ "$TYPE" == host ]
68*cf5a6c84SAndroid Build Coastguard Worker  then
69*cf5a6c84SAndroid Build Coastguard Worker    OUTPUT="$PWD/host-$TARGET"
70*cf5a6c84SAndroid Build Coastguard Worker    EXTRASUB=y
71*cf5a6c84SAndroid Build Coastguard Worker  else
72*cf5a6c84SAndroid Build Coastguard Worker    if [ "$TYPE" == static ]
73*cf5a6c84SAndroid Build Coastguard Worker    then
74*cf5a6c84SAndroid Build Coastguard Worker      HOST=$BOOTSTRAP
75*cf5a6c84SAndroid Build Coastguard Worker      [ "$TARGET" = "$HOST" ] && LP="$PWD/host-$HOST/bin:$LP" &&
76*cf5a6c84SAndroid Build Coastguard Worker        GCC_CONFIG="--build=${TARGET%%-*}-donotmatch-linux $GCC_CONFIG"
77*cf5a6c84SAndroid Build Coastguard Worker      TYPE=cross
78*cf5a6c84SAndroid Build Coastguard Worker      EXTRASUB=y
79*cf5a6c84SAndroid Build Coastguard Worker      LP="$OUTPUT/$HOST-cross/bin:$LP"
80*cf5a6c84SAndroid Build Coastguard Worker    else
81*cf5a6c84SAndroid Build Coastguard Worker      HOST="$TARGET"
82*cf5a6c84SAndroid Build Coastguard Worker      export NATIVE=y
83*cf5a6c84SAndroid Build Coastguard Worker      LP="$OUTPUT/${RENAME:-$TARGET}-cross/bin:$LP"
84*cf5a6c84SAndroid Build Coastguard Worker      [ -z "$(PATH="$LP" which $TARGET-cc)" ] &&
85*cf5a6c84SAndroid Build Coastguard Worker         echo "no $TARGET-cc in $LP" && return
86*cf5a6c84SAndroid Build Coastguard Worker    fi
87*cf5a6c84SAndroid Build Coastguard Worker    COMMON_CONFIG="CC=\"$HOST-gcc -static --static\" CXX=\"$HOST-g++ -static --static\""
88*cf5a6c84SAndroid Build Coastguard Worker    export -n HOST
89*cf5a6c84SAndroid Build Coastguard Worker    OUTPUT="$OUTPUT/${RENAME:-$TARGET}-$TYPE"
90*cf5a6c84SAndroid Build Coastguard Worker  fi
91*cf5a6c84SAndroid Build Coastguard Worker
92*cf5a6c84SAndroid Build Coastguard Worker  # Skip outputs that already exist
93*cf5a6c84SAndroid Build Coastguard Worker  if [ -e "$OUTPUT.sqf" ] || [ -e "$OUTPUT/bin/$TARGET-cc" ] ||
94*cf5a6c84SAndroid Build Coastguard Worker     [ -e "$OUTPUT/bin/cc" ]
95*cf5a6c84SAndroid Build Coastguard Worker  then
96*cf5a6c84SAndroid Build Coastguard Worker    return
97*cf5a6c84SAndroid Build Coastguard Worker  fi
98*cf5a6c84SAndroid Build Coastguard Worker
99*cf5a6c84SAndroid Build Coastguard Worker  # Change title bar to say what we're currently building
100*cf5a6c84SAndroid Build Coastguard Worker
101*cf5a6c84SAndroid Build Coastguard Worker  echo === building $TARGET-$TYPE
102*cf5a6c84SAndroid Build Coastguard Worker  echo -en "\033]2;$TARGET-$TYPE\007"
103*cf5a6c84SAndroid Build Coastguard Worker
104*cf5a6c84SAndroid Build Coastguard Worker  rm -rf build/"$TARGET" "$OUTPUT" &&
105*cf5a6c84SAndroid Build Coastguard Worker  set -x &&
106*cf5a6c84SAndroid Build Coastguard Worker  PATH="$LP" make OUTPUT="$OUTPUT" TARGET="$TARGET" \
107*cf5a6c84SAndroid Build Coastguard Worker    GCC_CONFIG="--disable-nls --disable-libquadmath --disable-decimal-float --disable-multilib --enable-languages=c,c++ $GCC_CONFIG" \
108*cf5a6c84SAndroid Build Coastguard Worker    COMMON_CONFIG="CFLAGS=\"$CFLAGS -g0 -O2\" CXXFLAGS=\"$CXXFLAGS -g0 -O2\" \
109*cf5a6c84SAndroid Build Coastguard Worker    LDFLAGS=\"$LDFLAGS -s\" $COMMON_CONFIG" install -j$(nproc) || exit 1
110*cf5a6c84SAndroid Build Coastguard Worker  set +x
111*cf5a6c84SAndroid Build Coastguard Worker  echo -e '#ifndef __MUSL__\n#define __MUSL__ 1\n#endif' \
112*cf5a6c84SAndroid Build Coastguard Worker    >> "$OUTPUT/${EXTRASUB:+$TARGET/}include/features.h"
113*cf5a6c84SAndroid Build Coastguard Worker
114*cf5a6c84SAndroid Build Coastguard Worker  if [ ! -z "$RENAME" ] && [ "$TYPE" == cross ]
115*cf5a6c84SAndroid Build Coastguard Worker  then
116*cf5a6c84SAndroid Build Coastguard Worker    CONTEXT="output/$RENAME-cross/bin"
117*cf5a6c84SAndroid Build Coastguard Worker    for i in "$CONTEXT/$TARGET-"*
118*cf5a6c84SAndroid Build Coastguard Worker    do
119*cf5a6c84SAndroid Build Coastguard Worker      X="$(echo $i | sed "s@.*/$TARGET-\([^-]*\)@\1@")"
120*cf5a6c84SAndroid Build Coastguard Worker      ln -sf "$TARGET-$X" "$CONTEXT/$RENAME-$X"
121*cf5a6c84SAndroid Build Coastguard Worker    done
122*cf5a6c84SAndroid Build Coastguard Worker  fi
123*cf5a6c84SAndroid Build Coastguard Worker
124*cf5a6c84SAndroid Build Coastguard Worker  # Prevent cross compiler reusing dynamically linked host build files for
125*cf5a6c84SAndroid Build Coastguard Worker  # $BOOTSTRAP arch
126*cf5a6c84SAndroid Build Coastguard Worker  [ -z "$TYPE" ] && {
127*cf5a6c84SAndroid Build Coastguard Worker    [ -e musl-git-master ] && mv musl-git-master keep-this-dir
128*cf5a6c84SAndroid Build Coastguard Worker    make clean
129*cf5a6c84SAndroid Build Coastguard Worker    [ -e keep-this-dir ] && mv keep-this-dir musl-git-master
130*cf5a6c84SAndroid Build Coastguard Worker  }
131*cf5a6c84SAndroid Build Coastguard Worker
132*cf5a6c84SAndroid Build Coastguard Worker  if [ "$TYPE" == native ]
133*cf5a6c84SAndroid Build Coastguard Worker  then
134*cf5a6c84SAndroid Build Coastguard Worker    # gcc looks in "../usr/include" but not "/bin/../include" (relative to the
135*cf5a6c84SAndroid Build Coastguard Worker    # executable). That means /usr/bin/gcc looks in /usr/usr/include, so that's
136*cf5a6c84SAndroid Build Coastguard Worker    # not a fix either. So add a NOP symlink as a workaround for The Crazy.
137*cf5a6c84SAndroid Build Coastguard Worker    ln -s . "$OUTPUT/usr" || exit 1
138*cf5a6c84SAndroid Build Coastguard Worker    [ ! -z "$(which mksquashfs 2>/dev/null)" ] &&
139*cf5a6c84SAndroid Build Coastguard Worker      mksquashfs "$OUTPUT" "$OUTPUT.sqf" -all-root &&
140*cf5a6c84SAndroid Build Coastguard Worker      [ -z "$CLEANUP" ] && rm -rf "$OUTPUT"
141*cf5a6c84SAndroid Build Coastguard Worker  fi
142*cf5a6c84SAndroid Build Coastguard Worker}
143*cf5a6c84SAndroid Build Coastguard Worker
144*cf5a6c84SAndroid Build Coastguard Workersplit_tuple()
145*cf5a6c84SAndroid Build Coastguard Worker{
146*cf5a6c84SAndroid Build Coastguard Worker  PART1=${1/:*/}
147*cf5a6c84SAndroid Build Coastguard Worker  PART3=${1/*:/}
148*cf5a6c84SAndroid Build Coastguard Worker  PART2=${1:$((${#PART1}+1)):$((${#1}-${#PART3}-${#PART1}-2))}
149*cf5a6c84SAndroid Build Coastguard Worker
150*cf5a6c84SAndroid Build Coastguard Worker  # Do we need to rename this toolchain after building it?
151*cf5a6c84SAndroid Build Coastguard Worker  RENAME=${PART1/*@/}
152*cf5a6c84SAndroid Build Coastguard Worker  [ "$RENAME" == "$PART1" ] && RENAME=
153*cf5a6c84SAndroid Build Coastguard Worker  PART1=${PART1/@*/}
154*cf5a6c84SAndroid Build Coastguard Worker  TARGET=${PART1}-linux-musl${PART2}
155*cf5a6c84SAndroid Build Coastguard Worker}
156*cf5a6c84SAndroid Build Coastguard Worker
157*cf5a6c84SAndroid Build Coastguard Worker# Expand compressed target into binutils/gcc "tuple" and call make_toolchain
158*cf5a6c84SAndroid Build Coastguard Workermake_tuple()
159*cf5a6c84SAndroid Build Coastguard Worker{
160*cf5a6c84SAndroid Build Coastguard Worker  split_tuple "$@"
161*cf5a6c84SAndroid Build Coastguard Worker
162*cf5a6c84SAndroid Build Coastguard Worker  [ -z "$NOCLEAN" ] && rm -rf build
163*cf5a6c84SAndroid Build Coastguard Worker
164*cf5a6c84SAndroid Build Coastguard Worker  for TYPE in "${@:2}"
165*cf5a6c84SAndroid Build Coastguard Worker  do
166*cf5a6c84SAndroid Build Coastguard Worker    TYPE=$TYPE TARGET=$TARGET GCC_CONFIG="$PART3" RENAME="$RENAME" \
167*cf5a6c84SAndroid Build Coastguard Worker      make_toolchain 2>&1 | tee "$OUTPUT"/log/${RENAME:-$PART1}-${TYPE}.log
168*cf5a6c84SAndroid Build Coastguard Worker  done
169*cf5a6c84SAndroid Build Coastguard Worker}
170*cf5a6c84SAndroid Build Coastguard Worker
171*cf5a6c84SAndroid Build Coastguard Workerpatch_mcm()
172*cf5a6c84SAndroid Build Coastguard Worker{
173*cf5a6c84SAndroid Build Coastguard Worker  # musl-cross-make commit fe915821b652 has been current for a year and a half,
174*cf5a6c84SAndroid Build Coastguard Worker  # and doesn't even use the latest musl release by default, so fix it up.
175*cf5a6c84SAndroid Build Coastguard Worker
176*cf5a6c84SAndroid Build Coastguard Worker  # Select newer package versions and don't use dodgy mirrors
177*cf5a6c84SAndroid Build Coastguard Worker  sed -i 's/mirror//;s/\(LINUX_VER =\).*/\1 6.8/;s/\(GCC_VER =\).*/\1 11.2.0/' \
178*cf5a6c84SAndroid Build Coastguard Worker    Makefile &&
179*cf5a6c84SAndroid Build Coastguard Worker  echo 'c9ab5b95c0b8e9e41290d3fc53b4e5cb2e8abb75  linux-6.8.tar.xz' > \
180*cf5a6c84SAndroid Build Coastguard Worker    hashes/linux-6.8.tar.xz.sha1 &&
181*cf5a6c84SAndroid Build Coastguard Worker  # mcm redundantly downloads tarball if hash file has newer timestamp,
182*cf5a6c84SAndroid Build Coastguard Worker  # and it whack-a-moles how to download kernels by version for some reason.
183*cf5a6c84SAndroid Build Coastguard Worker  touch -d @1 hashes/linux-6.8.tar.xz.sha1 &&
184*cf5a6c84SAndroid Build Coastguard Worker  sed -i 's/\(.*linux-\)3\(.*\)v3.x/\16\2v6.x/' Makefile &&
185*cf5a6c84SAndroid Build Coastguard Worker
186*cf5a6c84SAndroid Build Coastguard Worker  # nommu toolchains need to vfork()+pipe, and or1k has different kernel arch
187*cf5a6c84SAndroid Build Coastguard Worker  sed -i -e 's/--enable-fdpic$/& --enable-twoprocess/' \
188*cf5a6c84SAndroid Build Coastguard Worker      -e '/or1k/!s/^\(TARGET_ARCH_MANGLED = \)\(.*\)/\1$(patsubst or1k,openrisc,\2)/' \
189*cf5a6c84SAndroid Build Coastguard Worker      litecross/Makefile &&
190*cf5a6c84SAndroid Build Coastguard Worker
191*cf5a6c84SAndroid Build Coastguard Worker  # Packages detect nommu via the absence of fork(). Musl provides a broken
192*cf5a6c84SAndroid Build Coastguard Worker  # fork() on nommu builds that always returns -ENOSYS at runtime. Rip it out.
193*cf5a6c84SAndroid Build Coastguard Worker  # (Currently only for superh/jcore since no generic #ifdef __FDPIC__ symbol.)
194*cf5a6c84SAndroid Build Coastguard Worker
195*cf5a6c84SAndroid Build Coastguard Worker  PP=patches/musl-"$(sed -n 's/MUSL_VER[ \t]*=[ \t]*//p' Makefile)" &&
196*cf5a6c84SAndroid Build Coastguard Worker  mkdir -p "$PP" &&
197*cf5a6c84SAndroid Build Coastguard Worker  cat > "$PP"/0001-nommu.patch << 'EOF' &&
198*cf5a6c84SAndroid Build Coastguard Worker--- a/src/legacy/daemon.c
199*cf5a6c84SAndroid Build Coastguard Worker+++ b/src/legacy/daemon.c
200*cf5a6c84SAndroid Build Coastguard Worker@@ -17,3 +17,3 @@
201*cf5a6c84SAndroid Build Coastguard Worker
202*cf5a6c84SAndroid Build Coastguard Worker-	switch(fork()) {
203*cf5a6c84SAndroid Build Coastguard Worker+	switch(vfork()) {
204*cf5a6c84SAndroid Build Coastguard Worker 	case 0: break;
205*cf5a6c84SAndroid Build Coastguard Worker@@ -25,3 +25,3 @@
206*cf5a6c84SAndroid Build Coastguard Worker
207*cf5a6c84SAndroid Build Coastguard Worker-	switch(fork()) {
208*cf5a6c84SAndroid Build Coastguard Worker+	switch(vfork()) {
209*cf5a6c84SAndroid Build Coastguard Worker 	case 0: break;
210*cf5a6c84SAndroid Build Coastguard Worker--- a/src/misc/forkpty.c
211*cf5a6c84SAndroid Build Coastguard Worker+++ b/src/misc/forkpty.c
212*cf5a6c84SAndroid Build Coastguard Worker@@ -8,2 +8,3 @@
213*cf5a6c84SAndroid Build Coastguard Worker
214*cf5a6c84SAndroid Build Coastguard Worker+#ifndef __SH_FDPIC__
215*cf5a6c84SAndroid Build Coastguard Worker int forkpty(int *pm, char *name, const struct termios *tio, const struct winsize *ws)
216*cf5a6c84SAndroid Build Coastguard Worker@@ -57,1 +58,2 @@
217*cf5a6c84SAndroid Build Coastguard Worker }
218*cf5a6c84SAndroid Build Coastguard Worker+#endif
219*cf5a6c84SAndroid Build Coastguard Worker--- a/src/misc/wordexp.c
220*cf5a6c84SAndroid Build Coastguard Worker+++ b/src/misc/wordexp.c
221*cf5a6c84SAndroid Build Coastguard Worker@@ -25,2 +25,3 @@
222*cf5a6c84SAndroid Build Coastguard Worker
223*cf5a6c84SAndroid Build Coastguard Worker+#ifndef __SH_FDPIC__
224*cf5a6c84SAndroid Build Coastguard Worker static int do_wordexp(const char *s, wordexp_t *we, int flags)
225*cf5a6c84SAndroid Build Coastguard Worker@@ -177,2 +178,3 @@
226*cf5a6c84SAndroid Build Coastguard Worker }
227*cf5a6c84SAndroid Build Coastguard Worker+#endif
228*cf5a6c84SAndroid Build Coastguard Worker
229*cf5a6c84SAndroid Build Coastguard Worker--- a/src/process/fork.c
230*cf5a6c84SAndroid Build Coastguard Worker+++ b/src/process/fork.c
231*cf5a6c84SAndroid Build Coastguard Worker@@ -7,2 +7,3 @@
232*cf5a6c84SAndroid Build Coastguard Worker
233*cf5a6c84SAndroid Build Coastguard Worker+#ifndef __SH_FDPIC__
234*cf5a6c84SAndroid Build Coastguard Worker static void dummy(int x)
235*cf5a6c84SAndroid Build Coastguard Worker@@ -37,1 +38,2 @@
236*cf5a6c84SAndroid Build Coastguard Worker }
237*cf5a6c84SAndroid Build Coastguard Worker+#endif
238*cf5a6c84SAndroid Build Coastguard Worker--- a/Makefile
239*cf5a6c84SAndroid Build Coastguard Worker+++ b/Makefile
240*cf5a6c84SAndroid Build Coastguard Worker@@ -100,3 +100,3 @@
241*cf5a6c84SAndroid Build Coastguard Worker 	cp $< $@
242*cf5a6c84SAndroid Build Coastguard Worker-	sed -n -e s/__NR_/SYS_/p < $< >> $@
243*cf5a6c84SAndroid Build Coastguard Worker+	sed -e s/__NR_/SYS_/ < $< >> $@
244*cf5a6c84SAndroid Build Coastguard Worker
245*cf5a6c84SAndroid Build Coastguard Worker--- a/arch/sh/bits/syscall.h.in
246*cf5a6c84SAndroid Build Coastguard Worker+++ b/arch/sh/bits/syscall.h.in
247*cf5a6c84SAndroid Build Coastguard Worker@@ -2,3 +2,5 @@
248*cf5a6c84SAndroid Build Coastguard Worker #define __NR_exit                   1
249*cf5a6c84SAndroid Build Coastguard Worker+#ifndef __SH_FDPIC__
250*cf5a6c84SAndroid Build Coastguard Worker #define __NR_fork                   2
251*cf5a6c84SAndroid Build Coastguard Worker+#endif
252*cf5a6c84SAndroid Build Coastguard Worker #define __NR_read                   3
253*cf5a6c84SAndroid Build Coastguard WorkerEOF
254*cf5a6c84SAndroid Build Coastguard Worker
255*cf5a6c84SAndroid Build Coastguard Worker  # I won't sign the FSF's copyright assignment
256*cf5a6c84SAndroid Build Coastguard Worker  tee $(for i in patches/gcc-*; do echo $i/099-vfork.patch; done) > /dev/null << 'EOF'
257*cf5a6c84SAndroid Build Coastguard Worker--- gcc-8.3.0/fixincludes/procopen.c	2005-08-14 19:50:43.000000000 -0500
258*cf5a6c84SAndroid Build Coastguard Worker+++ gcc-bak/fixincludes/procopen.c	2020-02-06 23:27:15.408071708 -0600
259*cf5a6c84SAndroid Build Coastguard Worker@@ -116,3 +116,3 @@
260*cf5a6c84SAndroid Build Coastguard Worker    */
261*cf5a6c84SAndroid Build Coastguard Worker-  ch_id = fork ();
262*cf5a6c84SAndroid Build Coastguard Worker+  ch_id = vfork ();
263*cf5a6c84SAndroid Build Coastguard Worker   switch (ch_id)
264*cf5a6c84SAndroid Build Coastguard WorkerEOF
265*cf5a6c84SAndroid Build Coastguard Worker
266*cf5a6c84SAndroid Build Coastguard Worker  # Fix a gcc bug that breaks x86-64 build in gcc 11.2.0,
267*cf5a6c84SAndroid Build Coastguard Worker  # from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017#c20
268*cf5a6c84SAndroid Build Coastguard Worker
269*cf5a6c84SAndroid Build Coastguard Worker  PP=patches/gcc-"$(sed -n 's/GCC_VER[ \t]*=[ \t]*//p' Makefile)" &&
270*cf5a6c84SAndroid Build Coastguard Worker  mkdir -p "$PP" &&
271*cf5a6c84SAndroid Build Coastguard Worker  cat > "$PP"/0006-fixinc.patch << 'EOF' &&
272*cf5a6c84SAndroid Build Coastguard Workerdiff -ruN gcc-11.2.0.orig/configure gcc-11.2.0/configure
273*cf5a6c84SAndroid Build Coastguard Worker--- gcc-11.2.0.orig/configure	2021-07-28 01:55:06.628278148 -0500
274*cf5a6c84SAndroid Build Coastguard Worker+++ gcc-11.2.0/configure	2023-11-17 03:07:53.819283027 -0600
275*cf5a6c84SAndroid Build Coastguard Worker@@ -16478,7 +16478,7 @@
276*cf5a6c84SAndroid Build Coastguard Worker fi
277*cf5a6c84SAndroid Build Coastguard Worker
278*cf5a6c84SAndroid Build Coastguard Worker
279*cf5a6c84SAndroid Build Coastguard Worker-RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET"
280*cf5a6c84SAndroid Build Coastguard Worker+RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET -nostdinc++"
281*cf5a6c84SAndroid Build Coastguard Worker
282*cf5a6c84SAndroid Build Coastguard Worker { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target ar" >&5
283*cf5a6c84SAndroid Build Coastguard Worker $as_echo_n "checking where to find the target ar... " >&6; }
284*cf5a6c84SAndroid Build Coastguard Workerdiff -ruN gcc-11.2.0.orig/configure.ac gcc-11.2.0/configure.ac
285*cf5a6c84SAndroid Build Coastguard Worker--- gcc-11.2.0.orig/configure.ac	2021-07-28 01:55:06.628278148 -0500
286*cf5a6c84SAndroid Build Coastguard Worker+++ gcc-11.2.0/configure.ac	2023-11-17 03:08:05.975282593 -0600
287*cf5a6c84SAndroid Build Coastguard Worker@@ -3520,7 +3520,7 @@
288*cf5a6c84SAndroid Build Coastguard Worker ACX_CHECK_INSTALLED_TARGET_TOOL(WINDRES_FOR_TARGET, windres)
289*cf5a6c84SAndroid Build Coastguard Worker ACX_CHECK_INSTALLED_TARGET_TOOL(WINDMC_FOR_TARGET, windmc)
290*cf5a6c84SAndroid Build Coastguard Worker
291*cf5a6c84SAndroid Build Coastguard Worker-RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET"
292*cf5a6c84SAndroid Build Coastguard Worker+RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET -nostdinc++"
293*cf5a6c84SAndroid Build Coastguard Worker
294*cf5a6c84SAndroid Build Coastguard Worker GCC_TARGET_TOOL(ar, AR_FOR_TARGET, AR, [binutils/ar])
295*cf5a6c84SAndroid Build Coastguard Worker GCC_TARGET_TOOL(as, AS_FOR_TARGET, AS, [gas/as-new])
296*cf5a6c84SAndroid Build Coastguard WorkerEOF
297*cf5a6c84SAndroid Build Coastguard Worker
298*cf5a6c84SAndroid Build Coastguard Worker  # So the && chain above is easier to extend
299*cf5a6c84SAndroid Build Coastguard Worker  true
300*cf5a6c84SAndroid Build Coastguard Worker}
301*cf5a6c84SAndroid Build Coastguard Worker
302*cf5a6c84SAndroid Build Coastguard Workerpatch_mcm || exit 1
303*cf5a6c84SAndroid Build Coastguard Workermkdir -p "$OUTPUT"/log
304*cf5a6c84SAndroid Build Coastguard Worker
305*cf5a6c84SAndroid Build Coastguard Worker# Make bootstrap compiler (no $TYPE, dynamically linked against host libc)
306*cf5a6c84SAndroid Build Coastguard Worker# We build the rest of the cross compilers with this so they're linked against
307*cf5a6c84SAndroid Build Coastguard Worker# musl-libc, because glibc doesn't fully support static linking and dynamic
308*cf5a6c84SAndroid Build Coastguard Worker# binaries aren't really portable between distributions
309*cf5a6c84SAndroid Build Coastguard Workermake_tuple "${TARGETS[0]}" host 2>&1 | tee -a "$OUTPUT/log/$BOOTSTRAP"-host.log
310*cf5a6c84SAndroid Build Coastguard Workersplit_tuple "${TARGETS[0]}"
311*cf5a6c84SAndroid Build Coastguard WorkerBOOTSTRAP="$TARGET"
312*cf5a6c84SAndroid Build Coastguard Worker
313*cf5a6c84SAndroid Build Coastguard Workerif [ $# -gt 0 ]
314*cf5a6c84SAndroid Build Coastguard Workerthen
315*cf5a6c84SAndroid Build Coastguard Worker  for i in "${TARGETS[0]}" "$@"
316*cf5a6c84SAndroid Build Coastguard Worker  do
317*cf5a6c84SAndroid Build Coastguard Worker    make_tuple "$i" static native
318*cf5a6c84SAndroid Build Coastguard Worker  done
319*cf5a6c84SAndroid Build Coastguard Workerelse
320*cf5a6c84SAndroid Build Coastguard Worker  # Here's the list of cross compilers supported by this build script.
321*cf5a6c84SAndroid Build Coastguard Worker
322*cf5a6c84SAndroid Build Coastguard Worker  # First target builds a proper version of the $BOOTSTRAP compiler above,
323*cf5a6c84SAndroid Build Coastguard Worker  # which is used to build the rest (in alphabetical order)
324*cf5a6c84SAndroid Build Coastguard Worker  for i in $(seq 0 $((${#TARGETS[@]}-1)))
325*cf5a6c84SAndroid Build Coastguard Worker  do
326*cf5a6c84SAndroid Build Coastguard Worker    make_tuple "${TARGETS[$i]}" static native
327*cf5a6c84SAndroid Build Coastguard Worker  done
328*cf5a6c84SAndroid Build Coastguard Workerfi
329