From fa5c892ccea48f93ddc0421bb0633c2032344a0d Mon Sep 17 00:00:00 2001 From: Egor Tsyganchuk Date: Tue, 31 Mar 2026 17:20:11 +0300 Subject: [PATCH] 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. --- build-libraries.sh | 71 +++++++++++++++++++++++----------------------- env.sh | 64 ++++++----------------------------------- 2 files changed, 44 insertions(+), 91 deletions(-) diff --git a/build-libraries.sh b/build-libraries.sh index 4c6f197..5a8edef 100755 --- a/build-libraries.sh +++ b/build-libraries.sh @@ -9,13 +9,38 @@ 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" -# Запускаем предварительно для того чтобы подтянуть переменные -. ./env.sh --global --path "${INSTALL_DIR}" - -# Сбрасываем CFLAGS/CXXFLAGS — все флаги уже встроены в CC/CXX +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}" # Подготавливаем пути к разделам @@ -25,22 +50,6 @@ SYSROOT_USR_DIR="${SYSROOT_DIR}/usr" BUILD_SRC_DIR="${TOP}/build" LIB_BUILD_DIR="${BUILD_SRC_DIR}/src/libs" -# ================================================================== -# Проверка файла окружения -# ================================================================== - -# Проверяем существует ли файл -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 - # ================================================================== # Распаковка библиотек # ================================================================== @@ -73,15 +82,6 @@ shopt -u nullglob echo "== Распаковка завершена ==" -# ================================================================== -# Установка окружения -# ================================================================== - -cd "${TOP}" -. ./env.sh --global --path "${INSTALL_DIR}" -export CFLAGS="" -export CXXFLAGS="" - cd "${LIB_BUILD_DIR}/zlib-${ZLIB_VER}" ./configure --prefix=${SYSROOT_USR_DIR} --libdir=${SYSROOT_USR_DIR}/lib --static make -j$(nproc) @@ -89,11 +89,6 @@ make install # ================================================================== -cd "${TOP}" -. ./env.sh --global --path "${INSTALL_DIR}" -export CFLAGS="" -export CXXFLAGS="" - OPENSSL_S_SERVER_FILE="${LIB_BUILD_DIR}/openssl-${OPENSSL_VER}/apps/s_server.c" if [ -f "${OPENSSL_S_SERVER_FILE}" ] && ! grep -q '^#include $' "${OPENSSL_S_SERVER_FILE}"; then echo "== Патч OpenSSL: добавляю в apps/s_server.c ==" @@ -179,4 +174,10 @@ make install # ================================================================== -cd "${TOP}" \ No newline at end of file +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 \ No newline at end of file diff --git a/env.sh b/env.sh index e48e85d..12951db 100755 --- a/env.sh +++ b/env.sh @@ -1,58 +1,10 @@ -TOP="$(pwd)" -TOOLCHAIN_PATH="" -GLOBAL_MODE=0 -CUSTOM_PATH="" -while [ $# -gt 0 ]; do - case "$1" in - --global) - GLOBAL_MODE=1 - shift - ;; - --path) - if [ -z "$2" ]; then - echo "Ошибка: для --path нужно указать путь" - return 1 2>/dev/null || exit 1 - fi - CUSTOM_PATH="$2" - shift 2 - ;; - *) - shift - ;; - esac -done +TOP=`pwd` +TARGET=arm-uclinuxfdpiceabi +CFLAGS_TOOLSET='-O2' +CFLAGS_TARGET='-Os -mthumb' +CFLAGS=$CFLAGS_TOOLSET CFLAGS_FOR_TARGET=$CFLAGS_TARGET CXXFLAGS_FOR_TARGET=$CFLAGS_TARGET +SUBARCH=armv7-m +SUBMODE=thumb +PATH=${TOP}/${TARGET}/bin:${PATH} -if [ -n "${CUSTOM_PATH}" ]; then - TOOLCHAIN_PATH="${CUSTOM_PATH}" -elif [ -d "${TOP}/arm-uclinuxfdpiceabi" ]; then - TOOLCHAIN_PATH="${TOP}/arm-uclinuxfdpiceabi" -elif [ -d "${TOP}/build/install" ]; then - TOOLCHAIN_PATH="${TOP}/build/install" -fi - -if [ -n "${TOOLCHAIN_PATH}" ] && [ -x "${TOOLCHAIN_PATH}/bin/arm-uclinuxfdpiceabi-gcc" ]; then - echo "Найден toolchain: ${TOOLCHAIN_PATH}/bin/arm-uclinuxfdpiceabi-gcc" - - CFLAGS_TOOLSET='-O2' - CFLAGS_TARGET='-Os -mthumb' - SUBARCH=armv7-m - SUBMODE=thumb - - if [ "$GLOBAL_MODE" -eq 1 ]; then - export CFLAGS="${CFLAGS_TOOLSET}" - export CFLAGS_FOR_TARGET="${CFLAGS_TARGET}" - export CXXFLAGS_FOR_TARGET="${CFLAGS_TARGET}" - export SUBARCH - export SUBMODE - export PATH="${TOOLCHAIN_PATH}/bin:${PATH}" - else - CFLAGS="${CFLAGS_TOOLSET}" - CFLAGS_FOR_TARGET="${CFLAGS_TARGET}" - CXXFLAGS_FOR_TARGET="${CFLAGS_TARGET}" - PATH="${TOOLCHAIN_PATH}/bin:${PATH}" - fi -else - echo "Ошибка: не найден ${TOOLCHAIN_PATH}/bin/arm-uclinuxfdpiceabi-gcc" - return 1 2>/dev/null || exit 1 -fi \ No newline at end of file