Compare commits

...

3 Commits

4 changed files with 117 additions and 52 deletions

View File

@@ -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=""
@@ -168,3 +168,8 @@ cmake -S .. -B . \
make -j$(nproc)
make install
# ==================================================================
cd ${TOP}
. ./env.sh --unregister

View File

@@ -15,7 +15,7 @@ PKG_UCLIBC="uClibc-ng"
BINUTILS_VER="2.42"
GCC_VER="13.4.0"
LINUX_VER="4.9.224"
UCLIBC_VER="1.0.34"
UCLIBC_VER="1.0.55"
# ==================================================================
# Основные параметры тулчейна
@@ -128,7 +128,8 @@ mkdir -p "${BUILD_DIR}/gcc1" && cd "${BUILD_DIR}/gcc1"
--without-cloog \
--without-ppl \
--disable-nls \
--disable-libatomic
--disable-libatomic \
--disable-tls
make -j$(nproc) all-gcc
make install-gcc
@@ -199,7 +200,8 @@ mkdir -p "${BUILD_DIR}/gcc2" && cd "${BUILD_DIR}/gcc2"
--disable-multilib \
--disable-bootstrap \
--disable-libgomp \
--disable-libatomic
--disable-libatomic \
--disable-tls
make -j$(nproc)
make install

View File

@@ -35,7 +35,7 @@ toolchain_files=(
"https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz"
"https://ftp.gnu.org/gnu/gcc/gcc-13.4.0/gcc-13.4.0.tar.xz"
"https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.224.tar.xz"
"https://downloads.uclibc-ng.org/releases/1.0.34/uClibc-ng-1.0.34.tar.xz"
"https://downloads.uclibc-ng.org/releases/1.0.55/uClibc-ng-1.0.55.tar.xz"
)
# Исходники библиотек

80
env.sh
View File

@@ -1,20 +1,43 @@
#!/bin/bash
# env.sh — окружение для сборки под arm-uclinuxfdpiceabi (FDPIC, thumb)
#
# Использование:
# . ./env.sh --register /path/to/bin [arflags]
# . ./env.sh --unregister
_env_usage() {
echo "Использование:"
echo " . ./env.sh --register /path/to/bin [arflags]"
echo " . ./env.sh --unregister"
}
_env_register() {
local toolchain_path="${1:-}"
local arflags_target="${2:-}"
# Если путь не указан — пробуем найти локальную папку тулчейна
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
TOP="$(pwd)"
TARGET=arm-uclinuxfdpiceabi
TOOLCHAIN=arm-uclinuxfdpiceabi
# Если передали путь — используем его, иначе берём bin в текущей папке
# Пример вызова: ./env.sh /opt/toolchains/arm/bin
TOOLCHAIN_PATH="${1:-${TOP}/${TARGET}/bin}"
TOOLCHAIN_PATH="$toolchain_path"
SYSROOT="${TOOLCHAIN_ROOT}/sysroot"
PREFIX="${SYSROOT}/usr"
# Флаги тулчейна
CFLAGS_TOOLSET='-O2'
ARFLAGS_TARGET="${2:-}"
CFLAGS_TARGET='-Os -mthumb'
CXXFLAGS_TARGET=$CFLAGS_TARGET
LDFLAGS_TARGET='-Wl,--fdpic'
@@ -25,7 +48,7 @@ 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}"
ARFLAGS="${arflags_target}"
AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as"
NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm"
RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib"
@@ -33,14 +56,16 @@ 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}:${PATH}"
PATH="${TOOLCHAIN_PATH}:${_ENV_ORIG_PATH}"
# Экспорт
export SYSROOT
export PREFIX
export TARGET
export TOOLCHAIN
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
@@ -52,3 +77,36 @@ 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