#!/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 --static 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 \ no-mdc2 no-rc5 no-ec2m no-sm2 no-sm4 no-ssl3 \ 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 \ -DCMAKE_BUILD_TYPE=Release \ -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 # ================================================================== cd "${LIB_BUILD_DIR}/freetype-2.13.2" [ -d "build" ] && rm -rf build mkdir -p build && cd build cmake -S .. -B . \ -DCMAKE_BUILD_TYPE=Release \ -DFT_DISABLE_HARFBUZZ=ON \ -DBUILD_SHARED_LIBS=OFF \ -DFT_DISABLE_BROTLI=ON \ -DFT_DISABLE_BZIP2=ON \ -DFT_DISABLE_PNG=ON \ -DFT_DISABLE_DOCS=ON \ -DFT_DISABLE_TESTS=ON \ -DCMAKE_INSTALL_PREFIX="${SYSROOT_USR_DIR}" \ -DCMAKE_FIND_ROOT_PATH="${SYSROOT_DIR}" \ -DCMAKE_SYSROOT="${SYSROOT_DIR}" \ -DCMAKE_STAGING_PREFIX="${SYSROOT_USR_DIR}" \ -DZLIB_LIBRARY="${SYSROOT_USR_DIR}/lib/libz.a" \ -DZLIB_INCLUDE_DIR="${SYSROOT_USR_DIR}/include" \ -DZLIB_USE_STATIC=ON make -j$(nproc) make install