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" INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
# Запускаем предварительно для того чтобы подтянуть переменные # Запускаем предварительно для того чтобы подтянуть переменные
. ./env.sh "${INSTALL_BIN_DIR}" . ./env.sh --register "${INSTALL_BIN_DIR}"
# Сбрасываем CFLAGS/CXXFLAGS — все флаги уже встроены в CC/CXX # Сбрасываем CFLAGS/CXXFLAGS — все флаги уже встроены в CC/CXX
export CFLAGS="" export CFLAGS=""
@@ -76,7 +76,7 @@ echo "== Распаковка завершена =="
# ================================================================== # ==================================================================
cd ${TOP} cd ${TOP}
. ./env.sh "${INSTALL_BIN_DIR}" "rc" . ./env.sh --register "${INSTALL_BIN_DIR}" "rc"
export CFLAGS="" export CFLAGS=""
export CXXFLAGS="" export CXXFLAGS=""
@@ -88,7 +88,7 @@ make install
# ================================================================== # ==================================================================
cd ${TOP} cd ${TOP}
. ./env.sh "${INSTALL_BIN_DIR}" . ./env.sh --register "${INSTALL_BIN_DIR}"
export CFLAGS="" export CFLAGS=""
export CXXFLAGS="" export CXXFLAGS=""
@@ -168,3 +168,8 @@ cmake -S .. -B . \
make -j$(nproc) make -j$(nproc)
make install make install
# ==================================================================
cd ${TOP}
. ./env.sh --unregister

View File

@@ -15,7 +15,7 @@ PKG_UCLIBC="uClibc-ng"
BINUTILS_VER="2.42" BINUTILS_VER="2.42"
GCC_VER="13.4.0" GCC_VER="13.4.0"
LINUX_VER="4.9.224" 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-cloog \
--without-ppl \ --without-ppl \
--disable-nls \ --disable-nls \
--disable-libatomic --disable-libatomic \
--disable-tls
make -j$(nproc) all-gcc make -j$(nproc) all-gcc
make install-gcc make install-gcc
@@ -199,7 +200,8 @@ mkdir -p "${BUILD_DIR}/gcc2" && cd "${BUILD_DIR}/gcc2"
--disable-multilib \ --disable-multilib \
--disable-bootstrap \ --disable-bootstrap \
--disable-libgomp \ --disable-libgomp \
--disable-libatomic --disable-libatomic \
--disable-tls
make -j$(nproc) make -j$(nproc)
make install 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/binutils/binutils-2.42.tar.xz"
"https://ftp.gnu.org/gnu/gcc/gcc-13.4.0/gcc-13.4.0.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://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 #!/bin/bash
# env.sh — окружение для сборки под arm-uclinuxfdpiceabi (FDPIC, thumb) # 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)" TOP="$(pwd)"
TARGET=arm-uclinuxfdpiceabi TARGET=arm-uclinuxfdpiceabi
TOOLCHAIN=arm-uclinuxfdpiceabi TOOLCHAIN=arm-uclinuxfdpiceabi
TOOLCHAIN_PATH="$toolchain_path"
# Если передали путь — используем его, иначе берём bin в текущей папке
# Пример вызова: ./env.sh /opt/toolchains/arm/bin
TOOLCHAIN_PATH="${1:-${TOP}/${TARGET}/bin}"
SYSROOT="${TOOLCHAIN_ROOT}/sysroot" SYSROOT="${TOOLCHAIN_ROOT}/sysroot"
PREFIX="${SYSROOT}/usr" PREFIX="${SYSROOT}/usr"
# Флаги тулчейна # Флаги тулчейна
CFLAGS_TOOLSET='-O2' CFLAGS_TOOLSET='-O2'
ARFLAGS_TARGET="${2:-}"
CFLAGS_TARGET='-Os -mthumb' CFLAGS_TARGET='-Os -mthumb'
CXXFLAGS_TARGET=$CFLAGS_TARGET CXXFLAGS_TARGET=$CFLAGS_TARGET
LDFLAGS_TARGET='-Wl,--fdpic' LDFLAGS_TARGET='-Wl,--fdpic'
@@ -25,7 +48,7 @@ CXX="${TOOLCHAIN_PATH}/${TOOLCHAIN}-g++ ${CFLAGS_TOOLSET} ${CXXFLAGS_TARGET}"
CPP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-cpp" CPP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-cpp"
LD="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ld" LD="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ld"
AR="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ar" AR="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ar"
ARFLAGS="${ARFLAGS_TARGET}" ARFLAGS="${arflags_target}"
AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as" AS="${TOOLCHAIN_PATH}/${TOOLCHAIN}-as"
NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm" NM="${TOOLCHAIN_PATH}/${TOOLCHAIN}-nm"
RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib" RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN}-ranlib"
@@ -33,14 +56,16 @@ STRIP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-strip"
OBJCOPY="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objcopy" OBJCOPY="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objcopy"
OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump" OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump"
# Сохраняем оригинальный PATH (только при первой регистрации)
if [ -z "${_ENV_ORIG_PATH:-}" ]; then
_ENV_ORIG_PATH="$PATH"
fi
# PATH — toolchain/bin должен быть в начале # PATH — toolchain/bin должен быть в начале
PATH="${TOOLCHAIN_PATH}:${PATH}" PATH="${TOOLCHAIN_PATH}:${_ENV_ORIG_PATH}"
# Экспорт # Экспорт
export SYSROOT export SYSROOT PREFIX TARGET TOOLCHAIN
export PREFIX
export TARGET
export TOOLCHAIN
export CC CXX CPP LD AR ARFLAGS AS NM RANLIB STRIP OBJCOPY OBJDUMP export CC CXX CPP LD AR ARFLAGS AS NM RANLIB STRIP OBJCOPY OBJDUMP
export CFLAGS CXXFLAGS LDFLAGS export CFLAGS CXXFLAGS LDFLAGS
export CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET export CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET
@@ -52,3 +77,36 @@ echo "Окружение для ${TARGET} (Thumb/FDPIC) активировано
echo " TOOLCHAIN_PATH = $TOOLCHAIN_PATH" echo " TOOLCHAIN_PATH = $TOOLCHAIN_PATH"
echo " CC = $CC" echo " CC = $CC"
echo " CXX = $CXX" 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