Refactor env.sh to improve registration and unregistration handling for toolchain environment
This commit is contained in:
@@ -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
|
||||
make install
|
||||
|
||||
# ==================================================================
|
||||
|
||||
cd ${TOP}
|
||||
. ./env.sh --unregister
|
||||
146
env.sh
146
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
|
||||
|
||||
Reference in New Issue
Block a user