Files
build-toolchain/env.sh
Egor Tsyganchuk f6111b0bb8 Enhance env.sh to improve toolchain registration logic
- Updated usage instructions to clarify default behavior and options.
- Improved path resolution for toolchain installation, checking for both ./bin and ./arm-uclinuxfdpiceabi directories.
- Added automatic registration when no arguments are provided, streamlining the user experience.
2026-03-30 10:01:14 +03:00

126 lines
4.4 KiB
Bash
Executable File
Raw 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
# env.sh — окружение для сборки под arm-uclinuxfdpiceabi (FDPIC, thumb)
#
# Использование:
# . ./env.sh [arflags]
# (по умолчанию: --register и путь берётся из текущей директории: ./arm-uclinuxfdpiceabi)
# . ./env.sh --register /path/to/install [arflags]
# . ./env.sh --unregister
_env_usage() {
echo "Использование:"
echo " . ./env.sh [arflags]"
echo " (по умолчанию: --register, тулчейн в ./arm-uclinuxfdpiceabi)"
echo " . ./env.sh --register /path/to/install [arflags]"
echo " . ./env.sh --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
fi
TOP="$(pwd)"
TARGET=arm-uclinuxfdpiceabi
TOOLCHAIN=arm-uclinuxfdpiceabi
TOOLCHAIN_PATH="${install_root}/bin"
SYSROOT="${install_root}/sysroot"
PREFIX="${SYSROOT}/usr"
# Флаги тулчейна
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 восстановлен"
}
case "${1:-}" in
--register)
shift
_env_register "$@"
;;
--unregister)
_env_unregister
;;
"")
# Нет аргументов => автоматом register для тулчейна из текущей директории
_env_register "" ""
;;
*)
# Если аргумент не начинается с "--", трактуем как [arflags] для тулчейна из текущей директории
if [[ "$1" != --* ]]; then
_env_register "" "$1"
else
_env_usage
fi
;;
esac