- 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.
183 lines
6.4 KiB
Bash
Executable File
183 lines
6.4 KiB
Bash
Executable File
#!/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 |