93 lines
2.7 KiB
Bash
Executable File
93 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
gccVer="13.2.0"
|
|
binutilsVer="2.41"
|
|
export PREFIX=""
|
|
if [[ -n "${TOOLCHAINPREFIX}" ]]; then
|
|
export PREFIX="${TOOLCHAINPREFIX}"
|
|
else
|
|
export PREFIX="${HOME}/cross-aarch64"
|
|
fi
|
|
set -euo pipefail
|
|
echo "Installing toolchain to ${PREFIX}"
|
|
export TARGET="aarch64-none-elf"
|
|
export PATH="${PREFIX}/bin:${PATH}"
|
|
|
|
osType=$(uname)
|
|
echo "Detected OS: ${osType}"
|
|
export NPROC=""
|
|
if [[ "${osType}" == "Darwin" ]]; then
|
|
NPROC=$("sysctl -n hw.physicalcpu")
|
|
else
|
|
NPROC=$("nproc")
|
|
fi
|
|
echo "Detected threads: ${NPROC}"
|
|
|
|
existGCC=0
|
|
existBIN=0
|
|
if [[ -e binutils-"${binutilsVer}".tar.gz ]]; then
|
|
existBIN=1
|
|
fi
|
|
if [[ -e gcc-"${gccVer}".tar.gz ]]; then
|
|
existGCC=1
|
|
fi
|
|
|
|
if [[ "${existBIN}" != "1" ]]; then
|
|
wget https://ftp.gnu.org/gnu/binutils/binutils-"${binutilsVer}".tar.gz
|
|
fi
|
|
|
|
if [[ "${existGCC}" != "1" ]]; then
|
|
wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-"${gccVer}".tar.gz
|
|
fi
|
|
|
|
startLoc=$(pwd)
|
|
|
|
# Prefix path
|
|
mkdir -p "${PREFIX}"
|
|
# Compilation directory
|
|
cd /tmp
|
|
rm -rf toolchain
|
|
mkdir -p toolchain
|
|
cd toolchain
|
|
|
|
cp "${startLoc}/binutils-${binutilsVer}.tar.gz" .
|
|
cp "${startLoc}/gcc-${gccVer}.tar.gz" .
|
|
|
|
# Build binutils for aarch64
|
|
# might need texinfo
|
|
mkdir -p binutils-src
|
|
tar -xvf binutils-"${binutilsVer}".tar.gz -C binutils-src/
|
|
mkdir -p binutils
|
|
cd binutils
|
|
../binutils-src/binutils-"${binutilsVer}"/configure --target="${TARGET}" --prefix="${PREFIX}" --libexecdir="${PREFIX}"/lib \
|
|
--enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --enable-__cxa_atexit \
|
|
--disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-plugin \
|
|
--disable-linker-build-id --enable-lto --enable-install-libiberty --with-linker-hash-style=gnu --with-gnu-ld\
|
|
--enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release --enable-default-pie \
|
|
--enable-default-ssp --enable-gnu-unique-object --with-zstd=no --with-arch=armv8-a --enable-fix-cortex-a53-835769 \
|
|
--enable-fix-cortex-a53-843419
|
|
|
|
make -j"${NPROC}"
|
|
make install
|
|
|
|
# Build gcc for aarch64
|
|
cd ..
|
|
mkdir -p gcc-src
|
|
tar -xvf gcc-"${gccVer}".tar.gz -C gcc-src/
|
|
cd gcc-src/gcc-"${gccVer}"/
|
|
./contrib/download_prerequisites
|
|
cd ../../
|
|
mkdir -p gcc
|
|
cd gcc
|
|
../gcc-src/gcc-"${gccVer}"/configure --target="${TARGET}" --prefix="${PREFIX}" --disable-shared --disable-nls --disable-threads --disable-tls \
|
|
--enable-checking=release --enable-languages=c,c++ --with-newlib --with-gnu-as --with-gnu-ld
|
|
|
|
make -j"${NPROC}" all-gcc
|
|
make install-gcc
|
|
make -j"${NPROC}" all-target-libgcc
|
|
make install-target-libgcc
|
|
cd
|
|
rm -rf /tmp/toolchain
|
|
echo "Toolchain installation is complete!"
|
|
echo "Please add this to your bashrc or zshrc or whatever"
|
|
echo "export PATH=\"${PREFIX}/bin:\$PATH\""
|