Skip to content

Instantly share code, notes, and snippets.

@nathansizemore
Last active June 13, 2024 12:17
Show Gist options
  • Save nathansizemore/69580572400110d183440f78242cb47d to your computer and use it in GitHub Desktop.
Save nathansizemore/69580572400110d183440f78242cb47d to your computer and use it in GitHub Desktop.
Customizable GNU Toolchain install script
#! /bin/bash
BINUTILS_VERSION=binutils-2.28
GCC_VERSION=gcc-7.1.0
LIBC_VERSION=glibc-2.24
MPFR_VERSION=mpfr-3.1.5
GMP_VERSION=gmp-6.1.2
MPC_VERSION=mpc-1.0.3
ISL_VERSION=isl-0.16.1
CLOOG_VERSION=cloog-0.18.1
PREFIX=${HOME}/dev/opt/gcc
TEMP_DIR=${HOME}/dev/tmp
SRC_DIR=${HOME}/dev
BUILD_DIR=${HOME}/dev/build
function create_directories {
mkdir -p ${PREFIX}
mkdir -p ${TEMP_DIR}
mkdir -p ${SRC_DIR}
mkdir -p ${BUILD_DIR}
}
function download_src {
cd ${TEMP_DIR}
wget -nc ftp://gnu.mirror.iweb.com/binutils/${BINUTILS_VERSION}.tar.gz
wget -nc ftp://gnu.mirror.iweb.com/gcc/${GCC_VERSION}/${GCC_VERSION}.tar.gz
# wget -nc ftp://gnu.mirror.iweb.com/glibc/${LIBC_VERSION}.tar.xz
wget -nc ftp://gnu.mirror.iweb.com/mpfr/${MPFR_VERSION}.tar.gz
wget -nc ftp://gnu.mirror.iweb.com/gmp/${GMP_VERSION}.tar.xz
wget -nc ftp://gnu.mirror.iweb.com/mpc/${MPC_VERSION}.tar.gz
wget -nc ftp://gcc.gnu.org/pub/gcc/infrastructure/${ISL_VERSION}.tar.bz2
wget -nc ftp://gcc.gnu.org/pub/gcc/infrastructure/${CLOOG_VERSION}.tar.gz
}
function extract_src {
cd ${TEMP_DIR}
tar xf ${BINUTILS_VERSION}.tar.gz -C ${SRC_DIR}
tar xf ${GCC_VERSION}.tar.gz -C ${SRC_DIR}
# tar xf ${LIBC_VERSION}.tar.xz -C ${SRC_DIR}
tar xf ${MPFR_VERSION}.tar.gz -C ${SRC_DIR}
tar xf ${GMP_VERSION}.tar.xz -C ${SRC_DIR}
tar xf ${MPC_VERSION}.tar.gz -C ${SRC_DIR}
tar xf ${ISL_VERSION}.tar.bz2 -C ${SRC_DIR}
tar xf ${CLOOG_VERSION}.tar.gz -C ${SRC_DIR}
}
function setup_build_dir {
cd ${BUILD_DIR}
mkdir -p ${BINUTILS_VERSION}
mkdir -p ${GCC_VERSION}
# mkdir -p ${LIBC_VERSION}
mkdir -p ${MPFR_VERSION}
mkdir -p ${GMP_VERSION}
mkdir -p ${MPC_VERSION}
mkdir -p ${ISL_VERSION}
mkdir -p ${CLOOG_VERSION}
}
function build_binutils {
cd ${BUILD_DIR}/${BINUTILS_VERSION}
${SRC_DIR}/${BINUTILS_VERSION}/configure --prefix=${PREFIX}
make -j4
make install
}
function build_gcc {
cd ${SRC_DIR}/${GCC_VERSION}
ln -s ../${MPFR_VERSION} mpfr
ln -s ../${GMP_VERSION} gmp
ln -s ../${MPC_VERSION} mpc
ln -s ../${ISL_VERSION} isl
ln -s ../${CLOOG_VERSION} cloog
cd ${BUILD_DIR}/${GCC_VERSION}
${SRC_DIR}/${GCC_VERSION}/configure --prefix=${PREFIX} \
--disable-multilib \
--enable-languages=c,c++ \
--enable-threads=posix
make -j4
make install
}
# function build_libc {
# cd ${BUILD_DIR}/${LIBC_VERSION}
# ${SRC_DIR}/${LIBC_VERSION}/configure --prefix=${PREFIX}
# make -j4
# make install
# }
function remove_temp_dir {
rm -rf ${TEMP_DIR}
}
create_directories
download_src
extract_src
setup_build_dir
build_binutils
build_gcc
# build_libc
remove_temp_dir
trap - EXIT
echo 'Success!'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment