13 BINUTIL_URL=https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz
16 GCC_URL=https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz
18 GCC_SRC="gcc-${GCC_VERSION}"
19 BINUTIL_SRC="binutils-${BINUTIL_VERSION}"
21 # download gcc & binutil src code
23 export PREFIX="$HOME/cross-compiler"
24 export TARGET=i686-elf
25 export PATH="$PREFIX/bin:$PATH"
28 mkdir -p "${HOME}/toolchain/binutils-build"
29 mkdir -p "${HOME}/toolchain/gcc-build"
31 cd "${HOME}/toolchain"
33 if [ ! -d "${HOME}/toolchain/${GCC_SRC}" ]
35 (wget -O "${GCC_SRC}.tar" ${GCC_URL} \
36 && tar -xf "${GCC_SRC}.tar") || exit
37 rm -f "${GCC_SRC}.tar"
39 echo "skip downloading gcc"
42 if [ ! -d "${HOME}/toolchain/${BINUTIL_SRC}" ]
44 (wget -O "${BINUTIL_SRC}.tar" ${BINUTIL_URL} \
45 && tar -xf "${BINUTIL_SRC}.tar") || exit
46 rm -f "${BINUTIL_SRC}.tar"
48 echo "skip downloading binutils"
51 echo "Building binutils"
53 cd "${HOME}/toolchain/binutils-build"
55 ("${HOME}/toolchain/${BINUTIL_SRC}/configure" --target=$TARGET --prefix="$PREFIX" \
56 --with-sysroot --disable-nls --disable-werror) || exit
58 (make && make install) || exit
60 echo "Binutils build successfully!"
64 cd "${HOME}/toolchain/gcc-build"
66 which -- "$TARGET-as" || echo "$TARGET-as is not in the PATH"
68 ("${HOME}/toolchain/${GCC_SRC}/configure" --target=$TARGET --prefix="$PREFIX" \
69 --disable-nls --enable-languages=c,c++ --without-headers) || exit
72 make all-target-libgcc &&\
74 make install-target-libgcc) || exit