Files
build-toolchain/build-libraries.sh
Egor Tsyganchuk fa5c892cce Enhance build-libraries.sh and env.sh for improved toolchain configuration
- Updated build-libraries.sh to set up environment variables for the arm-uclinuxfdpiceabi toolchain, including compiler flags and paths.
- Removed the dependency on env.sh for initial environment setup, simplifying the script logic.
- Streamlined the export and unset of environment variables to ensure a clean build environment.
- Adjusted the handling of CFLAGS and related variables for better clarity and consistency in the build process.
2026-03-31 17:20:11 +03:00

183 lines
6.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
source "$(dirname "$0")/versions.sh"
# Подготавливаем переменные
TOP="$(pwd)"
INSTALL_DIR="${TOP}/build/install"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
SYSROOT_DIR="${INSTALL_DIR}/sysroot"
TARGET="arm-uclinuxfdpiceabi"
TOOLCHAIN="${TARGET}"
TOOLCHAIN_PATH="${INSTALL_DIR}/bin"
CFLAGS_TOOLSET='-O2'
CFLAGS_TARGET='-Os -mthumb'
_ORIG_PATH="$PATH"
export SYSROOT="${SYSROOT_DIR}"
export PREFIX="${SYSROOT_DIR}/usr"
export TARGET TOOLCHAIN TOOLCHAIN_PATH
export CC="${TOOLCHAIN_PATH}/${TOOLCHAIN}-gcc ${CFLAGS_TOOLSET} ${CFLAGS_TARGET}"
export CXX="${TOOLCHAIN_PATH}/${TOOLCHAIN}-g++ ${CFLAGS_TOOLSET} ${CFLAGS_TARGET}"
export CPP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-cpp"
export LD="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ld"
export AR="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ar"
# Без флагов (rc) zlib/Makefile вызывает «ar libz.a …» — ar воспринимает имя архива как опции.
export ARFLAGS='rc'
export AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as"
export NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm"
export RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib"
export STRIP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-strip"
export OBJCOPY="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objcopy"
export OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump"
export CFLAGS=""
export CXXFLAGS=""
export LDFLAGS=""
export CFLAGS_FOR_TARGET="${CFLAGS_TARGET}"
export CXXFLAGS_FOR_TARGET="${CFLAGS_TARGET}"
export LDFLAGS_FOR_TARGET='-Wl,--fdpic'
export SUBARCH=armv7-m
export SUBMODE=thumb
export PATH="${TOOLCHAIN_PATH}:${_ORIG_PATH}"
# Подготавливаем пути к разделам
LIB_DIR="${TOP}/src/libs"
SYSROOT_ETC_DIR="${SYSROOT_DIR}/etc"
SYSROOT_USR_DIR="${SYSROOT_DIR}/usr"
BUILD_SRC_DIR="${TOP}/build"
LIB_BUILD_DIR="${BUILD_SRC_DIR}/src/libs"
# ==================================================================
# Распаковка библиотек
# ==================================================================
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 "${LIB_BUILD_DIR}/zlib-${ZLIB_VER}"
./configure --prefix=${SYSROOT_USR_DIR} --libdir=${SYSROOT_USR_DIR}/lib --static
make -j$(nproc)
make install
# ==================================================================
OPENSSL_S_SERVER_FILE="${LIB_BUILD_DIR}/openssl-${OPENSSL_VER}/apps/s_server.c"
if [ -f "${OPENSSL_S_SERVER_FILE}" ] && ! grep -q '^#include <sys/stat.h>$' "${OPENSSL_S_SERVER_FILE}"; then
echo "== Патч OpenSSL: добавляю <sys/stat.h> в apps/s_server.c =="
sed -i '/^#ifndef OPENSSL_NO_SOCK/i #include <sys/stat.h>' "${OPENSSL_S_SERVER_FILE}"
fi
cd "${LIB_BUILD_DIR}/openssl-${OPENSSL_VER}"
./Configure linux-armv4 \
--prefix=${SYSROOT_USR_DIR} \
--libdir=${SYSROOT_USR_DIR}/lib \
--openssldir=${SYSROOT_ETC_DIR}/ssl \
enable-legacy no-mdc2 no-rc5 no-ec2m no-sm2 no-sm4 no-ssl3 \
no-shared no-dso no-async no-comp no-idea no-tests no-threads no-asm no-secure-memory no-seed no-weak-ssl-ciphers \
no-afalgeng no-aria no-async no-bf no-blake2 no-camellia no-capieng no-cast no-chacha no-cms no-cmp no-ct \
no-dgram no-dsa no-dtls no-ecdh no-ecdsa no-engine no-err no-filenames no-gost \
no-ocsp no-pinshared no-poly1305 no-posix-io no-rc2 no-rc4 no-rdrand no-rfc3779 no-rmd160 no-scrypt no-sctp no-siphash \
no-sm3 no-srp no-srtp no-ssl-trace no-ssl3 no-ssl3-method no-ts no-whirlpool enable-ktls \
-DNO_FORK -DHAVE_FORK=0
make -j$(nproc) build_libs
make install_sw
# ==================================================================
cd "${LIB_BUILD_DIR}/LibVNCServer-${LIBVNCSERVER_VER}"
rm -rf build
mkdir -p build && cd build
cmake -S .. -B . \
-DBUILD_SHARED_LIBS=OFF \
-DWITH_THREADS=OFF \
-DWITH_TESTS=OFF \
-DWITH_EXAMPLES=OFF \
-DWITH_ZLIB=OFF \
-DWITH_LZO=OFF \
-DWITH_JPEG=OFF \
-DWITH_PNG=OFF \
-DWITH_SDL=OFF \
-DWITH_GTK=OFF \
-DWITH_LIBSSH2=OFF \
-DWITH_GNUTLS=OFF \
-DWITH_GCRYPT=OFF \
-DWITH_FFMPEG=OFF \
-DWITH_TIGHTVNC_FILETRANSFER=OFF \
-WITH_IPv6=ON \
-DWITH_WEBSOCKETS=OFF \
-DWITH_SASL=OFF \
-DWITH_OPENSSL=OFF \
-DOPENSSL_ROOT_DIR="${SYSROOT_USR_DIR}" \
-DOPENSSL_LIBRARIES="${SYSROOT_USR_DIR}/lib/libssl.a;${SYSROOT_USR_DIR}/lib/libcrypto.a" \
-DOPENSSL_INCLUDE_DIR="${SYSROOT_USR_DIR}/include" \
-DCMAKE_BUILD_TYPE=Release \
-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-${FREETYPE_VER}"
[ -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
# ==================================================================
cd "${TOP}"
export PATH="${_ORIG_PATH}"
unset SYSROOT PREFIX TARGET TOOLCHAIN TOOLCHAIN_PATH
unset CC CXX CPP LD AR ARFLAGS AS NM RANLIB STRIP OBJCOPY OBJDUMP
unset CFLAGS CXXFLAGS LDFLAGS
unset CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET
unset SUBARCH SUBMODE CFLAGS_TOOLSET CFLAGS_TARGET _ORIG_PATH