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