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