Script has been supplemented
This commit is contained in:
@@ -1,12 +1,24 @@
|
||||
#!/bin/bash
|
||||
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_SRC_DIR="${BUILD_DIR}/src"
|
||||
|
||||
INSTALL_DIR="${TOP}/install"
|
||||
INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
|
||||
KERNEL_SYSROOT_DIR="${INSTALL_DIR}/sysroot"
|
||||
@@ -15,68 +27,61 @@ 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
|
||||
export CFLAGS=$CFLAGS_TOOLSET
|
||||
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 "== Создание директорий =="
|
||||
mkdir -p ${KERNEL_SYSROOT_DIR}
|
||||
mkdir -p ${BUILD_SRC_DIR}
|
||||
mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}"
|
||||
|
||||
#######################################
|
||||
# РАСПАКОВКА В build/src
|
||||
#######################################
|
||||
echo "== Распаковка архивов в build/src =="
|
||||
echo "== Распаковка архивов в ${BUILD_SRC_DIR} =="
|
||||
for f in *.tar.xz; do
|
||||
[ -f "$f" ] || { echo "Нет архивов *.tar.xz в текущей директории!"; exit 1; }
|
||||
echo " * $f"
|
||||
tar -xf "$f" -C ${BUILD_SRC_DIR}
|
||||
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} \
|
||||
# ==================================================================
|
||||
echo "== Сборка binutils-${BINUTILS_VER} =="
|
||||
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 -j$(nproc) all
|
||||
make install
|
||||
cd ../..
|
||||
cd ../../..
|
||||
|
||||
#######################################
|
||||
# GCC STAGE 1
|
||||
#######################################
|
||||
echo "== Сборка GCC Stage 1 =="
|
||||
# ==================================================================
|
||||
# GCC STAGE 1 (только C, без libc)
|
||||
# ==================================================================
|
||||
echo "== Сборка GCC-${GCC_VER} Stage 1 =="
|
||||
|
||||
cd $SRC_GCC
|
||||
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} \
|
||||
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 \
|
||||
@@ -92,57 +97,54 @@ $SRC_GCC/configure \
|
||||
--disable-nls \
|
||||
--disable-libatomic
|
||||
|
||||
make -j12
|
||||
make install
|
||||
cd ../..
|
||||
make -j$(nproc) all-gcc
|
||||
make install-gcc
|
||||
make -j$(nproc) all-target-libgcc
|
||||
make install-target-libgcc
|
||||
cd ../../..
|
||||
|
||||
#######################################
|
||||
# LINUX HEADERS
|
||||
#######################################
|
||||
echo "== Установка заголовков linux =="
|
||||
# ==================================================================
|
||||
# Linux headers
|
||||
# ==================================================================
|
||||
echo "== Установка заголовков linux-${LINUX_VER} =="
|
||||
|
||||
mkdir -p build/kernelheader
|
||||
cd $SRC_LINUX
|
||||
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
|
||||
PATH="${INSTALL_BIN_DIR}:${PATH}" \
|
||||
make ARCH=arm \
|
||||
INSTALL_HDR_PATH="${KERNEL_SYSROOT_USR_DIR}" \
|
||||
CROSS_COMPILE="${TARGET}-" \
|
||||
O="${TOP}/build/kernelheader" \
|
||||
headers_install
|
||||
cd "${TOP}"
|
||||
|
||||
cd ../../..
|
||||
# ==================================================================
|
||||
# uClibc-ng
|
||||
# ==================================================================
|
||||
echo "== Сборка uClibc-ng-${UCLIBC_VER} =="
|
||||
cd "${SRC_UCLIBC}"
|
||||
|
||||
#######################################
|
||||
# UCLIBC
|
||||
#######################################
|
||||
echo "== Сборка uClibc =="
|
||||
|
||||
cd $SRC_UCLIBC
|
||||
|
||||
# Удаляем старое значение
|
||||
sed -i '/^KERNEL_HEADERS=/d' .config
|
||||
|
||||
# Добавляем новое
|
||||
# Перезаписываем путь к заголовкам ядра
|
||||
sed -i '/^KERNEL_HEADERS=/d' .config 2>/dev/null || true
|
||||
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 ../../..
|
||||
PATH="${INSTALL_BIN_DIR}:${PATH}" make oldconfig || true
|
||||
PATH="${INSTALL_BIN_DIR}:${PATH}" make -j$(nproc)
|
||||
PATH="${INSTALL_BIN_DIR}:${PATH}" make PREFIX="${KERNEL_SYSROOT_DIR}" install
|
||||
cd "${TOP}"
|
||||
|
||||
#######################################
|
||||
# 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} \
|
||||
# ==================================================================
|
||||
# GCC FINAL (C + C++)
|
||||
# ==================================================================
|
||||
echo "== Сборка финального GCC-${GCC_VER} (C+C++) =="
|
||||
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 \
|
||||
@@ -152,42 +154,33 @@ $SRC_GCC/configure \
|
||||
--disable-libgomp \
|
||||
--disable-libatomic
|
||||
|
||||
make -j12
|
||||
make -j$(nproc)
|
||||
make install
|
||||
cd ../..
|
||||
|
||||
#######################################
|
||||
# STRIP
|
||||
#######################################
|
||||
echo "== Strip toolchain =="
|
||||
cd "${TOP}"
|
||||
|
||||
# ==================================================================
|
||||
# Strip и упаковка
|
||||
# ==================================================================
|
||||
echo "== Strip toolchain и упаковка =="
|
||||
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
|
||||
find $WDIR -type f -exec strip -p {} \; > /dev/null 2>&1
|
||||
find $WDIR -exec install/bin/${TARGET}-strip -p {} \; > /dev/null 2>&1
|
||||
cp -a install/* "$WDIR"/
|
||||
find "$WDIR" -type f -executable -exec strip -p {} \; 2>/dev/null || true
|
||||
|
||||
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
|
||||
[[ $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
|
||||
[[ $REPLY =~ ^[Yy]$ ]] && rm -rf build && echo "Временные файлы удалены."
|
||||
|
||||
echo ""
|
||||
echo "== Сборка завершена полностью =="
|
||||
echo "== Сборка полностью завершена! =="
|
||||
Reference in New Issue
Block a user