Files
build-toolchain/build-toolchain.sh

178 lines
4.0 KiB
Bash
Executable File

#!/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 "== Сборка завершена полностью =="