diff --git a/danio_gcc.sh b/danio_gcc.sh index 234f4a3..9d911a1 100755 --- a/danio_gcc.sh +++ b/danio_gcc.sh @@ -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 diff --git a/runit-all.sh b/runit-all.sh index 808c043..4c526af 100755 --- a/runit-all.sh +++ b/runit-all.sh @@ -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