diff --git a/env.sh b/env.sh index b82b9bb..f573d2d 100755 --- a/env.sh +++ b/env.sh @@ -1,145 +1,42 @@ -#!/bin/bash -# env.sh — окружение для сборки под arm-uclinuxfdpiceabi (FDPIC, thumb) -# -# Использование: -# . ./env.sh --toolchain --register /path/to/install [arflags] -# . ./env.sh --toolchain --unregister +TOP="$(pwd)" +TOOLCHAIN_PATH="" +GLOBAL_MODE=0 -_env_usage() { - echo "Использование:" - echo " . ./env.sh" - echo " . ./env.sh --toolchain --register /path/to/install [arflags]" - echo " . ./env.sh --toolchain --unregister" -} - -_env_register() { - local install_root="${1:-}" - local arflags_target="${2:-}" - - # Если путь не указан — пробуем найти локальную папку тулчейна - if [ -z "$install_root" ]; then - local default_path="$(pwd)/arm-uclinuxfdpiceabi" - if [ -d "$default_path" ]; then - install_root="$default_path" - echo "Путь не указан, используется: ${default_path}" - else - echo "Ошибка: не указан путь к тулчейну и папка arm-uclinuxfdpiceabi не найдена" - _env_usage - return 1 - fi +for arg in "$@"; do + if [ "$arg" = "--global" ]; then + GLOBAL_MODE=1 + break fi +done - TOP="$(pwd)" - TARGET=arm-uclinuxfdpiceabi - TOOLCHAIN=arm-uclinuxfdpiceabi - TOOLCHAIN_PATH="${install_root}/bin" +if [ -d "${TOP}/arm-uclinuxfdpiceabi" ]; then + TOOLCHAIN_PATH="${TOP}/arm-uclinuxfdpiceabi" +elif [ -d "${TOP}/build/install" ]; then + TOOLCHAIN_PATH="${TOP}/build/install" +fi - SYSROOT="${install_root}/sysroot" - PREFIX="${SYSROOT}/usr" +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' - CXXFLAGS_TARGET=$CFLAGS_TARGET - LDFLAGS_TARGET='-Wl,--fdpic' - - # Указание полного пути к компиляторам - 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" - - # Сохраняем оригинальный 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 восстановлен" -} - -if [ $# -eq 0 ]; then - TOP="$(pwd)" - TARGET="arm-uclinuxfdpiceabi" - TOOLCHAIN="${TARGET}" - TOOLCHAIN_PATH="${TOP}/${TARGET}/bin" - CFLAGS_TOOLSET='-O2' - CFLAGS_TARGET='-Os -mthumb' - - if [ -z "${_ENV_ORIG_PATH:-}" ]; then - _ENV_ORIG_PATH="$PATH" - fi - - CFLAGS="${CFLAGS_TOOLSET}" - CFLAGS_FOR_TARGET="${CFLAGS_TARGET}" - CXXFLAGS_FOR_TARGET="${CFLAGS_TARGET}" - PATH="${TOOLCHAIN_PATH}:${_ENV_ORIG_PATH}" - SUBARCH=armv7-m SUBMODE=thumb - echo "Окружение по умолчанию активировано" - echo " TOP = $TOP" - echo " TARGET = $TARGET" - return 0 2>/dev/null || exit 0 -fi - -if [ "${1:-}" != "--toolchain" ]; then - _env_usage + 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 -shift - -case "${1:-}" in - --register) - shift - _env_register "$@" - ;; - --unregister) - _env_unregister - ;; - *) - _env_usage - ;; -esac +fi \ No newline at end of file