diff --git a/build-libraries.sh b/build-libraries.sh index 66eb0cc..9e28e96 100755 --- a/build-libraries.sh +++ b/build-libraries.sh @@ -8,7 +8,7 @@ INSTALL_DIR="${TOP}/build/install" INSTALL_BIN_DIR="${INSTALL_DIR}/bin" # Запускаем предварительно для того чтобы подтянуть переменные -. ./env.sh "${INSTALL_BIN_DIR}" +. ./env.sh --register "${INSTALL_BIN_DIR}" # Сбрасываем CFLAGS/CXXFLAGS — все флаги уже встроены в CC/CXX export CFLAGS="" @@ -76,7 +76,7 @@ echo "== Распаковка завершена ==" # ================================================================== cd ${TOP} -. ./env.sh "${INSTALL_BIN_DIR}" "rc" +. ./env.sh --register "${INSTALL_BIN_DIR}" "rc" export CFLAGS="" export CXXFLAGS="" @@ -88,7 +88,7 @@ make install # ================================================================== cd ${TOP} -. ./env.sh "${INSTALL_BIN_DIR}" +. ./env.sh --register "${INSTALL_BIN_DIR}" export CFLAGS="" export CXXFLAGS="" @@ -167,4 +167,9 @@ cmake -S .. -B . \ -DZLIB_USE_STATIC=ON make -j$(nproc) -make install \ No newline at end of file +make install + +# ================================================================== + +cd ${TOP} +. ./env.sh --unregister \ No newline at end of file diff --git a/env.sh b/env.sh index 090e094..49b70d4 100755 --- a/env.sh +++ b/env.sh @@ -1,54 +1,112 @@ #!/bin/bash # env.sh — окружение для сборки под arm-uclinuxfdpiceabi (FDPIC, thumb) +# +# Использование: +# . ./env.sh --register /path/to/bin [arflags] +# . ./env.sh --unregister -TOP="$(pwd)" -TARGET=arm-uclinuxfdpiceabi -TOOLCHAIN=arm-uclinuxfdpiceabi +_env_usage() { + echo "Использование:" + echo " . ./env.sh --register /path/to/bin [arflags]" + echo " . ./env.sh --unregister" +} -# Если передали путь — используем его, иначе берём bin в текущей папке -# Пример вызова: ./env.sh /opt/toolchains/arm/bin -TOOLCHAIN_PATH="${1:-${TOP}/${TARGET}/bin}" +_env_register() { + local toolchain_path="${1:-}" + local arflags_target="${2:-}" -SYSROOT="${TOOLCHAIN_ROOT}/sysroot" -PREFIX="${SYSROOT}/usr" + # Если путь не указан — пробуем найти локальную папку тулчейна + if [ -z "$toolchain_path" ]; then + local default_path="$(pwd)/arm-uclinuxfdpiceabi/bin" + if [ -d "$default_path" ]; then + toolchain_path="$default_path" + echo "Путь не указан, используется: ${default_path}" + else + echo "Ошибка: не указан путь к тулчейну и папка arm-uclinuxfdpiceabi/bin не найдена" + _env_usage + return 1 + fi + fi -# Флаги тулчейна -CFLAGS_TOOLSET='-O2' -ARFLAGS_TARGET="${2:-}" -CFLAGS_TARGET='-Os -mthumb' -CXXFLAGS_TARGET=$CFLAGS_TARGET -LDFLAGS_TARGET='-Wl,--fdpic' + TOP="$(pwd)" + TARGET=arm-uclinuxfdpiceabi + TOOLCHAIN=arm-uclinuxfdpiceabi + TOOLCHAIN_PATH="$toolchain_path" -# Указание полного пути к компиляторам -CC="${TOOLCHAIN_PATH}/${TOOLCHAIN}-gcc ${CFLAGS_TOOLSET} ${CFLAGS_TARGET}" -CXX="${TOOLCHAIN_PATH}/${TOOLCHAIN}-g++ ${CFLAGS_TOOLSET} ${CXXFLAGS_TARGET}" -CPP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-cpp" -LD="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ld" -AR="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ar" -ARFLAGS="${ARFLAGS_TARGET}" -AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as" -NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm" -RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib" -STRIP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-strip" -OBJCOPY="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objcopy" -OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump" + SYSROOT="${TOOLCHAIN_ROOT}/sysroot" + PREFIX="${SYSROOT}/usr" -# PATH — toolchain/bin должен быть в начале -PATH="${TOOLCHAIN_PATH}:${PATH}" + # Флаги тулчейна + CFLAGS_TOOLSET='-O2' + CFLAGS_TARGET='-Os -mthumb' + CXXFLAGS_TARGET=$CFLAGS_TARGET + LDFLAGS_TARGET='-Wl,--fdpic' -# Экспорт -export SYSROOT -export PREFIX -export TARGET -export TOOLCHAIN -export CC CXX CPP LD AR ARFLAGS AS NM RANLIB STRIP OBJCOPY OBJDUMP -export CFLAGS CXXFLAGS LDFLAGS -export CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET -export PATH -export SUBARCH=armv7-m -export SUBMODE=thumb + # Указание полного пути к компиляторам + CC="${TOOLCHAIN_PATH}/${TOOLCHAIN}-gcc ${CFLAGS_TOOLSET} ${CFLAGS_TARGET}" + CXX="${TOOLCHAIN_PATH}/${TOOLCHAIN}-g++ ${CFLAGS_TOOLSET} ${CXXFLAGS_TARGET}" + CPP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-cpp" + LD="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ld" + AR="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ar" + ARFLAGS="${arflags_target}" + AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as" + NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm" + RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib" + STRIP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-strip" + OBJCOPY="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objcopy" + OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump" -echo "Окружение для ${TARGET} (Thumb/FDPIC) активировано" -echo " TOOLCHAIN_PATH = $TOOLCHAIN_PATH" -echo " CC = $CC" -echo " CXX = $CXX" + # Сохраняем оригинальный PATH (только при первой регистрации) + if [ -z "${_ENV_ORIG_PATH:-}" ]; then + _ENV_ORIG_PATH="$PATH" + fi + + # PATH — toolchain/bin должен быть в начале + PATH="${TOOLCHAIN_PATH}:${_ENV_ORIG_PATH}" + + # Экспорт + export SYSROOT PREFIX TARGET TOOLCHAIN + export CC CXX CPP LD AR ARFLAGS AS NM RANLIB STRIP OBJCOPY OBJDUMP + export CFLAGS CXXFLAGS LDFLAGS + export CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET + export PATH + export SUBARCH=armv7-m + export SUBMODE=thumb + + echo "Окружение для ${TARGET} (Thumb/FDPIC) активировано" + echo " TOOLCHAIN_PATH = $TOOLCHAIN_PATH" + echo " CC = $CC" + echo " CXX = $CXX" +} + +_env_unregister() { + # Восстанавливаем PATH + if [ -n "${_ENV_ORIG_PATH:-}" ]; then + PATH="$_ENV_ORIG_PATH" + export PATH + unset _ENV_ORIG_PATH + fi + + # Снимаем все экспортированные переменные + unset SYSROOT PREFIX TARGET TOOLCHAIN + 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 + unset TOOLCHAIN_PATH CFLAGS_TOOLSET CFLAGS_TARGET CXXFLAGS_TARGET LDFLAGS_TARGET + + echo "Окружение деактивировано, PATH восстановлен" +} + +case "${1:-}" in + --register) + shift + _env_register "$@" + ;; + --unregister) + _env_unregister + ;; + *) + _env_usage + ;; +esac