diff --git a/build-toolchain.sh b/build-toolchain.sh index c058256..184b1e9 100755 --- a/build-toolchain.sh +++ b/build-toolchain.sh @@ -15,7 +15,7 @@ PKG_UCLIBC="uClibc-ng" BINUTILS_VER="2.42" GCC_VER="13.4.0" LINUX_VER="4.9.224" -UCLIBC_VER="1.0.55" +UCLIBC_VER="1.0.34" # ================================================================== # Основные параметры тулчейна @@ -27,8 +27,9 @@ SUBMODE="thumb" TOP="$(pwd)" CONFIGS_DIR="${TOP}/config" +SRC_DIR="${TOP}/src" BUILD_DIR="${TOP}/build" -BUILD_SRC_DIR="${TOP}/src" +BUILD_SRC_DIR="${BUILD_DIR}/src" INSTALL_DIR="${BUILD_DIR}/install" INSTALL_BIN_DIR="${INSTALL_DIR}/bin" @@ -53,13 +54,31 @@ SRC_LINUX="${BUILD_SRC_DIR}/${PKG_LINUX}-${LINUX_VER}" SRC_UCLIBC="${BUILD_SRC_DIR}/${PKG_UCLIBC}-${UCLIBC_VER}" # ================================================================== -echo "== Создание директорий ==" +echo "== Очистка и создание директорий ==" +rm -rf "${BUILD_DIR}" mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}" -echo "== Распаковка архивов в ${BUILD_SRC_DIR} ==" -for f in "${BUILD_SRC_DIR}"/*.tar.xz; do - [ -f "$f" ] || { echo "Нет архивов *.tar.xz в ${BUILD_SRC_DIR}!"; exit 1; } - echo " * $f" +echo "== Распаковка архивов из ${SRC_DIR} в ${BUILD_SRC_DIR} ==" +ARCHIVES=( + "${SRC_DIR}/${PKG_BINUTILS}-${BINUTILS_VER}.tar.xz" + "${SRC_DIR}/${PKG_GCC}-${GCC_VER}.tar.xz" + "${SRC_DIR}/${PKG_LINUX}-${LINUX_VER}.tar.xz" + "${SRC_DIR}/${PKG_UCLIBC}-${UCLIBC_VER}.tar.xz" +) + +for f in "${ARCHIVES[@]}"; do + if [ ! -f "$f" ]; then + echo "Ошибка: архив не найден: $f" + exit 1 + fi + + dirname="$(basename "${f%.tar.*}")" + if [ -d "${BUILD_SRC_DIR}/${dirname}" ]; then + echo " * Пропуск (уже распакован): ${dirname}" + continue + fi + + echo " * Распаковка: $(basename "$f")" tar -xf "$f" -C "${BUILD_SRC_DIR}" done @@ -67,16 +86,17 @@ done # BINUTILS # ================================================================== echo "== Сборка binutils-${BINUTILS_VER} ==" -mkdir -p build/binutils && cd build/binutils +mkdir -p "${BUILD_DIR}/binutils" && cd "${BUILD_DIR}/binutils" "${SRC_BINUTILS}/configure" \ --target="${TARGET}" \ --prefix="${INSTALL_DIR}" \ --with-sysroot="${KERNEL_SYSROOT_DIR}" \ --disable-nls \ --without-bugurl \ - --disable-werror -make -j$(nproc) all -make install + --disable-werror \ + MAKEINFO=true +make -j$(nproc) MAKEINFO=true all +make MAKEINFO=true install cd "${TOP}" # ================================================================== @@ -88,7 +108,7 @@ cd "${SRC_GCC}" ./contrib/download_prerequisites cd "${TOP}" -mkdir -p build/gcc1 && cd build/gcc1 +mkdir -p "${BUILD_DIR}/gcc1" && cd "${BUILD_DIR}/gcc1" "${SRC_GCC}/configure" \ --target="${TARGET}" \ --prefix="${INSTALL_DIR}" \ @@ -121,14 +141,14 @@ cd "${TOP}" # ================================================================== echo "== Установка заголовков linux-${LINUX_VER} ==" -mkdir -p build/kernelheader +mkdir -p "${BUILD_DIR}/kernelheader" cd "${SRC_LINUX}" PATH="${INSTALL_BIN_DIR}:${PATH}" \ make ARCH=arm \ INSTALL_HDR_PATH="${KERNEL_SYSROOT_USR_DIR}" \ CROSS_COMPILE="${TARGET}-" \ - O="${TOP}/build/kernelheader" \ + O="${BUILD_DIR}/kernelheader" \ headers_install cd "${TOP}" @@ -164,7 +184,7 @@ cd "${TOP}" # GCC FINAL (C + C++) # ================================================================== echo "== Сборка финального GCC-${GCC_VER} (C+C++) ==" -mkdir -p build/gcc2 && cd build/gcc2 +mkdir -p "${BUILD_DIR}/gcc2" && cd "${BUILD_DIR}/gcc2" "${SRC_GCC}/configure" \ --target="${TARGET}" \ --prefix="${INSTALL_DIR}" \ @@ -196,11 +216,11 @@ cd "${TOP}" # ================================================================== echo "== Strip toolchain и упаковка ==" -cd ${TOP} +cd "${TOP}" WDIR=$(mktemp -d) trap 'rm -rf "$WDIR"' EXIT -cp -a install/* "$WDIR"/ +cp -a "${INSTALL_DIR}"/* "$WDIR"/ find "$WDIR" -type f -executable -exec strip -p {} \; 2>/dev/null || true tar -C "$WDIR" --owner=0 --group=0 -cJf "toolset-jlv-${SUBARCH}-gcc${GCC_VER}-uclibc${UCLIBC_VER}.tar.xz" . @@ -211,11 +231,11 @@ echo "Готово: toolset-jlv-${SUBARCH}-gcc${GCC_VER}-uclibc${UCLIBC_VER}.tar # ================================================================== echo echo "=== Управление архивами и очистка ===" -read -p "Удалить исходники (*.tar.xz)? (y/N): " -n 1 -r REPLY; echo -[[ $REPLY =~ ^[Yy]$ ]] && rm -f *.tar.xz && echo "Исходные архивы удалены." +read -p "Удалить исходники (src/)? (y/N): " -n 1 -r REPLY; echo +[[ $REPLY =~ ^[Yy]$ ]] && rm -rf "${SRC_DIR}" && echo "Директория исходников удалена." -read -p "Удалить директории сборки (build/, install/)? (y/N): " -n 1 -r REPLY; echo -[[ $REPLY =~ ^[Yy]$ ]] && rm -rf build install && echo "Директории сборки удалены." +read -p "Удалить директорию сборки (build/)? (y/N): " -n 1 -r REPLY; echo +[[ $REPLY =~ ^[Yy]$ ]] && rm -rf "${BUILD_DIR}" && echo "Директория сборки удалена." echo echo "== Сборка полностью завершена! ==" \ No newline at end of file