#!/bin/bash set -e TARGET=arm-uclinuxfdpiceabi TOP="$(pwd)" CFLAGS_TOOLSET='-O2' CFLAGS_TARGET='-Os -mthumb' CFLAGS=$CFLAGS_TOOLSET CFLAGS_FOR_TARGET=$CFLAGS_TARGET CXXFLAGS_FOR_TARGET=$CFLAGS_TARGET SUBARCH=armv7-m SUBMODE=thumb echo "== Создание директорий ==" mkdir -p install mkdir -p install/sysroot echo "== Распаковка архивов ==" for f in *.tar.xz; do echo " * $f" tar -xf "$f" done ############### # BINUTILS ############### echo "== Сборка binutils ==" mkdir -p build-binutils cd build-binutils ../binutils-2.34/configure \ --target=${TARGET} \ --prefix=${TOP}/install \ --with-sysroot=${TOP}/install/sysroot \ --disable-nls \ --without-bugurl \ --disable-werror make -j12 make install cd .. ############### # GCC STAGE1 ############### echo "== Сборка GCC Stage 1 ==" cd gcc-13.4.0 ./contrib/download_prerequisites cd .. mkdir -p build-gcc1 cd build-gcc1 ../gcc-13.4.0/configure \ --target=${TARGET} \ --prefix=${TOP}/install \ --with-arch=${SUBARCH} \ --with-mode=${SUBMODE} \ --without-headers \ --with-newlib \ --disable-shared \ --disable-threads \ --disable-libssp \ --disable-libgomp \ --disable-libmudflap \ --enable-languages=c \ --disable-libquadmath \ --disable-multilib \ --without-cloog \ --without-ppl \ --disable-nls \ --disable-libatomic make -j12 make install cd .. ############### # LINUX HEADERS ############### echo "== Установка заголовков linux ==" cd linux-4.9.224 PATH=${TOP}/install/bin:${PATH} \ make headers_install ARCH=arm \ INSTALL_HDR_PATH=${TOP}/install/sysroot/usr \ CROSS_COMPILE=${TARGET}- \ O=${TOP}/build/kernelheader cd .. ############### # UCLIBC ############### echo "== Сборка uClibc ==" cd uClibc-ng-1.0.34 # TODO: конфигурировать или вставить .config при необходимости PATH=${TOP}/install/bin:${PATH} make all -j12 PATH=${TOP}/install/bin:${PATH} make PREFIX=${TOP}/install/sysroot install cd .. ############### # GCC FINAL ############### echo "== Сборка финального GCC ==" mkdir -p build-gcc2 cd build-gcc2 ../gcc-13.4.0/configure \ --target=${TARGET} \ --prefix=${TOP}/install \ --with-sysroot=${TOP}/install/sysroot \ --with-arch=${SUBARCH} \ --with-mode=${SUBMODE} \ --enable-languages=c,c++ \ --enable-threads=posix \ --enable-fdpic \ --disable-libstdcxx-pch \ --disable-multilib \ --disable-bootstrap \ --disable-libgomp \ --disable-libatomic make -j12 make install cd .. ############### # STRIP ############### echo "== Strip toolchain ==" WDIR=$(mktemp -d) trap "rm -Rf $WDIR" EXIT tar -C install --atime-preserve -cf - . | tar --atime-preserve -xf - -C $WDIR find $WDIR -type f -exec strip -p {} \; > /dev/null 2>&1 find $WDIR -exec install/bin/${TARGET}-strip -p {} \; > /dev/null 2>&1 tar -C $WDIR --atime-preserve -czf toolset-jlv-${SUBARCH}.tgz . echo "== Готово ==" ############### # CLEAR ############### echo "" echo "=== Управление архивами ===" echo "Собрана тулчейн: toolset-jlv-${SUBARCH}.tgz" read -p "Удалить исходные архивы (*.tar.xz)? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Удаление архивов..." rm -f *.tar.xz echo "Архивы удалены." else echo "Архивы сохранены." fi echo "" echo "=== Очистка временных файлов ===" read -p "Удалить директории сборки (build-*, исходники)? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Удаление временных директорий..." rm -rf build-* binutils-* gcc-* linux-* uClibc-* echo "Временные файлы удалены." else echo "Временные файлы сохранены." fi echo "" echo "== Сборка завершена полностью =="