Compare commits

...

2 Commits

Author SHA1 Message Date
96056d2f56 Some paths have been fixed 2025-12-04 14:06:18 +03:00
9168b85705 Added a separate directory for building 2025-12-04 13:07:54 +03:00
2 changed files with 84 additions and 67 deletions

2
.gitignore vendored
View File

@@ -1 +1,3 @@
build
install
*.tar.xz *.tar.xz

View File

@@ -4,6 +4,15 @@ set -e
TARGET=arm-uclinuxfdpiceabi TARGET=arm-uclinuxfdpiceabi
TOP="$(pwd)" 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_TOOLSET='-O2'
CFLAGS_TARGET='-Os -mthumb' CFLAGS_TARGET='-Os -mthumb'
CFLAGS=$CFLAGS_TOOLSET CFLAGS_FOR_TARGET=$CFLAGS_TARGET CFLAGS=$CFLAGS_TOOLSET CFLAGS_FOR_TARGET=$CFLAGS_TARGET
@@ -13,49 +22,59 @@ SUBARCH=armv7-m
SUBMODE=thumb SUBMODE=thumb
echo "== Создание директорий ==" echo "== Создание директорий =="
mkdir -p install mkdir -p ${KERNEL_SYSROOT_DIR}
mkdir -p install/sysroot mkdir -p ${BUILD_SRC_DIR}
echo "== Распаковка архивов ==" #######################################
# РАСПАКОВКА В build/src
#######################################
echo "== Распаковка архивов в build/src =="
for f in *.tar.xz; do for f in *.tar.xz; do
echo " * $f" echo " * $f"
tar -xf "$f" tar -xf "$f" -C ${BUILD_SRC_DIR}
done done
############### # Пути на исходники
# BINUTILS SRC_BINUTILS="${BUILD_SRC_DIR}/binutils-2.34"
############### SRC_GCC="${BUILD_SRC_DIR}/gcc-13.4.0"
echo "== Сборка binutils ==" SRC_LINUX="${BUILD_SRC_DIR}/linux-4.9.224"
mkdir -p build-binutils SRC_UCLIBC="${BUILD_SRC_DIR}/uClibc-ng-1.0.34"
cd build-binutils
../binutils-2.34/configure \ #######################################
# BINUTILS
#######################################
echo "== Сборка binutils =="
mkdir -p build/binutils
cd build/binutils
$SRC_BINUTILS/configure \
--target=${TARGET} \ --target=${TARGET} \
--prefix=${TOP}/install \ --prefix=${INSTALL_DIR} \
--with-sysroot=${TOP}/install/sysroot \ --with-sysroot=${KERNEL_SYSROOT_DIR} \
--disable-nls \ --disable-nls \
--without-bugurl \ --without-bugurl \
--disable-werror --disable-werror
make -j12 make -j12
make install make install
cd .. cd ../..
############### #######################################
# GCC STAGE 1 # GCC STAGE 1
############### #######################################
echo "== Сборка GCC Stage 1 ==" echo "== Сборка GCC Stage 1 =="
cd gcc-13.4.0 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
../gcc-13.4.0/configure \ $SRC_GCC/configure \
--target=${TARGET} \ --target=${TARGET} \
--prefix=${TOP}/install \ --prefix=${INSTALL_DIR} \
--with-arch=${SUBARCH} \ --with-arch=${SUBARCH} \
--with-mode=${SUBMODE} \ --with-mode=${SUBMODE} \
--without-headers \ --without-headers \
@@ -75,45 +94,53 @@ cd build-gcc1
make -j12 make -j12
make install make install
cd .. cd ../..
############### #######################################
# LINUX HEADERS # LINUX HEADERS
############### #######################################
echo "== Установка заголовков linux ==" echo "== Установка заголовков linux =="
cd linux-4.9.224 mkdir -p build/kernelheader
PATH=${TOP}/install/bin:${PATH} \ cd $SRC_LINUX
PATH=${INSTALL_BIN_DIR}:${PATH} \
make headers_install ARCH=arm \ make headers_install ARCH=arm \
INSTALL_HDR_PATH=${TOP}/install/sysroot/usr \ INSTALL_HDR_PATH=${KERNEL_SYSROOT_USR_DIR} \
CROSS_COMPILE=${TARGET}- \ CROSS_COMPILE=${TARGET}- \
O=${TOP}/build/kernelheader O=${TOP}/build/kernelheader
cd ..
############### cd ../../..
#######################################
# UCLIBC # UCLIBC
############### #######################################
echo "== Сборка uClibc ==" echo "== Сборка uClibc =="
cd uClibc-ng-1.0.34 cd $SRC_UCLIBC
# TODO: конфигурировать или вставить .config при необходимости
# Удаляем старое значение
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 all -j12
PATH=${TOP}/install/bin:${PATH} make PREFIX=${TOP}/install/sysroot install PATH=${TOP}/install/bin:${PATH} make PREFIX=${KERNEL_SYSROOT_DIR} install
cd .. cd ../../..
############### #######################################
# GCC FINAL # GCC FINAL
############### #######################################
echo "== Сборка финального GCC ==" echo "== Сборка финального GCC =="
mkdir -p build-gcc2 mkdir -p build/gcc2
cd build-gcc2 cd build/gcc2
../gcc-13.4.0/configure \ $SRC_GCC/configure \
--target=${TARGET} \ --target=${TARGET} \
--prefix=${TOP}/install \ --prefix=${INSTALL_DIR} \
--with-sysroot=${TOP}/install/sysroot \ --with-sysroot=${KERNEL_SYSROOT_DIR} \
--with-arch=${SUBARCH} \ --with-arch=${SUBARCH} \
--with-mode=${SUBMODE} \ --with-mode=${SUBMODE} \
--enable-languages=c,c++ \ --enable-languages=c,c++ \
@@ -127,11 +154,11 @@ cd build-gcc2
make -j12 make -j12
make install make install
cd .. cd ../..
############### #######################################
# STRIP # STRIP
############### #######################################
echo "== Strip toolchain ==" echo "== Strip toolchain =="
WDIR=$(mktemp -d) WDIR=$(mktemp -d)
@@ -141,38 +168,26 @@ 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 -type f -exec strip -p {} \; > /dev/null 2>&1
find $WDIR -exec install/bin/${TARGET}-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 . tar -C "$WDIR" --atime-preserve -cJf "toolset-jlv-${SUBARCH}.tar.xz" .
echo "== Готово ==" echo "== Готово =="
############### #######################################
# CLEAR # УПРАВЛЕНИЕ АРХИВАМИ
############### #######################################
echo "" echo ""
echo "=== Управление архивами ===" echo "=== Управление архивами ==="
echo "Собрана тулчейн: toolset-jlv-${SUBARCH}.tgz" echo "Собран тулчейн: toolset-jlv-${SUBARCH}.tar.xz"
read -p "Удалить исходные архивы (*.tar.xz)? (y/N): " -n 1 -r read -p "Удалить исходные архивы (*.tar.xz)? (y/N): " -n 1 -r
echo echo
if [[ $REPLY =~ ^[Yy]$ ]]; then [[ $REPLY =~ ^[Yy]$ ]] && rm -f *.tar.xz && echo "Архивы удалены."
echo "Удаление архивов..."
rm -f *.tar.xz
echo "Архивы удалены."
else
echo "Архивы сохранены."
fi
echo "" echo ""
echo "=== Очистка временных файлов ===" echo "=== Очистка временных файлов ==="
read -p "Удалить директории сборки (build-*, исходники)? (y/N): " -n 1 -r read -p "Удалить директории сборки (build/src и build/*)? (y/N): " -n 1 -r
echo echo
if [[ $REPLY =~ ^[Yy]$ ]]; then [[ $REPLY =~ ^[Yy]$ ]] && rm -rf build && echo "Временные файлы удалены."
echo "Удаление временных директорий..."
rm -rf build-* binutils-* gcc-* linux-* uClibc-*
echo "Временные файлы удалены."
else
echo "Временные файлы сохранены."
fi
echo "" echo ""
echo "== Сборка завершена полностью ==" echo "== Сборка завершена полностью =="