Compare commits

...

2 Commits

4 changed files with 101 additions and 54 deletions

View File

@@ -4,20 +4,24 @@ set -e
# Подготавливаем переменные # Подготавливаем переменные
TOP="$(pwd)" TOP="$(pwd)"
INSTALL_DIR="${TOP}/install" INSTALL_DIR="${TOP}/build/install"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin" INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
# Запускаем предварительно для того чтобы подтянуть переменные # Запускаем предварительно для того чтобы подтянуть переменные
. ./env.sh "${INSTALL_BIN_DIR}" . ./env.sh "${INSTALL_BIN_DIR}"
# Сбрасываем CFLAGS/CXXFLAGS — все флаги уже встроены в CC/CXX
export CFLAGS=""
export CXXFLAGS=""
# Подготавливаем пути к разделам # Подготавливаем пути к разделам
LIB_DIR="${TOP}/lib" LIB_DIR="${TOP}/src/libs"
SYSROOT_DIR="${INSTALL_DIR}${SYSROOT}" SYSROOT_DIR="${INSTALL_DIR}${SYSROOT}"
SYSROOT_ETC_DIR="${SYSROOT_DIR}/etc" SYSROOT_ETC_DIR="${SYSROOT_DIR}/etc"
SYSROOT_USR_DIR="${SYSROOT_DIR}/usr" SYSROOT_USR_DIR="${SYSROOT_DIR}/usr"
BUILD_SRC_DIR="${TOP}/build" BUILD_SRC_DIR="${TOP}/build"
LIB_BUILD_DIR="${BUILD_SRC_DIR}/lib" LIB_BUILD_DIR="${BUILD_SRC_DIR}/src/libs"
# ================================================================== # ==================================================================
# Проверка файла окружения # Проверка файла окружения
@@ -72,7 +76,9 @@ echo "== Распаковка завершена =="
# ================================================================== # ==================================================================
cd ${TOP} cd ${TOP}
./env.sh "${INSTALL_BIN_DIR}" "rc" . ./env.sh "${INSTALL_BIN_DIR}" "rc"
export CFLAGS=""
export CXXFLAGS=""
cd "${LIB_BUILD_DIR}/zlib-1.2.13" cd "${LIB_BUILD_DIR}/zlib-1.2.13"
./configure --prefix=${SYSROOT_USR_DIR} --libdir=${SYSROOT_USR_DIR}/lib --static ./configure --prefix=${SYSROOT_USR_DIR} --libdir=${SYSROOT_USR_DIR}/lib --static
@@ -82,7 +88,9 @@ make install
# ================================================================== # ==================================================================
cd ${TOP} cd ${TOP}
./env.sh "${INSTALL_BIN_DIR}" . ./env.sh "${INSTALL_BIN_DIR}"
export CFLAGS=""
export CXXFLAGS=""
cd "${LIB_BUILD_DIR}/openssl-3.0.13" cd "${LIB_BUILD_DIR}/openssl-3.0.13"
./Configure linux-armv4 \ ./Configure linux-armv4 \

View File

@@ -15,7 +15,7 @@ PKG_UCLIBC="uClibc-ng"
BINUTILS_VER="2.42" BINUTILS_VER="2.42"
GCC_VER="13.4.0" GCC_VER="13.4.0"
LINUX_VER="4.9.224" LINUX_VER="4.9.224"
UCLIBC_VER="1.0.55" UCLIBC_VER="1.0.34"
# ================================================================== # ==================================================================
# Основные параметры тулчейна # Основные параметры тулчейна
@@ -27,8 +27,9 @@ SUBMODE="thumb"
TOP="$(pwd)" TOP="$(pwd)"
CONFIGS_DIR="${TOP}/config" CONFIGS_DIR="${TOP}/config"
SRC_DIR="${TOP}/src/toolchain"
BUILD_DIR="${TOP}/build" BUILD_DIR="${TOP}/build"
BUILD_SRC_DIR="${TOP}/src" BUILD_SRC_DIR="${BUILD_DIR}/src/toolchain"
INSTALL_DIR="${BUILD_DIR}/install" INSTALL_DIR="${BUILD_DIR}/install"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin" 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}" SRC_UCLIBC="${BUILD_SRC_DIR}/${PKG_UCLIBC}-${UCLIBC_VER}"
# ================================================================== # ==================================================================
echo "== Создание директорий ==" echo "== Очистка и создание директорий =="
rm -rf "${BUILD_DIR}"
mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}" mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}"
echo "== Распаковка архивов в ${BUILD_SRC_DIR} ==" echo "== Распаковка архивов из ${SRC_DIR} в ${BUILD_SRC_DIR} =="
for f in "${BUILD_SRC_DIR}"/*.tar.xz; do ARCHIVES=(
[ -f "$f" ] || { echo "Нет архивов *.tar.xz в ${BUILD_SRC_DIR}!"; exit 1; } "${SRC_DIR}/${PKG_BINUTILS}-${BINUTILS_VER}.tar.xz"
echo " * $f" "${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}" tar -xf "$f" -C "${BUILD_SRC_DIR}"
done done
@@ -67,16 +86,17 @@ done
# BINUTILS # BINUTILS
# ================================================================== # ==================================================================
echo "== Сборка binutils-${BINUTILS_VER} ==" echo "== Сборка binutils-${BINUTILS_VER} =="
mkdir -p build/binutils && cd build/binutils mkdir -p "${BUILD_DIR}/binutils" && cd "${BUILD_DIR}/binutils"
"${SRC_BINUTILS}/configure" \ "${SRC_BINUTILS}/configure" \
--target="${TARGET}" \ --target="${TARGET}" \
--prefix="${INSTALL_DIR}" \ --prefix="${INSTALL_DIR}" \
--with-sysroot="${KERNEL_SYSROOT_DIR}" \ --with-sysroot="${KERNEL_SYSROOT_DIR}" \
--disable-nls \ --disable-nls \
--without-bugurl \ --without-bugurl \
--disable-werror --disable-werror \
make -j$(nproc) all MAKEINFO=true
make install make -j$(nproc) MAKEINFO=true all
make MAKEINFO=true install
cd "${TOP}" cd "${TOP}"
# ================================================================== # ==================================================================
@@ -88,7 +108,7 @@ cd "${SRC_GCC}"
./contrib/download_prerequisites ./contrib/download_prerequisites
cd "${TOP}" cd "${TOP}"
mkdir -p build/gcc1 && cd build/gcc1 mkdir -p "${BUILD_DIR}/gcc1" && cd "${BUILD_DIR}/gcc1"
"${SRC_GCC}/configure" \ "${SRC_GCC}/configure" \
--target="${TARGET}" \ --target="${TARGET}" \
--prefix="${INSTALL_DIR}" \ --prefix="${INSTALL_DIR}" \
@@ -121,14 +141,14 @@ cd "${TOP}"
# ================================================================== # ==================================================================
echo "== Установка заголовков linux-${LINUX_VER} ==" echo "== Установка заголовков linux-${LINUX_VER} =="
mkdir -p build/kernelheader mkdir -p "${BUILD_DIR}/kernelheader"
cd "${SRC_LINUX}" cd "${SRC_LINUX}"
PATH="${INSTALL_BIN_DIR}:${PATH}" \ PATH="${INSTALL_BIN_DIR}:${PATH}" \
make 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="${BUILD_DIR}/kernelheader" \
headers_install headers_install
cd "${TOP}" cd "${TOP}"
@@ -164,7 +184,7 @@ cd "${TOP}"
# GCC FINAL (C + C++) # GCC FINAL (C + C++)
# ================================================================== # ==================================================================
echo "== Сборка финального GCC-${GCC_VER} (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" \ "${SRC_GCC}/configure" \
--target="${TARGET}" \ --target="${TARGET}" \
--prefix="${INSTALL_DIR}" \ --prefix="${INSTALL_DIR}" \
@@ -196,11 +216,11 @@ cd "${TOP}"
# ================================================================== # ==================================================================
echo "== Strip toolchain и упаковка ==" echo "== Strip toolchain и упаковка =="
cd ${TOP} cd "${TOP}"
WDIR=$(mktemp -d) WDIR=$(mktemp -d)
trap 'rm -rf "$WDIR"' EXIT 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 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" . 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
echo "=== Управление архивами и очистка ===" echo "=== Управление архивами и очистка ==="
read -p "Удалить исходники (*.tar.xz)? (y/N): " -n 1 -r REPLY; echo read -p "Удалить исходники (src/)? (y/N): " -n 1 -r REPLY; echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -f *.tar.xz && echo "Исходные архивы удалены." [[ $REPLY =~ ^[Yy]$ ]] && rm -rf "${SRC_DIR}" && echo "Директория исходников удалена."
read -p "Удалить директории сборки (build/, install/)? (y/N): " -n 1 -r REPLY; echo read -p "Удалить директорию сборки (build/)? (y/N): " -n 1 -r REPLY; echo
[[ $REPLY =~ ^[Yy]$ ]] && rm -rf build install && echo "Директории сборки удалены." [[ $REPLY =~ ^[Yy]$ ]] && rm -rf "${BUILD_DIR}" && echo "Директория сборки удалена."
echo echo
echo "== Сборка полностью завершена! ==" echo "== Сборка полностью завершена! =="

View File

@@ -1,45 +1,63 @@
#!/bin/bash #!/bin/bash
# Создаем папку src, если она не существует # Создаем папки для исходников
mkdir -p src mkdir -p src/toolchain src/libs
# Переходим в папку src # Функция загрузки файлов в указанную папку
cd src || exit 1 download_files() {
local target_dir="$1"
shift
local urls=("$@")
# Массив с URL файлов для загрузки cd "$target_dir" || exit 1
files=(
for url in "${urls[@]}"; do
filename=$(basename "$url")
if [ -f "$filename" ]; then
echo "⊘ Пропускаю (уже загружен): $filename"
continue
fi
echo "Загружаю: $filename"
wget -q --show-progress "$url"
if [ $? -eq 0 ]; then
echo "✓ Успешно: $filename"
else
echo "✗ Ошибка при загрузке: $filename"
fi
done
cd - > /dev/null
}
# Исходники тулчейна
toolchain_files=(
"https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz" "https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz"
"https://ftp.gnu.org/gnu/gcc/gcc-13.4.0/gcc-13.4.0.tar.xz" "https://ftp.gnu.org/gnu/gcc/gcc-13.4.0/gcc-13.4.0.tar.xz"
"https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.224.tar.xz" "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.224.tar.xz"
"https://downloads.uclibc-ng.org/releases/1.0.34/uClibc-ng-1.0.34.tar.xz" "https://downloads.uclibc-ng.org/releases/1.0.34/uClibc-ng-1.0.34.tar.xz"
)
# Исходники библиотек
libs_files=(
"https://download.savannah.gnu.org/releases/freetype/freetype-2.13.2.tar.gz" "https://download.savannah.gnu.org/releases/freetype/freetype-2.13.2.tar.gz"
"https://github.com/LibVNC/libvncserver/archive/LibVNCServer-0.9.14.tar.gz" "https://github.com/LibVNC/libvncserver/archive/LibVNCServer-0.9.14.tar.gz"
"https://www.openssl.org/source/openssl-3.0.13.tar.gz" "https://www.openssl.org/source/openssl-3.0.13.tar.gz"
"https://zlib.net/fossils/zlib-1.2.13.tar.gz" "https://zlib.net/fossils/zlib-1.2.13.tar.gz"
) )
echo "Начинаю загрузку файлов в папку 'src'..." echo "=== Загрузка исходников тулчейна в 'src/toolchain' ==="
download_files src/toolchain "${toolchain_files[@]}"
# Загружаем каждый файл echo ""
for url in "${files[@]}"; do echo "=== Загрузка исходников библиотек в 'src/libs' ==="
filename=$(basename "$url") download_files src/libs "${libs_files[@]}"
if [ -f "$filename" ]; then
echo "⊘ Пропускаю (уже загружен): $filename"
continue
fi
echo "Загружаю: $filename"
wget -q --show-progress "$url"
if [ $? -eq 0 ]; then
echo "✓ Успешно: $filename"
else
echo "✗ Ошибка при загрузке: $filename"
fi
done
echo "" echo ""
echo "Загрузка завершена!" echo "Загрузка завершена!"
echo "Файлы сохранены в папку: $(pwd)"
echo "" echo ""
echo "Список загруженных файлов:" echo "Тулчейн (src/toolchain):"
ls -la *.tar.* ls -la src/toolchain/*.tar.* 2>/dev/null
echo ""
echo "Библиотеки (src/libs):"
ls -la src/libs/*.tar.* 2>/dev/null

5
env.sh
View File

@@ -24,7 +24,8 @@ CC="${TOOLCHAIN_PATH}/${TOOLCHAIN}-gcc ${CFLAGS_TOOLSET} ${CFLAGS_TARGET}"
CXX="${TOOLCHAIN_PATH}/${TOOLCHAIN}-g++ ${CFLAGS_TOOLSET} ${CXXFLAGS_TARGET}" CXX="${TOOLCHAIN_PATH}/${TOOLCHAIN}-g++ ${CFLAGS_TOOLSET} ${CXXFLAGS_TARGET}"
CPP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-cpp" CPP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-cpp"
LD="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ld" LD="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ld"
AR="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ar ${ARFLAGS_TARGET}" AR="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ar"
ARFLAGS="${ARFLAGS_TARGET}"
AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as" AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as"
NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm" NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm"
RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib" RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib"
@@ -40,7 +41,7 @@ export SYSROOT
export PREFIX export PREFIX
export TARGET export TARGET
export TOOLCHAIN export TOOLCHAIN
export CC CXX CPP LD AR AS NM RANLIB STRIP OBJCOPY OBJDUMP export CC CXX CPP LD AR ARFLAGS AS NM RANLIB STRIP OBJCOPY OBJDUMP
export CFLAGS CXXFLAGS LDFLAGS export CFLAGS CXXFLAGS LDFLAGS
export CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET export CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET
export PATH export PATH