Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 106 additions & 14 deletions GCC-Install.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,59 @@
# ApolloCrossDev Secondary Install Script v1.0

set -e

patch_amiga_gcc_sources() {
# Fix fd2sfd: 'false' is a reserved keyword in C23 (GCC 14+).
sed -i 's/typedef enum { false, nodef, real_error } Error;/typedef enum { no_error, nodef, real_error } Error;/' \
"$SOURCES/amiga-gcc/projects/fd2sfd/fd2inline.c"
sed -i 's/\bfalse\b/no_error/g' \
"$SOURCES/amiga-gcc/projects/fd2sfd/fd2inline.c"

# Fix readline signal handler prototypes for newer host compilers.
sed -E -i 's/^([[:space:]]*static[[:space:]]+RETSIGTYPE[[:space:]]+rl_signal_handler)[[:space:]]*\(\);/\1 (int);/' \
"$SOURCES/amiga-gcc/projects/binutils/readline/readline/signals.c"
sed -E -i 's/^([[:space:]]*static[[:space:]]+RETSIGTYPE[[:space:]]+rl_sigwinch_handler)[[:space:]]*\(\);/\1 (int);/' \
"$SOURCES/amiga-gcc/projects/binutils/readline/readline/signals.c"
sed -E -i 's/^typedef[[:space:]]+RETSIGTYPE[[:space:]]+SigHandler[[:space:]]*\(\);/typedef RETSIGTYPE SigHandler (int);/' \
"$SOURCES/amiga-gcc/projects/binutils/readline/readline/signals.c"
sed -E -i 's/^# define SIGHANDLER_RETURN return \(0\)/# define SIGHANDLER_RETURN return/' \
"$SOURCES/amiga-gcc/projects/binutils/readline/readline/signals.c"

# Work around GCC 15 ICE while compiling libstdc++ cxx11-shim_facets.
if ! grep -q "ApolloCrossDev workaround: avoid host GCC 15 ICE" "$SOURCES/amiga-gcc/projects/gcc/libstdc++-v3/src/c++11/cxx11-shim_facets.cc"; then
sed -i '/in code that uses the other std::string ABI from the replacing code\./a\
// ApolloCrossDev workaround: avoid host GCC 15 ICE when compiling this TU.\
#pragma GCC push_options\
#pragma GCC optimize ("O0")' \
"$SOURCES/amiga-gcc/projects/gcc/libstdc++-v3/src/c++11/cxx11-shim_facets.cc"
fi
}

patch_timidity_sources() {
# Keep clean builds warning-free: align stream pointer type with call sites.
sed -i 's/static void compute_data(MidSong \*song, sint8 \*\*stream, sint32 count)/static void compute_data(MidSong *song, unsigned char **stream, sint32 count)/' \
"$SOURCES/timidity-source/playmidi.c"
}

patch_bgdbserver_sources() {
# Fix bgdbserver warnings with newer host compilers and Amiga varargs macros.
sed -i 's/void addBreakpoint(UWORD \* addr, short isTemp, UWORD \* restore);/void addBreakpoint(volatile UWORD * addr, short isTemp, volatile UWORD * restore);/' src/breakpoint.h
sed -i 's/void delBreakpoint(UWORD \* addr);/void delBreakpoint(volatile UWORD * addr);/' src/breakpoint.h
if ! grep -q "#include <stdlib.h>" src/breakpoint.c; then
sed -i '/#include "breakpoint.h"/a #include <stdlib.h>' src/breakpoint.c
fi
sed -i 's/UWORD \* address;/volatile UWORD * address;/' src/breakpoint.c
sed -i 's/UWORD \* restore;/volatile UWORD * restore;/' src/breakpoint.c
sed -i 's/static short findBp(UWORD \* addr)/static short findBp(volatile UWORD * addr)/' src/breakpoint.c
sed -i 's/void addBreakpoint(UWORD \* addr, short isTmp, UWORD \* restore)/void addBreakpoint(volatile UWORD * addr, short isTmp, volatile UWORD * restore)/' src/breakpoint.c
sed -i 's/void delBreakpoint(UWORD \* addr)/void delBreakpoint(volatile UWORD * addr)/' src/breakpoint.c
sed -i 's/Printf("break at 0x%08lx\\n", pc);/Printf("break at 0x%08lx\\n", (ULONG)pc);/' src/main.c
sed -i 's/Printf("can'"'"'t break at 0x%08lx - %02lx\\n", pc, chk);/Printf("can'"'"'t break at 0x%08lx - %02lx\\n", (ULONG)pc, (ULONG)chk);/' src/main.c
sed -i 's/Printf("unknown packet %s\\n", cmd);/Printf("unknown packet %s\\n", (ULONG)cmd);/' src/main.c
sed -i 's/Printf("Running GDB server on port %s\\n", p + 1);/Printf("Running GDB server on port %s\\n", (ULONG)(p + 1));/' src/main.c
sed -i 's/Printf("Starting RSH server on port %s\\n", sport + 1);/Printf("Starting RSH server on port %s\\n", (ULONG)(sport + 1));/' src/main.c
}

# INIT Terminal
clear
echo -e "\e[1m\e[37m########## \e[31mApollo\e[1;30mCrossDev \e[36m$COMPILER\e[30m v$VERSION \e[37m ###########\e[0m\e[36m"
Expand All @@ -16,6 +70,8 @@ mkdir -p $LOGFILES
rm -f -r $PROJECTS/bgdbserver
rm -f -r $SOURCES
mkdir -p $SOURCES
# Ensure cross-tool binaries are always resolvable in subsequent make steps.
export PATH="$PREFIX/bin:$PATH"
cd $SOURCES

# PART 2: Update Linux Packages
Expand All @@ -26,7 +82,15 @@ sudo apt -y install build-essential devscripts debhelper qtbase5-dev qtbase5-dev

# PART 3: Clone Amiga-GCC
echo -e "\e[1m\e[37m3. Clone Amiga-GCC (Stefan -Bebbo- Franke)\e[0m\e[36m"
git clone --progress -b $BRANCH $MASTER 2>>$LOGFILES/part3_err.log
if [ -d "$SOURCES/amiga-gcc/.git" ]; then
cd "$SOURCES/amiga-gcc"
git fetch --all --prune >>$LOGFILES/part3.log 2>>$LOGFILES/part3_err.log
git checkout "$BRANCH" >>$LOGFILES/part3.log 2>>$LOGFILES/part3_err.log
git reset --hard "origin/$BRANCH" >>$LOGFILES/part3.log 2>>$LOGFILES/part3_err.log
cd "$SOURCES"
else
git clone --progress -b "$BRANCH" "$MASTER" >>$LOGFILES/part3.log 2>>$LOGFILES/part3_err.log
fi

# Part 4: Compile Amiga-GCC
echo -e -n "\e[1m\e[37m4. Compile Amiga-GCC: \e[0m\e[36m"
Expand All @@ -37,29 +101,53 @@ echo -e -n "\e[0m\e[36mDrop Prefix | "
make drop-prefix PREFIX=$PREFIX >>$LOGFILES/part4.log 2>>$LOGFILES/part4_err.log
echo -e -n "\e[0m\e[36mClone Repos (>1 min) | "
make update $CPU NDK=3.2 PREFIX=$PREFIX >>$LOGFILES/part4.log 2>>$LOGFILES/part4_err.log
patch_amiga_gcc_sources
echo -e -n "\e[0m\e[36mBuild Compiler (>5 min) | "
make all $CPU NDK=3.2 PREFIX=$PREFIX >>$LOGFILES/part4.log 2>>$LOGFILES/part4_err.log
CFLAGS="-DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
CXXFLAGS="-DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
CPPFLAGS="-DVOID_SIGHANDLER" \
make all -j1 NDK=3.2 PREFIX=$PREFIX \
CFLAGS_FOR_BUILD="-std=gnu17 -DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
HOST_CFLAGS="-std=gnu17 -DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
HOST_CXXFLAGS="-std=gnu++17 -DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
STAGE1_CHECKING="--disable-checking" >>$LOGFILES/part4.log 2>>$LOGFILES/part4_err.log

# GCC 15 host can hit an ICE in libstdc++-v3/src/c++11/cxx11-shim_facets.cc; retry once with lower target C++ optimization.
if grep -q "cxx11-shim_facets.cc:.*internal compiler error" "$LOGFILES/part4.log"; then
echo "retry make all with reduced target C++ optimization after ICE in cxx11-shim_facets.cc" >>$LOGFILES/part4.log
CFLAGS="-DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
CXXFLAGS="-DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
CPPFLAGS="-DVOID_SIGHANDLER" \
make all -j1 NDK=3.2 PREFIX=$PREFIX \
CFLAGS_FOR_BUILD="-std=gnu17 -DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
HOST_CFLAGS="-std=gnu17 -DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
HOST_CXXFLAGS="-std=gnu++17 -DVOID_SIGHANDLER -U_GLIBCXX_ASSERTIONS -Wno-error=incompatible-pointer-types" \
CXXFLAGS_FOR_TARGET="-O0 -fomit-frame-pointer" \
STAGE1_CHECKING="--disable-checking" >>$LOGFILES/part4.log 2>>$LOGFILES/part4_err.log
fi
echo -e "\e[0m\e[36mAdd LibDebug\e[0m]"
make libdebug PREFIX=$PREFIX >>$LOGFILES/part4.log 2>>$LOGFILES/part4_err.log

# Part 5: MUI
echo -e "\e[1m\e[37m5. Adding MUI5\e[0m\e[36m"
cd $SOURCES/amiga-gcc
make sdk=mui PREFIX=$PREFIX >>$LOGFILES/part5.log 2>>$LOGFILES/part5_err.log
mkdir -p $PREFIX/$TARGET/include/mui
cp -r -f $SOURCES/amiga-gcc/build/mui/SDK/MUI/C/include/mui/* $PREFIX/$TARGET/include/mui >>$LOGFILES/part5.log 2>>$LOGFILES/part5_err.log

# Part 6: PortLibs (amiga-gcc takes care of Open-GL, SDL and GDB - we add Freetype, ZLib and BZip2)
echo -e -n "\e[1m\e[37m6. Adding Porting Libs: "
cd $PREFIX
mkdir -p $PREFIX/$TARGET/include $PREFIX/$TARGET/lib $PREFIX/$TARGET/include/clib $PREFIX/$TARGET/include/libraries
echo -e -n "\e[0m\e[36mGL | "
cp -r -f $PREFIX/include/GL $PREFIX/$TARGET/include/GL >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
if [ -d $PREFIX/include/GL ]; then cp -r -f $PREFIX/include/GL $PREFIX/$TARGET/include/GL >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log; fi
echo -e -n "\e[0m\e[36mGDB | "
cp -r -f $PREFIX/include/gdb $PREFIX/$TARGET/include/GDB >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
if [ -d $PREFIX/include/gdb ]; then cp -r -f $PREFIX/include/gdb $PREFIX/$TARGET/include/GDB >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log; fi
echo -e -n "\e[0m\e[36mSDL | "
cp -r -f $PREFIX/include/SDL $PREFIX/$TARGET/include/SDL >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
cp -r -f $PREFIX/lib/libSDL* $PREFIX/$TARGET/lib >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
rm -r -f $PREFIX/lib/libSDL* >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
rm -r -f $PREFIX/include >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
if [ -d $PREFIX/include/SDL ]; then cp -r -f $PREFIX/include/SDL $PREFIX/$TARGET/include/SDL >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log; fi
if ls $PREFIX/lib/libSDL* >/dev/null 2>&1; then cp -r -f $PREFIX/lib/libSDL* $PREFIX/$TARGET/lib >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log; fi
if ls $PREFIX/lib/libSDL* >/dev/null 2>&1; then rm -r -f $PREFIX/lib/libSDL* >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log; fi
if [ -d $PREFIX/include ]; then rm -r -f $PREFIX/include >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log; fi

echo -e -n "\e[0m\e[36mSDL-TTF | "
cd $ARCHIVES/SDL-TTF
Expand Down Expand Up @@ -98,7 +186,7 @@ cp -r -f $ARCHIVES/zlib-source $SOURCES/zlib-source
cd $SOURCES/zlib-source
CC=$PREFIX/bin/m68k-amigaos-gcc \
AR=$PREFIX/bin/m68k-amigaos-ar \
RANLIB=CC=$PREFIX/bin/m68k-amigaos-ranlib \
RANLIB=$PREFIX/bin/m68k-amigaos-ranlib \
CFLAGS="-noixemul -m68040 -O2 -ffast-math -fomit-frame-pointer" \
./configure >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
make all $CPU >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
Expand All @@ -108,8 +196,9 @@ cp -r zlib.h $PREFIX/$TARGET/include >>$LOGFILES/part6.log 2>>$LOGFILES/part6_er
cp -r zconf.h $PREFIX/$TARGET/include >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log

echo -e "\e[0m\e[36mTimidity\e[0m"
mkdir $SOURCES/timidity-source
mkdir -p $SOURCES/timidity-source
cp -r -f $ARCHIVES/timidity-source/src/* $SOURCES/timidity-source
patch_timidity_sources
cd $SOURCES/timidity-source
make -f Makefile.apollocrossdev >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
cp libtimidity.a $PREFIX/$TARGET/lib >>$LOGFILES/part6.log 2>>$LOGFILES/part6_err.log
Expand All @@ -119,24 +208,27 @@ cp -f *.h $PREFIX/$TARGET/include/timidity
# PART 7: NDK
echo -e "\e[1m\e[37m7. Development Kits\e[0m\e[36m"
cd $PREFIX/$TARGET
git clone --progress https://github.com/WDrijver/DevPac >>$LOGFILES/part7.log 2>>$LOGFILES/part7_err.log
if [ ! -d $PREFIX/$TARGET/DevPac/.git ]; then git clone --progress https://github.com/WDrijver/DevPac >>$LOGFILES/part7.log 2>>$LOGFILES/part7_err.log; fi
cd $ARCHIVES
cp -r -f P96/* $PREFIX/$TARGET/include >>$LOGFILES/part7.log 2>>$LOGFILES/part7_err.log
cp -r -f P96/autodocs P96/e P96/fd P96/inline P96/lvo_p96.i P96/pragmas P96/proto $PREFIX/$TARGET/include >>$LOGFILES/part7.log 2>>$LOGFILES/part7_err.log
cp -r -f P96/clib/* $PREFIX/$TARGET/include/clib >>$LOGFILES/part7.log 2>>$LOGFILES/part7_err.log
cp -r -f P96/libraries/* $PREFIX/$TARGET/include/libraries >>$LOGFILES/part7.log 2>>$LOGFILES/part7_err.log
cp -r -f cmake/* $PREFIX/lib >>$LOGFILES/part7.log 2>>$LOGFILES/part7_err.log

# Part 8: ApolloExplorer
echo -e "\e[1m\e[37m8. ApolloExplorer\e[0m\e[36m"
cd $WORKSPACE/$PROJECTS
git clone --progress https://github.com/ronybeck/ApolloExplorer >>$LOGFILES/part8.log 2>>$LOGFILES/part8_err.log
if [ ! -d $WORKSPACE/$PROJECTS/ApolloExplorer/.git ]; then git clone --progress https://github.com/ronybeck/ApolloExplorer >>$LOGFILES/part8.log 2>>$LOGFILES/part8_err.log; fi
cd $WORKSPACE/$PROJECTS/ApolloExplorer
qmake >>$LOGFILES/part8.log 2>>$LOGFILES/part8_err.log
make >>$LOGFILES/part8.log 2>>$LOGFILES/part8_err.log

# Part 9: BGDBServer
echo -e "\e[1m\e[37m9. BGDG Server\e[0m\e[36m"
cd $WORKSPACE/$PROJECTS
git clone --progress https://github.com/WDrijver/bgdbserver >>$LOGFILES/part9.log 2>>$LOGFILES/part9_err.log
if [ ! -d $WORKSPACE/$PROJECTS/bgdbserver/.git ]; then git clone --progress https://github.com/WDrijver/bgdbserver >>$LOGFILES/part9.log 2>>$LOGFILES/part9_err.log; fi
cd $WORKSPACE/$PROJECTS/bgdbserver
patch_bgdbserver_sources
make >>$LOGFILES/part9.log 2>>$LOGFILES/part9_err.log

# PART 10: Cleanup
Expand Down