reconstructure script

This commit is contained in:
Daniel
2019-04-09 20:39:43 +02:00
committed by GitHub
parent b8ce1ec538
commit fb42044321
2 changed files with 114 additions and 98 deletions
+94 -80
View File
@@ -3,6 +3,18 @@ export PREFIX="`pwd`/rel-bin/${TARGET}"
export PATH="${PREFIX}/bin:${PATH}"
export OUT="`pwd`/out"
#### ZMIEŃ, JEŻELI CHCESZ INNE WERSJE, DOMYŚLNE "master", CZYLI "BLEEDING EDGE"
export binutils_version="master"
export libc_version="master"
export linux_version="master"
export gcc_version="master"
#### TU NIE ZMIENIAJ vvv
export nproc="$(( `grep -c "processor" /proc/cpuinfo` * 2 ))"
export ARGS="--enable-multilib --enable-multiarch --enable-targets=all --disable-werror"
#### TU NIE ZMIENIAJ ^^^
case "${2}" in
64)
export CC="cc -m64"
@@ -10,96 +22,98 @@ case "${2}" in
32)
export CC="cc -m32"
export CXX="c++ -m32" ;;
*)
export CC="cc"
export CXX="c++" ;;
esac
#### JEŚLI BĘDĄ NOWE WERSJE BINUTILS'A i GCC PROSZĘ ZMIENIĆ NUMER!!!
export binutils_version="2.32" #TU ZMIENIAMY!
export newlib_version="master" #TU ZMIENIAMY!
export gcc_version="LATEST-4.9" #TU ZMIENIAMY!
export nproc="$(( `grep -c "processor" /proc/cpuinfo` * 2 ))"
export binutils_ext="tar.xz" #TU POD ŻADNYM POZOREM NIE ZMIENIAJ TYPU!!!!!
####
if ! command -v lftp >/dev/null; then
clear
printf "\n Nie znaleziono \"lftp\"!\n Prosze zanistaluj go na swoim obecnym systemie!\n\n"
exit 1
fi
(
if [ ! -e binutils-${binutils_version}${binutils_ext} ]; then
wget -c "http://ftp.gnu.org/gnu/binutils/binutils-${binutils_version}.${binutils_ext}"
download_n_extract()
{
if [ ! -e gcc-${gcc_version}.tar.gz ]; then
#lftp -c "open ftp://ftp.fu-berlin.de/unix/languages/gcc/snapshots; mirror ${gcc_version}" || return ${?}
wget --no-check-cert -c "https://github.com/gcc-mirror/gcc/archive/${gcc_version}.tar.gz" -O gcc-${gcc_version}.tar.gz || return ${?}
fi
if [ ! -d binutils-${binutils_version} ]; then
tar -xf binutils-*.*
if [ ! -d gcc-${gcc_version} ]; then
tar -xf gcc-${gcc_version}.tar.gz || return ${?}
fi
) || exit 1
if [ ! -e glibc-${libc_version}.tar.gz ]; then
wget --no-check-cert -c "https://github.com/bminor/glibc/archive/${libc_version}.tar.gz" -O glibc-${libc_version}.tar.gz || return ${?}
fi
if [ ! -d glibc-${libc_version} ]; then
tar -xf glibc-${libc_version}.tar.gz || return ${?}
fi
if [ ! -e linux-${linux_version}.tar.gz ]; then
wget --no-check-cert -c "https://github.com/torvalds/linux/archive/${linux_version}.tar.gz" -O linux-${linux_version}.tar.gz || return ${?}
fi
if [ ! -d linux-${linux_version} ]; then
tar -xf linux-${linux_version}.tar.gz || return ${?}
fi
if [ ! -e binutils-gdb-${binutils_version}.tar.gz ]; then
wget --no-check-cert -c "https://github.com/bminor/binutils-gdb/archive/${binutils_version}.tar.gz" -O binutils-gdb-${binutils_version}.tar.gz || return ${?}
fi
if [ ! -d binutils-gdb-${binutils_version} ]; then
tar -xf binutils-gdb-${binutils_version}.tar.gz || return ${?}
fi
}
if ! (
build()
{
mkdir -pv build-binutils
(cd build-binutils; ../binutils-*/configure --target="${TARGET}" --prefix="${PREFIX}" --disable-nls --disable-werror --enable-obsolete --disable-debug --with-gcc --with-gnu-as --with-gnu-ld)
make -C build-binutils -j${nproc}
make -C build-binutils -j${nproc} install
)
then
echo "STAGE=${TARGET}" > .error
exit 1
fi
(
if [ ! -e */gcc-*.* ]; then
lftp -c "open ftp://ftp.fu-berlin.de/unix/languages/gcc/snapshots ; mirror ${gcc_version}"
(cd build-binutils; ../binutils-gdb-${binutils_version}/configure --target="${TARGET}" --prefix="${PREFIX}" --disable-nls --enable-obsolete --disable-debug ${ARGS}) || return ${?}
make -C build-binutils -j${nproc} || return ${?}
make -C build-binutils -j${nproc} install || return ${?}
if [ ! -e .dl_ok ]; then
(cd gcc-${gcc_version}; contrib/download_prerequisites) || return ${?}
touch .dl_ok || return ${?}
fi
if [ ! -d gcc-* ]; then
tar -xf */gcc-*.*
fi
) || exit 1
mkdir -pv build-gcc || return ${?}
(cd build-gcc; ../gcc-${gcc_version}/configure --target="${TARGET}" --prefix="${PREFIX}" --enable-languages="c" --with-pkgversion="*DANiO* T00LCHAIN" --without-headers --disable-shared --disable-threads ${ARGS}) || return ${?}
make -C build-gcc -j${nproc} all-gcc || return ${?}
make -C build-gcc -j${nproc} install-gcc || return ${?}
make -C build-gcc -j${nproc} all-target-libgcc || return ${?}
make -C build-gcc -j${nproc} install-target-libgcc || return ${?}
make -C linux-${linux_version} ARCH="`echo ${TARGET} | cut -f 1 -d '-' | sed -e s/i.86/x86/ -e s/x86_64/x86/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/s390x/s390/ -e s/parisc64/parisc/ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ -e s/riscv.*/riscv/`" INSTALL_HDR_PATH="${PREFIX}/usr" headers_install || return ${?}
find ${PREFIX}/usr -name "..install.cmd" | xargs rm -rf || return ${?}
find ${PREFIX}/usr -name ".install" | xargs rm -rf || return ${?}
mkdir -pv build-glibc || return ${?}
env CC="${TARGET}-gcc" CXX="${TARGET}-g++" AR="${TARGET}-ar" RANLIB="${TARGET}-ranlib" bash -c '(cd build-glibc; ../glibc-${libc_version}/configure --prefix="${PREFIX}" --host="${TARGET}" --with-headers="${PREFIX}/usr/include" --with-pkgversion="*DANiO* T00LCHAIN" --enable-add-ons --disable-profile --without-gd ${ARGS})' || return ${?}
make -C build-glibc -j${nproc} install-bootstrap-headers=yes install-headers || return ${?}
make -C build-glibc -j${nproc} csu/subdir_lib || return ${?}
mkdir -pv ${PREFIX}/usr/lib
cp -ravf build-glibc/csu/crt1.o build-glibc/csu/crti.o build-glibc/csu/crtn.o ${PREFIX}/usr/lib || return ${?}
${TARGET}-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o ${PREFIX}/usr/lib/libc.so || return ${?}
rm -rf build-gcc || return ${?}
mkdir -pv build-gcc || return ${?}
(cd build-gcc; ../gcc-${gcc_version}/configure --target="${TARGET}" --prefix="${PREFIX}" --enable-languages="c" --with-pkgversion="*DANiO* T00LCHAIN" --without-headers --disable-shared --disable-threads --with-sysroot="${PREFIX}" ${ARGS}) || return ${?}
make -C build-gcc -j${nproc} || return ${?}
make -C build-gcc -j${nproc} install || return ${?}
env CC="${TARGET}-gcc" CXX="${TARGET}-g++" AR="${TARGET}-ar" RANLIB="${TARGET}-ranlib" bash -c '(cd build-glibc; ../glibc-${libc_version}/configure --prefix="${PREFIX}" --host="${TARGET}" --with-headers="${PREFIX}/usr/include" --with-pkgversion="*DANiO* T00LCHAIN" --enable-add-ons --disable-profile --without-gd ${ARGS})' || return ${?}
make -C build-glibc -j${nproc} || return ${?}
make -C build-glibc -j${nproc} install_root="${PREFIX}" install || return ${?}
rm -rf build-gcc || return ${?}
mkdir -pv build-gcc || return ${?}
(cd build-gcc; ../gcc-${gcc_version}/configure --target="${TARGET}" --prefix="${PREFIX}" --enable-languages="c,c++" --with-pkgversion="*DANiO* T00LCHAIN" --with-headers --enable-shared --enable-threads="posix" --with-sysroot="${PREFIX}" ${ARGS}) || return ${?}
make -C build-gcc -j${nproc} || return ${?}
make -C build-gcc -j${nproc} install || return ${?}
}
(
if [ ! -e newlib-*.tar.gz ]; then
wget -c "https://github.com/bminor/newlib/archive/master.tar.gz" -O newlib-${newlib_version}.tar.gz
fi
if [ ! -d newlib-* ]; then
tar -xf newlib-*.tar.gz
fi
) || exit 1
if ! (
(cd gcc-*; contrib/download_prerequisites)#; ln -svf ../newlib-${newlib_version}/newlib newlib
mkdir -pv build-gcc
(cd build-gcc; ../gcc-*/configure --target="${TARGET}" --prefix="${PREFIX}" --disable-lto --disable-nls --disable-werror --enable-languages="c" --with-pkgversion="*DANiO* T00LCHAIN" --enable-obsolete --with-newlib --with-system-zlib --disable-shared --disable-debug --without-headers) #--disable-libquadmath --disable-libssp --disable-libgomp
make -C build-gcc -j${nproc} all-gcc
make -C build-gcc -j${nproc} install-gcc
)
then
echo "STAGE=${TARGET}" > .error
exit 1
fi
if (
mkdir -pv build-newlib
(cd build-newlib; ../newlib-${newlib_version}/configure --prefix="${PREFIX}" --target="${TARGET}")
make -C build-newlib -j${nproc}
make -C build-newlib -j${nproc} install
(cd build-gcc; ../gcc-*/configure --target="${TARGET}" --prefix="${PREFIX}" --disable-lto --disable-nls --disable-werror --enable-languages="c,c++" --with-pkgversion="*DANiO* T00LCHAIN" --enable-obsolete --with-newlib --with-system-zlib --disable-shared --disable-debug)
make -C build-gcc -j${nproc}
make -C build-gcc -j${nproc} install
)
then
find ${PREFIX} | xargs file | grep "ELF" | grep "executable" | cut -f 1 -d ":" | xargs strip -S 2>/dev/null
mkdir -pv out
strip_n_pack()
{
find ${PREFIX} | xargs file | grep "ELF" | grep "executable" | cut -f 1 -d ":" | xargs strip -S 2>/dev/null || return ${?}
mkdir -pv out || return ${?}
if [ "${1}" == "64" ]; then
(cd ${PREFIX}; tar -cJf "${OUT}/${TARGET}-`date +"%d-%m-%Y"`_x86-64.txz" .)
(cd ${PREFIX}; tar -cJf "${OUT}/${TARGET}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-64.txz" .) || return ${?}
else
(cd ${PREFIX}; tar -cJf "${OUT}/${TARGET}-`date +"%d-%m-%Y"`_x86-32.txz" .)
(cd ${PREFIX}; tar -cJf "${OUT}/${TARGET}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-32.txz" .) || return ${?}
fi
rm -rf build-*
#printf "\n POPRAWNIE ZBUDOWANO GCC DLA ${TARGET}!\n\n"
else
echo "STAGE=${TARGET}" > .error
}
if ! download_n_extract; then
echo "STAGE=${TARGET} MSG='at \"download_n_extract\" section'" > .error
exit 1
fi
if ! build; then
echo "STAGE=${TARGET} MSG='at \"build\" section'" > .error
exit 1
fi
if ! strip_n_pack ${2}; then
echo "STAGE=${TARGET} MSG='at \"strip_n_pack ${2}\" section'" > .error
exit 1
fi
+20 -18
View File
@@ -1,27 +1,29 @@
#!/bin/sh
#REFERENCE: https://gist.github.com/maoueh/14ef25a03d5722bc1e03
build()
{
sudo apt update -qq
sudo apt install -qq -y git-core gnupg flex bison lftp gperf m4 build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev libxml2-utils xsltproc schedtool gettext texinfo nodejs npm
sudo npm config set strict-ssl false
sudo npm install -g surge
sudo apt-get clean
export TUPLE="danio"
for i in aarch64-${TUPLE}-linux-gnu alpha-${TUPLE}-linux-gnu arm-${TUPLE}-eabi arc-${TUPLE}-linux-gnu c6x-${TUPLE}-linux-gnu h8300-${TUPLE}-elf parisc64-${TUPLE}-linux-gnu parisc-${TUPLE}-linux-gnu i386-${TUPLE}-linux-gnu i686-${TUPLE}-gnu -${TUPLE}-linux-gnu ia64-${TUPLE}-linux-gnu m68k-${TUPLE}-linux-gnu microblaze-${TUPLE}-linux-gnu mips64-${TUPLE}-linux-gnu mips-${TUPLE}-linux-gnu nios2-${TUPLE}-elf powerpc64-${TUPLE}-linux-gnu powerpc64-${TUPLE}-linux-gnu s390-${TUPLE}-linux-gnu sh2-${TUPLE}-linux-gnu sh4-${TUPLE}-linux-gnu riscv32-${TUPLE}-linux-gnu riscv64-${TUPLE}-linux-gnu sparc-${TUPLE}-linux-gnu sparc64-${TUPLE}-linux-gnu x86_64-${TUPLE}-linux-gnu xtensa-${TUPLE}-linux-gnu nds32le-${TUPLE}-linux-gnu or1k-${TUPLE}-linux-gnu hexagon-${TUPLE}-linux-gnu am33_2.0-${TUPLE}-linux-gnu bfin-${TUPLE}-uclinux crisv32-${TUPLE}-linux-gnu frv-${TUPLE}-linux-gnu m32r-${TUPLE}-linux-gnu tilepro-${TUPLE}-linux-gnu tilegx-${TUPLE}-linux-gnu; do
if [ -e .error ]; then
. ./.error
break
else
#sudo apt update -qq
#sudo apt install -qq -y git-core gnupg flex bison lftp gperf m4 build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev libxml2-utils xsltproc schedtool gettext texinfo nodejs npm linux-libc-dev:i386 linux-libc-dev
#sudo npm config set strict-ssl false
#sudo npm install -g surge
#sudo apt-get clean
export TUPLE="danio"
for i in aarch64-${TUPLE}-linux alpha-${TUPLE}-linux arm-${TUPLE}-eabi arc-${TUPLE}-linux c6x-${TUPLE}-linux h8300-${TUPLE}-elf parisc64-${TUPLE}-linux parisc-${TUPLE}-linux i386-${TUPLE}-linux i686-${TUPLE}-gnu -${TUPLE}-linux ia64-${TUPLE}-linux m68k-${TUPLE}-linux microblaze-${TUPLE}-linux mips64-${TUPLE}-linux mips-${TUPLE}-linux nios2-${TUPLE}-elf powerpc32-${TUPLE}-linux powerpc64-${TUPLE}-linux s390-${TUPLE}-linux sh2-${TUPLE}-linux sh4-${TUPLE}-linux riscv32-${TUPLE}-linux riscv64-${TUPLE}-linux sparc-${TUPLE}-linux sparc64-${TUPLE}-linux x86_64-${TUPLE}-linux xtensa-${TUPLE}-linux nds32le-${TUPLE}-linux or1k-${TUPLE}-linux hexagon-${TUPLE}-linux am33_2.0-${TUPLE}-linux bfin-${TUPLE}-linux crisv32-${TUPLE}-linux frv-${TUPLE}-linux m32r-${TUPLE}-linux tilepro-${TUPLE}-linux tilegx-${TUPLE}-linux; do
if [ -e .error ]; then
. ./.error
break
else
rm -rf build-* #LATEST-* gcc-* newlib-* binutils-*
./danio_gcc.sh ${i} ${1} | tee out/${i}.log
rm -rf build-*
./danio_gcc.sh ${i} ${1} 2>out/error.log | tee out/${i}.log
fi
done
if [ -e .error ]; then
echo "error detected @ ${STAGE} ${MSG} !"
exit 1
fi
done
if [ -e .error ]; then
echo "error detected @ ${STAGE} !"
exit 1
fi
}
mkdir -p out