Script has been supplemented

This commit is contained in:
2025-12-04 15:57:34 +03:00
parent 96056d2f56
commit 446b697ba6

View File

@@ -1,12 +1,24 @@
#!/bin/bash #!/bin/bash
set -e set -e
TARGET=arm-uclinuxfdpiceabi # ==================================================================
TOP="$(pwd)" # Версии пакетов
# ==================================================================
BINUTILS_VER="2.34"
GCC_VER="13.4.0"
LINUX_VER="4.9.224"
UCLIBC_VER="1.0.34"
# ==================================================================
# Основные параметры тулчейна
# ==================================================================
TARGET="arm-uclinuxfdpiceabi"
SUBARCH="armv7-m"
SUBMODE="thumb"
TOP="$(pwd)"
BUILD_DIR="${TOP}/build" BUILD_DIR="${TOP}/build"
BUILD_SRC_DIR="${BUILD_DIR}/src" BUILD_SRC_DIR="${BUILD_DIR}/src"
INSTALL_DIR="${TOP}/install" INSTALL_DIR="${TOP}/install"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin" INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
KERNEL_SYSROOT_DIR="${INSTALL_DIR}/sysroot" KERNEL_SYSROOT_DIR="${INSTALL_DIR}/sysroot"
@@ -15,68 +27,61 @@ KERNEL_SYSROOT_USR_INCLUDES_DIR="${KERNEL_SYSROOT_USR_DIR}/include"
CFLAGS_TOOLSET='-O2' CFLAGS_TOOLSET='-O2'
CFLAGS_TARGET='-Os -mthumb' CFLAGS_TARGET='-Os -mthumb'
CFLAGS=$CFLAGS_TOOLSET CFLAGS_FOR_TARGET=$CFLAGS_TARGET
CXXFLAGS_FOR_TARGET=$CFLAGS_TARGET
SUBARCH=armv7-m export CFLAGS=$CFLAGS_TOOLSET
SUBMODE=thumb export CFLAGS_FOR_TARGET=$CFLAGS_TARGET
export CXXFLAGS_FOR_TARGET=$CFLAGS_TARGET
# ==================================================================
# Имена распакованных директорий (обычно совпадают с версией)
# ==================================================================
SRC_BINUTILS="${BUILD_SRC_DIR}/binutils-${BINUTILS_VER}"
SRC_GCC="${BUILD_SRC_DIR}/gcc-${GCC_VER}"
SRC_LINUX="${BUILD_SRC_DIR}/linux-${LINUX_VER}"
SRC_UCLIBC="${BUILD_SRC_DIR}/uClibc-ng-${UCLIBC_VER}"
# ==================================================================
echo "== Создание директорий ==" echo "== Создание директорий =="
mkdir -p ${KERNEL_SYSROOT_DIR} mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}"
mkdir -p ${BUILD_SRC_DIR}
####################################### echo "== Распаковка архивов в ${BUILD_SRC_DIR} =="
# РАСПАКОВКА В build/src
#######################################
echo "== Распаковка архивов в build/src =="
for f in *.tar.xz; do for f in *.tar.xz; do
[ -f "$f" ] || { echo "Нет архивов *.tar.xz в текущей директории!"; exit 1; }
echo " * $f" echo " * $f"
tar -xf "$f" -C ${BUILD_SRC_DIR} tar -xf "$f" -C "${BUILD_SRC_DIR}"
done 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 # BINUTILS
####################################### # ==================================================================
echo "== Сборка binutils ==" echo "== Сборка binutils-${BINUTILS_VER} =="
mkdir -p build/binutils && cd build/binutils
mkdir -p build/binutils "${SRC_BINUTILS}/configure" \
cd build/binutils --target="${TARGET}" \
--prefix="${INSTALL_DIR}" \
$SRC_BINUTILS/configure \ --with-sysroot="${KERNEL_SYSROOT_DIR}" \
--target=${TARGET} \
--prefix=${INSTALL_DIR} \
--with-sysroot=${KERNEL_SYSROOT_DIR} \
--disable-nls \ --disable-nls \
--without-bugurl \ --without-bugurl \
--disable-werror --disable-werror
make -j$(nproc) all
make -j12
make install make install
cd ../.. cd ../../..
####################################### # ==================================================================
# GCC STAGE 1 # GCC STAGE 1 (только C, без libc)
####################################### # ==================================================================
echo "== Сборка GCC Stage 1 ==" echo "== Сборка GCC-${GCC_VER} Stage 1 =="
cd $SRC_GCC cd "${SRC_GCC}"
./contrib/download_prerequisites ./contrib/download_prerequisites
cd ../../.. cd ../../..
mkdir -p build/gcc1 mkdir -p build/gcc1 && cd build/gcc1
cd build/gcc1 "${SRC_GCC}/configure" \
--target="${TARGET}" \
$SRC_GCC/configure \ --prefix="${INSTALL_DIR}" \
--target=${TARGET} \ --with-arch="${SUBARCH}" \
--prefix=${INSTALL_DIR} \ --with-mode="${SUBMODE}" \
--with-arch=${SUBARCH} \
--with-mode=${SUBMODE} \
--without-headers \ --without-headers \
--with-newlib \ --with-newlib \
--disable-shared \ --disable-shared \
@@ -92,57 +97,54 @@ $SRC_GCC/configure \
--disable-nls \ --disable-nls \
--disable-libatomic --disable-libatomic
make -j12 make -j$(nproc) all-gcc
make install make install-gcc
cd ../.. make -j$(nproc) all-target-libgcc
make install-target-libgcc
cd ../../..
####################################### # ==================================================================
# LINUX HEADERS # Linux headers
####################################### # ==================================================================
echo "== Установка заголовков linux ==" echo "== Установка заголовков linux-${LINUX_VER} =="
mkdir -p build/kernelheader mkdir -p build/kernelheader
cd $SRC_LINUX cd "${SRC_LINUX}"
PATH=${INSTALL_BIN_DIR}:${PATH} \ PATH="${INSTALL_BIN_DIR}:${PATH}" \
make headers_install ARCH=arm \ make ARCH=arm \
INSTALL_HDR_PATH=${KERNEL_SYSROOT_USR_DIR} \ INSTALL_HDR_PATH="${KERNEL_SYSROOT_USR_DIR}" \
CROSS_COMPILE=${TARGET}- \ CROSS_COMPILE="${TARGET}-" \
O=${TOP}/build/kernelheader O="${TOP}/build/kernelheader" \
headers_install
cd "${TOP}"
cd ../../.. # ==================================================================
# uClibc-ng
# ==================================================================
echo "== Сборка uClibc-ng-${UCLIBC_VER} =="
cd "${SRC_UCLIBC}"
####################################### # Перезаписываем путь к заголовкам ядра
# UCLIBC sed -i '/^KERNEL_HEADERS=/d' .config 2>/dev/null || true
#######################################
echo "== Сборка uClibc =="
cd $SRC_UCLIBC
# Удаляем старое значение
sed -i '/^KERNEL_HEADERS=/d' .config
# Добавляем новое
echo "KERNEL_HEADERS=\"${KERNEL_SYSROOT_USR_INCLUDES_DIR}\"" >> .config echo "KERNEL_HEADERS=\"${KERNEL_SYSROOT_USR_INCLUDES_DIR}\"" >> .config
PATH=${TOP}/install/bin:${PATH} make all -j12 PATH="${INSTALL_BIN_DIR}:${PATH}" make oldconfig || true
PATH=${TOP}/install/bin:${PATH} make PREFIX=${KERNEL_SYSROOT_DIR} install PATH="${INSTALL_BIN_DIR}:${PATH}" make -j$(nproc)
cd ../../.. PATH="${INSTALL_BIN_DIR}:${PATH}" make PREFIX="${KERNEL_SYSROOT_DIR}" install
cd "${TOP}"
####################################### # ==================================================================
# GCC FINAL # GCC FINAL (C + C++)
####################################### # ==================================================================
echo "== Сборка финального GCC ==" echo "== Сборка финального GCC-${GCC_VER} (C+C++) =="
mkdir -p build/gcc2 && cd build/gcc2
mkdir -p build/gcc2 "${SRC_GCC}/configure" \
cd build/gcc2 --target="${TARGET}" \
--prefix="${INSTALL_DIR}" \
$SRC_GCC/configure \ --with-sysroot="${KERNEL_SYSROOT_DIR}" \
--target=${TARGET} \ --with-arch="${SUBARCH}" \
--prefix=${INSTALL_DIR} \ --with-mode="${SUBMODE}" \
--with-sysroot=${KERNEL_SYSROOT_DIR} \
--with-arch=${SUBARCH} \
--with-mode=${SUBMODE} \
--enable-languages=c,c++ \ --enable-languages=c,c++ \
--enable-threads=posix \ --enable-threads=posix \
--enable-fdpic \ --enable-fdpic \
@@ -152,42 +154,33 @@ $SRC_GCC/configure \
--disable-libgomp \ --disable-libgomp \
--disable-libatomic --disable-libatomic
make -j12 make -j$(nproc)
make install make install
cd ../.. cd "${TOP}"
#######################################
# STRIP
#######################################
echo "== Strip toolchain =="
# ==================================================================
# Strip и упаковка
# ==================================================================
echo "== Strip toolchain и упаковка =="
WDIR=$(mktemp -d) WDIR=$(mktemp -d)
trap "rm -Rf $WDIR" EXIT trap 'rm -rf "$WDIR"' EXIT
tar -C install --atime-preserve -cf - . | tar --atime-preserve -xf - -C $WDIR cp -a install/* "$WDIR"/
find $WDIR -type f -exec strip -p {} \; > /dev/null 2>&1 find "$WDIR" -type f -executable -exec strip -p {} \; 2>/dev/null || true
find $WDIR -exec install/bin/${TARGET}-strip -p {} \; > /dev/null 2>&1
tar -C "$WDIR" --atime-preserve -cJf "toolset-jlv-${SUBARCH}.tar.xz" . tar -C "$WDIR" --owner=0 --group=0 -cJf "toolset-jlv-${SUBARCH}-gcc${GCC_VER}-uclibc${UCLIBC_VER}.tar.xz" .
echo "Готово: toolset-jlv-${SUBARCH}-gcc${GCC_VER}-uclibc${UCLIBC_VER}.tar.xz"
echo "== Готово ==" # ==================================================================
# Очистка
####################################### # ==================================================================
# УПРАВЛЕНИЕ АРХИВАМИ
#######################################
echo ""
echo "=== Управление архивами ==="
echo "Собран тулчейн: toolset-jlv-${SUBARCH}.tar.xz"
read -p "Удалить исходные архивы (*.tar.xz)? (y/N): " -n 1 -r
echo echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -f *.tar.xz && echo "Архивы удалены." echo "=== Управление архивами и очистка ==="
read -p "Удалить исходники (*.tar.xz)? (y/N): " -n 1 -r REPLY; echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -f *.tar.xz && echo "Исходные архивы удалены."
read -p "Удалить директории сборки (build/, install/)? (y/N): " -n 1 -r REPLY; echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -rf build install && echo "Директории сборки удалены."
echo ""
echo "=== Очистка временных файлов ==="
read -p "Удалить директории сборки (build/src и build/*)? (y/N): " -n 1 -r
echo echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -rf build && echo "Временные файлы удалены." echo "== Сборка полностью завершена! =="
echo ""
echo "== Сборка завершена полностью =="