Files
build-toolchain/build-libraries.sh
Egor Tsyganchuk 082098c9ec Add libnl support and update prerequisites in build scripts
- Enhanced build-libraries.sh to configure and build libnl version 3.2.0, including checks for required tools like flex and bison.
- Updated download_prerequisites.sh to include the download link for libnl.
- Modified README.md to document the addition of libnl and its dependencies.
- Set LIBNL_VER to 3.2.0 in versions.sh for consistency across scripts.
2026-04-06 14:56:50 +03:00

207 lines
7.0 KiB
Bash
Executable File
Raw Permalink 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
# ==================================================================
cd "${LIB_BUILD_DIR}/libnl-${LIBNL_VER}"
if ! command -v flex >/dev/null 2>&1; then
echo "Ошибка: для сборки libnl нужен flex (пакет flex)."
exit 1
fi
if ! command -v bison >/dev/null 2>&1; then
echo "Ошибка: для сборки libnl нужен bison (byacc не подходит)."
exit 1
fi
export YACC="bison -y"
export LEX="flex"
./configure \
--host="${TARGET}" \
--prefix="${SYSROOT_USR_DIR}" \
--libdir="${SYSROOT_USR_DIR}/lib" \
--disable-shared \
--enable-static \
--disable-cli
make -j$(nproc)
make install
unset YACC LEX
# ==================================================================
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