120 lines
6.2 KiB
Bash
Executable File
120 lines
6.2 KiB
Bash
Executable File
export TARGET="${1}"
|
|
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"
|
|
export CXX="c++ -m64" ;;
|
|
32)
|
|
export CC="cc -m32"
|
|
export CXX="c++ -m32" ;;
|
|
esac
|
|
|
|
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 gcc-${gcc_version} ]; then
|
|
tar -xf gcc-${gcc_version}.tar.gz || 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 ${?}
|
|
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
|
|
}
|
|
|
|
build()
|
|
{
|
|
mkdir -pv build-binutils
|
|
(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
|
|
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 ${?}
|
|
}
|
|
|
|
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}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-64.txz" .) || return ${?}
|
|
else
|
|
(cd ${PREFIX}; tar -cJf "${OUT}/${TARGET}-GCC_${gcc_version}-`date +"%d-%m-%Y"`-`uname -s`_x86-32.txz" .) || return ${?}
|
|
fi
|
|
}
|
|
|
|
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
|