194 lines
4.8 KiB
Bash
Executable File
194 lines
4.8 KiB
Bash
Executable File
#!/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_SYSROOT_USR_DIR="${KERNEL_SYSROOT_DIR}/usr"
|
||
KERNEL_SYSROOT_USR_INCLUDES_DIR="${KERNEL_SYSROOT_USR_DIR}/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=${INSTALL_DIR} \
|
||
--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=${KERNEL_SYSROOT_USR_DIR} \
|
||
CROSS_COMPILE=${TARGET}- \
|
||
O=${TOP}/build/kernelheader
|
||
|
||
cd ../../..
|
||
|
||
#######################################
|
||
# UCLIBC
|
||
#######################################
|
||
echo "== Сборка uClibc =="
|
||
|
||
cd $SRC_UCLIBC
|
||
|
||
# Удаляем старое значение
|
||
sed -i '/^KERNEL_HEADERS=/d' .config
|
||
|
||
# Добавляем новое
|
||
echo "KERNEL_HEADERS=\"${KERNEL_SYSROOT_USR_INCLUDES_DIR}\"" >> .config
|
||
|
||
PATH=${TOP}/install/bin:${PATH} make all -j12
|
||
PATH=${TOP}/install/bin:${PATH} make PREFIX=${KERNEL_SYSROOT_DIR} 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 -cJf "toolset-jlv-${SUBARCH}.tar.xz" .
|
||
|
||
echo "== Готово =="
|
||
|
||
#######################################
|
||
# УПРАВЛЕНИЕ АРХИВАМИ
|
||
#######################################
|
||
echo ""
|
||
echo "=== Управление архивами ==="
|
||
echo "Собран тулчейн: toolset-jlv-${SUBARCH}.tar.xz"
|
||
|
||
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 "== Сборка завершена полностью =="
|