Commit 9adf8456 authored by Dimitris Lampridis's avatar Dimitris Lampridis

rework of riscv build script

parent 6bf7a7e3
#!/bin/bash
set -e
NEWLIB_V=3.0.0
GCC_V=7.3.0
GDB_V=7.10.1
BINUTILS_V=2.31.1
MPC_V=1.0.3
MPFR_V=3.1.4
GMP_V=6.1.0
JOBS=`lscpu -e=cpu | wc -l`
PREFIX=/opt/riscv
CUR_DIR=`pwd`
do_download()
{
wget ftp://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_V}.tar.xz -nc
# wget ftp://ftp.gnu.org/gnu/gdb/gdb-${GDB_V}.tar.gz -nc --quiet || true
wget ftp://ftp.gnu.org/gnu/gmp/gmp-${GMP_V}.tar.bz2 -nc
wget ftp://ftp.gnu.org/gnu/mpfr/mpfr-${MPFR_V}.tar.bz2 -nc
wget ftp://ftp.gnu.org/gnu/mpc/mpc-${MPC_V}.tar.gz -nc
wget ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_V}/gcc-${GCC_V}.tar.xz -nc
wget ftp://sources.redhat.com/pub/newlib/newlib-${NEWLIB_V}.tar.gz -nc
}
do_extract()
{
# tar -x -f gdb-${GDB_V}.tar.gz
tar -x -f binutils-${BINUTILS_V}.tar.xz
tar -x -f gmp-${GMP_V}.tar.bz2
tar -x -f mpfr-${MPFR_V}.tar.bz2
tar -x -f mpc-${MPC_V}.tar.gz
tar -x -f gcc-${GCC_V}.tar.xz
tar -x -f newlib-${NEWLIB_V}.tar.gz
}
do_gdb()
{
mkdir -p ${PREFIX}
rm -rf build-gdb-${GDB_V}
mkdir -p build-gdb-${GDB_V}
cd build-gdb-${GDB_V}
../gdb-${GDB_V}/configure --prefix=${PREFIX} --target=lm32-elf
make -j${JOBS}
make install
cd ..
}
do_binutils()
{
mkdir -p ${PREFIX}
BUILD_DIR=build-binutils-${BINUTILS_V}
rm -rf ${BUILD_DIR}
mkdir -p {$BUILD_DIR}
cd ${BUILD_DIR}
../binutils-${BINUTILS_V}/configure --target=riscv32-elf --prefix=${PREFIX} --disable-gdb --disable-readline --disable-libdecnumber --disable-sim --disable-nls
make -j${JOBS}
make install-strip
cd ..
}
do_gmp()
{
INSTALL_DIR=$PWD/install
mkdir -p ${INSTALL_DIR}
BUILD_DIR=build-gmp-${GMP_V}
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR}
# Be very conservative about the cpu to support installation on a different
# host.
../gmp-${GMP_V}/configure --prefix=${INSTALL_DIR} --disable-shared --host=core2-pc-linux-gnu
make -j${JOBS}
make check
make install
cd ..
}
do_mpfr()
{
INSTALL_DIR=$PWD/install
mkdir -p ${INSTALL_DIR}
BUILD_DIR=build-mpfr-${MPFR_V}
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR}
../mpfr-${MPFR_V}/configure --prefix=${INSTALL_DIR} --with-gmp=${INSTALL_DIR} --disable-shared
make -j${JOBS}
make check
make install
cd ..
}
do_mpc()
{
INSTALL_DIR=$PWD/install
mkdir -p ${INSTALL_DIR}
BUILD_DIR=build-mpfr-${MPC_V}
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR}
../mpc-${MPC_V}/configure --prefix=${INSTALL_DIR} --with-gmp=${INSTALL_DIR} --disable-shared
make -j${JOBS}
make check
make install
cd ..
}
do_gcc()
{
INSTALL_DIR=$PWD/install
BUILD_DIR=build-gcc-${GCC_V}
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
mkdir -p ${PREFIX}
cd ${BUILD_DIR}
../gcc-${GCC_V}/configure --prefix=${PREFIX} --target=riscv32-elf \
--enable-multilib \
--enable-languages=c \
--disable-nls \
--disable-shared \
--disable-libssp \
--with-gmp=${INSTALL_DIR}
make -j${JOBS}
make install
cd ..
}
do_newlib()
{
BUILD_DIR=build-newlib-${NEWLIB_V}
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
mkdir -p ${PREFIX}
cd ${BUILD_DIR}
../newlib-${NEWLIB_V}/configure --prefix=${PREFIX} --target=riscv32-elf \
--with-newlib \
--enable-newlib-nano-malloc \
--disable-newlib-multithread \
CC_FOR_TARGET=${PREFIX}/bin/riscv32-elf-gcc \
AR_FOR_TARGET=${PREFIX}/bin/riscv32-elf-ar \
RANLIB_FOR_TARGET=${PREFIX}/bin/riscv32-elf-ranlib
make -j${JOBS}
make install
cd ..
}
do_all()
{
do_download
do_extract
do_binutils
do_gmp
do_mpfr
do_gmp
do_gcc
do_newlib
do_gcc
}
if [ $# = 1 ]; then
eval do_$1
else
echo "usage: $0 ACTION"
exit 1
fi
Commands used to build a toolchain for risc-v (from bash history, so cannot be
used directly as a script).
# binutils
# There are still some issues with 2.30, so master branch was used for the
# build.
# Repo: git://sourceware.org/git/binutils-gdb.git
# commit: commit 01f7e10cf2dcf403462b2feed06c43135651556d
./binutils-gdb/configure --target=riscv32-elf --prefix=/opt/riscv --disable-gdb --disable-readline --disable-libdecnumber --disable-sim
make -j16
make install-strip
# gmp, mpfr, mpc.
# gcc
mkdir gcc-7.3.0-objs
cd gcc-7.3.0-objs
PATH=/opt/riscv/bin/:$PATH
../gcc-7.3.0/configure --target=riscv32-elf --prefix=/opt/riscv --enable-languages=c --with-gmp=/opt/tg/install --disable-libssp --disable-libquadmath --disable-plugin --disable-lto
make -j30
make install
# newlib
mkdir newlib-3.0.0-objs
cd newlib-3.0.0-objs
../newlib-3.0.0/configure --target=riscv32-elf --prefix=/opt/riscv
make -j30
make install
# gcc
# gdb
# from: https://github.com/riscv/riscv-binutils-gdb.git
tar xvf riscv-gdb.tgz
cd riscv-binutils-gdb/
rm -rf gold ld binutils/ gprof/
rm -rf sim gas elfcpp
cd ..
mkdir gdb-objs/
../riscv-binutils-gdb/configure --target=riscv32-elf --prefix=/opt/riscv --without-python
make -j30
make install
_cache
_build
_tmp_install
riscv-toolchain
#!/bin/bash
set -e
NEWLIB_V=3.0.0
GCC_V=7.3.0
GDB_V=7.10.1
BINUTILS_V=2.31.1
MPC_V=1.0.3
MPFR_V=3.1.4
GMP_V=6.1.0
JOBS=`lscpu -e=cpu | wc -l`
CUR_DIR=`pwd`
PREFIX=${CUR_DIR}/riscv-toolchain
TMP_DIR=${CUR_DIR}/_tmp_install
CACHE_DIR=${CUR_DIR}/_cache
BUILD_DIR=${CUR_DIR}/_build
_check_and_get()
{
pushd ${CACHE_DIR} > /dev/null
wget $1 -nc
popd > /dev/null
}
do_download()
{
_check_and_get ftp://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_V}.tar.xz
# wget ftp://ftp.gnu.org/gnu/gdb/gdb-${GDB_V}.tar.gz -nc --quiet || true
_check_and_get ftp://ftp.gnu.org/gnu/gmp/gmp-${GMP_V}.tar.bz2
_check_and_get ftp://ftp.gnu.org/gnu/mpfr/mpfr-${MPFR_V}.tar.bz2
_check_and_get ftp://ftp.gnu.org/gnu/mpc/mpc-${MPC_V}.tar.gz
_check_and_get ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_V}/gcc-${GCC_V}.tar.xz
_check_and_get ftp://sources.redhat.com/pub/newlib/newlib-${NEWLIB_V}.tar.gz
}
_check_and_extract()
{
pushd ${CACHE_DIR} > /dev/null
ARCHIVE=$1
DIR_NAME=${ARCHIVE%.tar.*}
if [ -d ${DIR_NAME} ]
then
echo "Directory '${DIR_NAME}' already there; not extracting"
else
tar -x -f $1
fi
popd > /dev/null
}
do_extract()
{
# tar -x -f gdb-${GDB_V}.tar.gz
_check_and_extract binutils-${BINUTILS_V}.tar.xz
_check_and_extract gmp-${GMP_V}.tar.bz2
_check_and_extract mpfr-${MPFR_V}.tar.bz2
_check_and_extract mpc-${MPC_V}.tar.gz
_check_and_extract gcc-${GCC_V}.tar.xz
_check_and_extract newlib-${NEWLIB_V}.tar.gz
}
do_gdb()
{
GDB_BUILD_DIR=${BUILD_DIR}/gdb-${GDB_V}
rm -rf ${GDB_BUILD_DIR}
mkdir -p ${GDB_BUILD_DIR}
pushd ${GDB_BUILD_DIR} > /dev/null
${CACHE_DIR}/gdb-${GDB_V}/configure --prefix=${PREFIX} --target=lm32-elf
make -j${JOBS}
make install
popd > /dev/null
}
do_binutils()
{
BINUTILS_BUILD_DIR=${BUILD_DIR}/binutils-${BINUTILS_V}
rm -rf ${BINUTILS_BUILD_DIR}
mkdir -p ${BINUTILS_BUILD_DIR}
pushd ${BINUTILS_BUILD_DIR} > /dev/null
${CACHE_DIR}/binutils-${BINUTILS_V}/configure --target=riscv32-elf --prefix=${PREFIX} --disable-gdb --disable-readline --disable-libdecnumber --disable-sim --disable-nls
make -j${JOBS}
make install-strip
popd > /dev/null
}
do_gmp()
{
GMP_BUILD_DIR=${BUILD_DIR}/gmp-${GMP_V}
rm -rf ${GMP_BUILD_DIR}
mkdir -p ${GMP_BUILD_DIR}
pushd ${GMP_BUILD_DIR} > /dev/null
# Be very conservative about the cpu to support installation on a different
# host.
${CACHE_DIR}/gmp-${GMP_V}/configure --prefix=${TMP_DIR} --disable-shared --host=core2-pc-linux-gnu
make -j${JOBS}
make check
make install
popd > /dev/null
}
do_mpfr()
{
MPFR_BUILD_DIR=${BUILD_DIR}/mpfr-${MPFR_V}
rm -rf ${MPFR_BUILD_DIR}
mkdir -p ${MPFR_BUILD_DIR}
pushd ${MPFR_BUILD_DIR} > /dev/null
${CACHE_DIR}/mpfr-${MPFR_V}/configure --prefix=${TMP_DIR} --with-gmp=${TMP_DIR} --disable-shared
make -j${JOBS}
make check
make install
popd > /dev/null
}
do_mpc()
{
MPC_BUILD_DIR=${BUILD_DIR}/mpfr-${MPC_V}
rm -rf ${MPC_BUILD_DIR}
mkdir -p ${MPC_BUILD_DIR}
pushd ${MPC_BUILD_DIR} > /dev/null
${CACHE_DIR}/mpc-${MPC_V}/configure --prefix=${TMP_DIR} --with-gmp=${TMP_DIR} --disable-shared
make -j${JOBS}
make check
make install
popd > /dev/null
}
do_gcc()
{
GCC_BUILD_DIR=${BUILD_DIR}/gcc-${GCC_V}
rm -rf ${GCC_BUILD_DIR}
mkdir -p ${GCC_BUILD_DIR}
pushd ${GCC_BUILD_DIR} > /dev/null
${CACHE_DIR}/gcc-${GCC_V}/configure --prefix=${PREFIX} --target=riscv32-elf \
--enable-multilib \
--enable-languages=c \
--disable-nls \
--disable-shared \
--disable-libssp \
--with-gmp=${TMP_DIR}
make -j${JOBS}
make install
popd > /dev/null
}
do_newlib()
{
NEWLIB_BUILD_DIR=${BUILD_DIR}/newlib-${NEWLIB_V}
rm -rf ${NEWLIB_BUILD_DIR}
mkdir -p ${NEWLIB_BUILD_DIR}
pushd ${NEWLIB_BUILD_DIR} > /dev/null
${CACHE_DIR}/newlib-${NEWLIB_V}/configure --prefix=${PREFIX} --target=riscv32-elf \
--with-newlib \
--enable-newlib-nano-malloc \
--disable-newlib-multithread \
CC_FOR_TARGET=${PREFIX}/bin/riscv32-elf-gcc \
AR_FOR_TARGET=${PREFIX}/bin/riscv32-elf-ar \
RANLIB_FOR_TARGET=${PREFIX}/bin/riscv32-elf-ranlib
make -j${JOBS}
make install
popd > /dev/null
}
do_all()
{
do_download
do_extract
do_binutils
do_gmp
do_mpfr
do_mpc
do_gcc
do_newlib
do_gcc
}
mkdir -p ${CACHE_DIR}
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
mkdir -p ${TMP_DIR}
mkdir -p ${PREFIX}
if [ $# = 1 ]; then
eval do_$1
elif [ $# = 0 ]; then
do_all
else
echo "usage: $0 ACTION"
exit 1
fi
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment