Compare commits

..

2 Commits

Author SHA1 Message Date
08e372eaf2 Refactor build-libraries.sh and env.sh for improved environment setup
- Updated build-libraries.sh to use --global and --path options for environment registration, enhancing clarity and consistency.
- Modified env.sh to support custom paths and improved error handling for the --path argument, streamlining toolchain path resolution.
- Removed redundant SYSROOT_DIR assignments to simplify the script logic.
2026-03-31 13:54:49 +03:00
fa0e0243e1 Refactor env.sh to enhance toolchain path handling and usage instructions
- Simplified toolchain path resolution logic to support custom paths and global mode.
- Improved error handling and user feedback for toolchain detection.
- Streamlined environment variable exports and clarified usage instructions for better user experience.
2026-03-31 13:54:39 +03:00
2 changed files with 55 additions and 143 deletions

View File

@@ -8,9 +8,10 @@ source "$(dirname "$0")/versions.sh"
TOP="$(pwd)"
INSTALL_DIR="${TOP}/build/install"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
SYSROOT_DIR="${INSTALL_DIR}/sysroot"
# Запускаем предварительно для того чтобы подтянуть переменные
. ./env.sh --toolchain --register "${INSTALL_DIR}"
. ./env.sh --global --path "${INSTALL_DIR}"
# Сбрасываем CFLAGS/CXXFLAGS — все флаги уже встроены в CC/CXX
export CFLAGS=""
@@ -19,7 +20,6 @@ export CXXFLAGS=""
# Подготавливаем пути к разделам
LIB_DIR="${TOP}/src/libs"
SYSROOT_DIR="${SYSROOT}"
SYSROOT_ETC_DIR="${SYSROOT_DIR}/etc"
SYSROOT_USR_DIR="${SYSROOT_DIR}/usr"
BUILD_SRC_DIR="${TOP}/build"
@@ -77,8 +77,8 @@ echo "== Распаковка завершена =="
# Установка окружения
# ==================================================================
cd ${TOP}
. ./env.sh --toolchain --register "${INSTALL_DIR}" "rc"
cd "${TOP}"
. ./env.sh --global --path "${INSTALL_DIR}"
export CFLAGS=""
export CXXFLAGS=""
@@ -89,8 +89,8 @@ make install
# ==================================================================
cd ${TOP}
. ./env.sh --toolchain --register "${INSTALL_DIR}"
cd "${TOP}"
. ./env.sh --global --path "${INSTALL_DIR}"
export CFLAGS=""
export CXXFLAGS=""
@@ -173,5 +173,4 @@ make install
# ==================================================================
cd ${TOP}
. ./env.sh --toolchain --unregister
cd "${TOP}"

183
env.sh
View File

@@ -1,145 +1,58 @@
#!/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
CUSTOM_PATH=""
_env_usage() {
echo "Использование:"
echo " . ./env.sh"
echo " . ./env.sh --toolchain --register /path/to/install [arflags]"
echo " . ./env.sh --toolchain --unregister"
}
while [ $# -gt 0 ]; do
case "$1" in
--global)
GLOBAL_MODE=1
shift
;;
--path)
if [ -z "$2" ]; then
echo "Ошибка: для --path нужно указать путь"
return 1 2>/dev/null || exit 1
fi
CUSTOM_PATH="$2"
shift 2
;;
*)
shift
;;
esac
done
_env_register() {
local install_root="${1:-}"
local arflags_target="${2:-}"
if [ -n "${CUSTOM_PATH}" ]; then
TOOLCHAIN_PATH="${CUSTOM_PATH}"
elif [ -d "${TOP}/arm-uclinuxfdpiceabi" ]; then
TOOLCHAIN_PATH="${TOP}/arm-uclinuxfdpiceabi"
elif [ -d "${TOP}/build/install" ]; then
TOOLCHAIN_PATH="${TOP}/build/install"
fi
# Если путь не указан — пробуем найти локальную папку тулчейна
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
if [ -n "${TOOLCHAIN_PATH}" ] && [ -x "${TOOLCHAIN_PATH}/bin/arm-uclinuxfdpiceabi-gcc" ]; then
echo "Найден toolchain: ${TOOLCHAIN_PATH}/bin/arm-uclinuxfdpiceabi-gcc"
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 восстановлен"
}
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