From 54555cee39c7d8757f547b1f75a6bb6170d7da97 Mon Sep 17 00:00:00 2001 From: Egor Tsyganchuk Date: Fri, 5 Dec 2025 14:06:28 +0300 Subject: [PATCH] Added build-libraries.sh --- build-libraries.sh | 116 +++++++++++++++++++++++++++++++++++++++++++++ build-toolchain.sh | 6 +++ env.sh | 6 ++- 3 files changed, 126 insertions(+), 2 deletions(-) create mode 100755 build-libraries.sh diff --git a/build-libraries.sh b/build-libraries.sh new file mode 100755 index 0000000..eee1465 --- /dev/null +++ b/build-libraries.sh @@ -0,0 +1,116 @@ +#!/bin/bash +set -e + +# Подготавливаем переменные + +TOP="$(pwd)" +INSTALL_DIR="${TOP}/install" +INSTALL_BIN_DIR="${INSTALL_DIR}/bin" + +# Запускаем предварительно для того чтобы подтянуть переменные +. ./env.sh "${INSTALL_BIN_DIR}" + +# Подготавливаем пути к разделам + +LIB_DIR="${TOP}/lib" +SYSROOT_DIR="${INSTALL_DIR}${SYSROOT}" +SYSROOT_ETC_DIR="${SYSROOT_DIR}/etc" +SYSROOT_USR_DIR="${SYSROOT_DIR}/usr" +BUILD_SRC_DIR="${TOP}/build" +LIB_BUILD_DIR="${BUILD_SRC_DIR}/lib" + +# ================================================================== +# Проверка файла окружения +# ================================================================== + +# Проверяем существует ли файл +if [ ! -f ./env.sh ]; then + echo "Ошибка: файл env.sh не найден" + exit 1 +fi + +# Проверяем имеет ли файл права на исполнение +if [ ! -x ./env.sh ]; then + echo "env.sh не имеет права на выполнение, добавляю..." + chmod +x ./env.sh || { echo "Не удалось установить права"; exit 1; } +fi + +# ================================================================== +# Распаковка библиотек +# ================================================================== + +echo "== Распаковка библиотек ==" + +# Создаем каталог для сборки библиотек +mkdir -p "${LIB_BUILD_DIR}" + +echo "== Поиск и распаковка архивов в ${LIB_DIR} ==" + +# Проходимся по *.tar.xz и *.tar.gz +shopt -s nullglob +for archive in "${LIB_DIR}"/*.tar.xz "${LIB_DIR}"/*.tar.gz; do + # Если файлов нет – ничего не делаем + [ -e "$archive" ] || continue + + fname="$(basename "$archive")" + pkg="${fname%.tar.*}" # имя папки после распаковки + + echo "--------------------------------------" + echo "Найден архив: $fname" + echo "Распаковка в: ${LIB_BUILD_DIR}/${pkg}" + echo "--------------------------------------" + + mkdir -p "${LIB_BUILD_DIR}/${pkg}" + tar -xf "$archive" -C "${LIB_BUILD_DIR}/${pkg}" --strip-components=1 +done +shopt -u nullglob + +echo "== Распаковка завершена ==" + +# ================================================================== +# Установка окружения +# ================================================================== + +cd ${TOP} +./env.sh "${INSTALL_BIN_DIR}" "rc" + +cd "${LIB_BUILD_DIR}/zlib-1.2.13" +./configure --prefix=${SYSROOT_USR_DIR} --libdir=${SYSROOT_USR_DIR}/lib +make -j$(nproc) +make install + +# ================================================================== + +cd ${TOP} +./env.sh "${INSTALL_BIN_DIR}" + +cd "${LIB_BUILD_DIR}/openssl-3.0.13" +./Configure linux-armv4 \ + --prefix=${SYSROOT_USR_DIR} \ + --libdir=${SYSROOT_USR_DIR}/lib \ + --openssldir=${SYSROOT_ETC_DIR}/ssl \ + shared no-async no-comp no-idea no-tests no-threads no-asm no-secure-memory no-seed no-weak-ssl-ciphers \ + -DNO_FORK -DHAVE_FORK=0 + +make -j$(nproc) build_libs +make install_dev + +# ================================================================== + +cd "${LIB_BUILD_DIR}/LibVNCServer-0.9.14" +rm -rf build +mkdir -p build && cd build +cmake -S .. -B . \ + -DWITH_THREADS=OFF \ + -DWITH_TESTS=OFF \ + -DWITH_EXAMPLES=OFF \ + -DBUILD_SHARED_LIBS=ON \ + -DOPENSSL_ROOT_DIR="${SYSROOT_USR_DIR}" \ + -DOPENSSL_LIBRARIES="${SYSROOT_USR_DIR}/lib/libssl.so;${SYSROOT_USR_DIR}/lib/libcrypto.so" \ + -DOPENSSL_INCLUDE_DIR="${SYSROOT_USR_DIR}/include" \ + -DCMAKE_FIND_ROOT_PATH="${SYSROOT_DIR}" \ + -DCMAKE_SYSROOT="${SYSROOT_DIR}" \ + -DCMAKE_STAGING_PREFIX="${SYSROOT_USR_DIR}" + +make -j${nproc} +make install \ No newline at end of file diff --git a/build-toolchain.sh b/build-toolchain.sh index 66be598..7245550 100755 --- a/build-toolchain.sh +++ b/build-toolchain.sh @@ -183,6 +183,12 @@ make -j$(nproc) make install cd "${TOP}" +# ================================================================== +# Установка библиотек +# ================================================================== + +. ./build_libraries.sh + # ================================================================== # Strip и упаковка # ================================================================== diff --git a/env.sh b/env.sh index a36d398..1948277 100755 --- a/env.sh +++ b/env.sh @@ -15,11 +15,12 @@ if [ ! -d "$TOOLCHAIN_PATH" ]; then exit 1 fi -PREFIX="${TOOLCHAIN_ROOT}/sysroot/usr" +SYSROOT="${TOOLCHAIN_ROOT}/sysroot" +PREFIX="${SYSROOT}/usr" # Флаги тулчейна CFLAGS_TOOLSET='-O2' -ARFLAGS_TARGET="" +ARFLAGS_TARGET="${2:-}" CFLAGS_TARGET='-Os -mthumb' CXXFLAGS_TARGET=$CFLAGS_TARGET LDFLAGS_TARGET='-Wl,--fdpic' @@ -41,6 +42,7 @@ OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump" PATH="${TOOLCHAIN_PATH}:${PATH}" # Экспорт +export SYSROOT export PREFIX export TARGET export TOOLCHAIN