77 lines
1.7 KiB
Bash
77 lines
1.7 KiB
Bash
#! /usr/bin/bash
|
|
sudo apt update &&\
|
|
sudo apt install -y \
|
|
build-essential \
|
|
bison\
|
|
flex\
|
|
libgmp3-dev\
|
|
libmpc-dev\
|
|
libmpfr-dev\
|
|
texinfo
|
|
|
|
BINUTIL_VERSION=2.37
|
|
BINUTIL_URL=https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz
|
|
|
|
GCC_VERSION=11.2.0
|
|
GCC_URL=https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz
|
|
|
|
GCC_SRC="gcc-${GCC_VERSION}"
|
|
BINUTIL_SRC="binutils-${BINUTIL_VERSION}"
|
|
|
|
# download gcc & binutil src code
|
|
|
|
export PREFIX="$HOME/cross-compiler"
|
|
export TARGET=i686-elf
|
|
export PATH="$PREFIX/bin:$PATH"
|
|
|
|
mkdir -p "${PREFIX}"
|
|
mkdir -p "${HOME}/toolchain/binutils-build"
|
|
mkdir -p "${HOME}/toolchain/gcc-build"
|
|
|
|
cd "${HOME}/toolchain"
|
|
|
|
if [ ! -d "${HOME}/toolchain/${GCC_SRC}" ]
|
|
then
|
|
(wget -O "${GCC_SRC}.tar" ${GCC_URL} \
|
|
&& tar -xf "${GCC_SRC}.tar") || exit
|
|
rm -f "${GCC_SRC}.tar"
|
|
else
|
|
echo "skip downloading gcc"
|
|
fi
|
|
|
|
if [ ! -d "${HOME}/toolchain/${BINUTIL_SRC}" ]
|
|
then
|
|
(wget -O "${BINUTIL_SRC}.tar" ${BINUTIL_URL} \
|
|
&& tar -xf "${BINUTIL_SRC}.tar") || exit
|
|
rm -f "${BINUTIL_SRC}.tar"
|
|
else
|
|
echo "skip downloading binutils"
|
|
fi
|
|
|
|
echo "Building binutils"
|
|
|
|
cd "${HOME}/toolchain/binutils-build"
|
|
|
|
("${HOME}/toolchain/${BINUTIL_SRC}/configure" --target=$TARGET --prefix="$PREFIX" \
|
|
--with-sysroot --disable-nls --disable-werror) || exit
|
|
|
|
(make && make install) || exit
|
|
|
|
echo "Binutils build successfully!"
|
|
|
|
echo "Building GCC"
|
|
|
|
cd "${HOME}/toolchain/gcc-build"
|
|
|
|
which -- "$TARGET-as" || echo "$TARGET-as is not in the PATH"
|
|
|
|
("${HOME}/toolchain/${GCC_SRC}/configure" --target=$TARGET --prefix="$PREFIX" \
|
|
--disable-nls --enable-languages=c,c++ --without-headers) || exit
|
|
|
|
(make all-gcc &&\
|
|
make all-target-libgcc &&\
|
|
make install-gcc &&\
|
|
make install-target-libgcc) || exit
|
|
|
|
echo "done"
|