diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..5c63c34 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,68 @@ +language: bash +sudo: required +dist: xenial +compiler: gcc +os: linux + +env: + - t=aarch64-danio-linux + - t=alpha-danio-linux + - t=arm-danio-eabi + - t=arc-danio-linux + - t=c6x-danio-linux + - t=parisc64-danio-linux + - t=parisc-danio-linux + - t=i386-danio-linux + - t=i686-danio-gnu + - t=ia64-danio-linux + - t=m68k-danio-linux + - t=microblaze-danio-linux + - t=mips64-danio-linux + - t=mips-danio-linux + - t=powerpc32-danio-linux + - t=powerpc64-danio-linux + - t=s390-danio-linux + - t=sh2-danio-linux + - t=sh4-danio-linux + - t=riscv32-danio-linux + - t=riscv64-danio-linux + - t=sparc-danio-linux + - t=sparc64-danio-linux + - t=x86_64-danio-linux + - t=xtensa-danio-linux + - t=nds32le-danio-linux + - t=or1k-danio-linux + - t=hexagon-danio-linux + - t=am33_2.0-danio-linux + - t=bfin-danio-linux + - t=crisv32-danio-linux + - t=frv-danio-linux + - t=m32r-danio-linux + - t=tilepro-danio-linux + - t=tilegx-danio-linux + +jobs: + include: + - script: | + ./danio_gcc.sh ${t} 32 + mv -fv out out32 + - script: | + ./danio_gcc.sh ${t} 64 + mv -fv out out64 + - stage: Deploy + script: | + mkdir -pv out + mv -fv out32/* out64/* out + deploy: + provider: releases + api_key: ${token} + file_glob: true + file: out/* + on: + tags: true + + +before_jobs: | + 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 + chmod +x -v *.sh diff --git a/README.MD b/README.MD index 7a33286..6713839 100644 --- a/README.MD +++ b/README.MD @@ -16,4 +16,4 @@ and wait several hours to compile for many arches (look at `runit-all.sh`) --- -[My continuous untegration at CircleCi](https://circleci.com/gh/danielkot/danio-gcc) +[My continuous untegration at Travis-CI](https://travis-ci.org/danielkot/danio-gcc) diff --git a/danio_gcc.sh b/danio_gcc.sh index aa6e237..b03a1bf 100755 --- a/danio_gcc.sh +++ b/danio_gcc.sh @@ -5,9 +5,9 @@ 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 libc_version="release/2.28/master" export linux_version="master" -export gcc_version="master" +export gcc_version="gcc-5-branch" #### TU NIE ZMIENIAJ vvv export nproc="$(( `grep -c "processor" /proc/cpuinfo` * 2 ))" @@ -15,6 +15,14 @@ export ARGS="--enable-multilib --enable-multiarch --enable-targets=all --disable #### TU NIE ZMIENIAJ ^^^ +echo "${libc_version}" >.tmp +if grep -q "/" .tmp; then + export _libc_version="`echo ${libc_version} | tr '/' '-'`" +else + export _libc_version="${libc_version}" +fi +rm -rf .tmp + case "${2}" in 64) export CC="cc -m64" @@ -23,39 +31,29 @@ case "${2}" in export CC="cc -m32" export CXX="c++ -m32" ;; esac +mkdir -pv out -download_n_extract() +download() { - 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 gcc-${gcc_version} ]; then - tar -xf gcc-${gcc_version}.tar.gz || return ${?} + git clone --depth=1 -b ${gcc_version} "git://github.com/gcc-mirror/gcc" gcc-${gcc_version} || return ${?} fi - 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 ${?} + if [ ! -d glibc-${_libc_version} ]; then + git clone --depth=1 -b ${libc_version} "git://github.com/bminor/glibc" glibc-${_libc_version} || 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 ${?} + git clone --depth=1 -b ${linux_version} "git://github.com/torvalds/linux" linux-${linux_version} || return ${?} fi if [ ! -d binutils-gdb-${binutils_version} ]; then - tar -xf binutils-gdb-${binutils_version}.tar.gz || return ${?} + git clone --depth=1 -b ${binutils_version} "git://github.com/bminor/binutils-gdb" binutils-gdb-${binutils_version} || return ${?} fi } - build() { - mkdir -pv build-binutils + 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}/${TARGET}" headers_install || return ${?} + find ${PREFIX}/${TARGET} -name "..install.cmd" | xargs rm -rf || return ${?} + find ${PREFIX}/${TARGET} -name ".install" | xargs rm -rf || return ${?} + mkdir -pv build-binutils || return ${?} (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 ${?} @@ -64,56 +62,62 @@ build() touch .dl_ok || return ${?} fi 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 ${?} + (cd build-gcc; ../gcc-${gcc_version}/configure --target="${TARGET}" --prefix="${PREFIX}" --enable-languages="c,c++" --with-pkgversion="*DANiO* T00LCHAIN" ${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 ${?} + env CC="${TARGET}-gcc" CXX="${TARGET}-g++" sh -c '(cd build-glibc; ../glibc-${_libc_version}/configure --prefix="${PREFIX}/${TARGET}" --host="${TARGET}" --with-headers="${PREFIX}/${TARGET}/include" --with-pkgversion="*DANiO* T00LCHAIN" --enable-add-ons ${ARGS})' 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" --with-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 ${?} + mkdir -pv ${PREFIX}/${TARGET}/lib || return ${?} + cp -ravf build-glibc/csu/crt1.o build-glibc/csu/crti.o build-glibc/csu/crtn.o ${PREFIX}/${TARGET}/lib || return ${?} + ${TARGET}-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o ${PREFIX}/${TARGET}/lib/libc.so || return ${?} + touch ${PREFIX}/${TARGET}/include/gnu/stubs.h || return ${?} + make -C build-gcc -j${nproc} all-target-libgcc || return ${?} + make -C build-gcc -j${nproc} install-target-libgcc || return ${?} + make -C build-gcc -j${nproc} all-target-libstdc++-v3 || return ${?} + make -C build-gcc -j${nproc} install-target-libstdc++-v3 || 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 ${?} + make -C build-glibc -j${nproc} install || return ${?} } - 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 ${?} + find ${PREFIX} | xargs file | grep "ELF" | cut -f 1 -d ":" | xargs strip -S --strip-unneeded #for host + find ${PREFIX}/${TARGET} | xargs file | grep "ELF" | cut -f 1 -d ":" | xargs ${TARGET}-strip -S --strip-unneeded #for sysroot if [ "${1}" == "64" ]; then - (cd ${PREFIX}; tar -cJf "${OUT}/${TARGET}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-64.txz" .) || return ${?} + (cd rel-bin; tar -cJvf "${OUT}/${TARGET}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-64.txz" ${TARGET}) #|| return ${?} else - (cd ${PREFIX}; tar -cJf "${OUT}/${TARGET}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-32.txz" .) || return ${?} + (cd rel-bin; tar -cJvf "${OUT}/${TARGET}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-32.txz" ${TARGET}) #|| return ${?} + fi +} +test_gcc() +{ + echo -n "int main(){return 0;}" >test.cpp + if ${TARGET}-g++ test.cpp -o test; then + echo "${TARGET}-g++ TEST PASSED" + rm -rf test{.cpp,} + return 0 + else + echo "${TARGET}-g++ TEST FAILED" + rm -rf test{.cpp,} + return 1 fi } -if ! download_n_extract; then - echo "STAGE=${TARGET} MSG='at \"download_n_extract\" section'" > .error + +if ! download; 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 + echo "STAGE=${TARGET} MSG='at \"build\" section'" >.error + exit 1 +fi +if ! test_gcc; then + echo "STAGE=${TARGET} MSG='at \"test_gcc\" section'" >.error exit 1 fi if ! strip_n_pack ${2}; then - echo "STAGE=${TARGET} MSG='at \"strip_n_pack ${2}\" section'" > .error + echo "STAGE=${TARGET} MSG='at \"strip_n_pack ${2}\" section'" >.error exit 1 fi