Files
build-toolchain/build-toolchain.sh

193 lines
4.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
TARGET=arm-uclinuxfdpiceabi
TOP="$(pwd)"
BUILD_DIR="${TOP}/build"
BUILD_SRC_DIR="${BUILD_DIR}/src"
INSTALL_DIR="${TOP}/install"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
KERNEL_SYSROOT_DIR="${INSTALL_DIR}/sysroot"
KERNEL_HEADERS_DIR="${KERNEL_SYSROOT_DIR}/usr/include"
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 ${KERNEL_SYSROOT_DIR}
mkdir -p ${BUILD_SRC_DIR}
#######################################
# РАСПАКОВКА В build/src
#######################################
echo "== Распаковка архивов в build/src =="
for f in *.tar.xz; do
echo " * $f"
tar -xf "$f" -C ${BUILD_SRC_DIR}
done
# Пути на исходники
SRC_BINUTILS="${BUILD_SRC_DIR}/binutils-2.34"
SRC_GCC="${BUILD_SRC_DIR}/gcc-13.4.0"
SRC_LINUX="${BUILD_SRC_DIR}/linux-4.9.224"
SRC_UCLIBC="${BUILD_SRC_DIR}/uClibc-ng-1.0.34"
#######################################
# BINUTILS
#######################################
echo "== Сборка binutils =="
mkdir -p build/binutils
cd build/binutils
$SRC_BINUTILS/configure \
--target=${TARGET} \
--prefix=${INSTALL_DIR} \
--with-sysroot=${KERNEL_SYSROOT_DIR} \
--disable-nls \
--without-bugurl \
--disable-werror
make -j12
make install
cd ../..
#######################################
# GCC STAGE 1
#######################################
echo "== Сборка GCC Stage 1 =="
cd $SRC_GCC
./contrib/download_prerequisites
cd ../../..
mkdir -p build/gcc1
cd build/gcc1
$SRC_GCC/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 =="
mkdir -p build/kernelheader
cd $SRC_LINUX
PATH=${INSTALL_BIN_DIR}:${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 $SRC_UCLIBC
# Удаляем старое значение
sed -i '/^KERNEL_HEADERS=/d' .config
# Добавляем новое
echo "KERNEL_HEADERS=\"${KERNEL_HEADERS_DIR}\"" >> .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
$SRC_GCC/configure \
--target=${TARGET} \
--prefix=${INSTALL_DIR} \
--with-sysroot=${KERNEL_SYSROOT_DIR} \
--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 "== Готово =="
#######################################
# УПРАВЛЕНИЕ АРХИВАМИ
#######################################
echo ""
echo "=== Управление архивами ==="
echo "Собрана тулчейн: toolset-jlv-${SUBARCH}.tgz"
read -p "Удалить исходные архивы (*.tar.xz)? (y/N): " -n 1 -r
echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -f *.tar.xz && echo "Архивы удалены."
echo ""
echo "=== Очистка временных файлов ==="
read -p "Удалить директории сборки (build/src и build/*)? (y/N): " -n 1 -r
echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -rf build && echo "Временные файлы удалены."
echo ""
echo "== Сборка завершена полностью =="