Compare commits

..

11 Commits

4 changed files with 193 additions and 15 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
lib
build
install
*.tar.xz

162
build-libraries.sh Executable file
View File

@@ -0,0 +1,162 @@
#!/bin/bash
set -e
# Подготавливаем переменные
TOP="$(pwd)"
INSTALL_DIR="${TOP}/install"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
# Запускаем предварительно для того чтобы подтянуть переменные
. ./env.sh "${INSTALL_BIN_DIR}"
# Подготавливаем пути к разделам
LIB_DIR="${TOP}/lib"
SYSROOT_DIR="${INSTALL_DIR}${SYSROOT}"
SYSROOT_ETC_DIR="${SYSROOT_DIR}/etc"
SYSROOT_USR_DIR="${SYSROOT_DIR}/usr"
BUILD_SRC_DIR="${TOP}/build"
LIB_BUILD_DIR="${BUILD_SRC_DIR}/lib"
# ==================================================================
# Проверка файла окружения
# ==================================================================
# Проверяем существует ли файл
if [ ! -f ./env.sh ]; then
echo "Ошибка: файл env.sh не найден"
exit 1
fi
# Проверяем имеет ли файл права на исполнение
if [ ! -x ./env.sh ]; then
echo "env.sh не имеет права на выполнение, добавляю..."
chmod +x ./env.sh || { echo "Не удалось установить права"; exit 1; }
fi
# ==================================================================
# Распаковка библиотек
# ==================================================================
echo "== Распаковка библиотек =="
# Создаем каталог для сборки библиотек
mkdir -p "${LIB_BUILD_DIR}"
echo "== Поиск и распаковка архивов в ${LIB_DIR} =="
# Проходимся по *.tar.xz и *.tar.gz
shopt -s nullglob
for archive in "${LIB_DIR}"/*.tar.xz "${LIB_DIR}"/*.tar.gz; do
# Если файлов нет ничего не делаем
[ -e "$archive" ] || continue
fname="$(basename "$archive")"
pkg="${fname%.tar.*}" # имя папки после распаковки
echo "--------------------------------------"
echo "Найден архив: $fname"
echo "Распаковка в: ${LIB_BUILD_DIR}/${pkg}"
echo "--------------------------------------"
mkdir -p "${LIB_BUILD_DIR}/${pkg}"
tar -xf "$archive" -C "${LIB_BUILD_DIR}/${pkg}" --strip-components=1
done
shopt -u nullglob
echo "== Распаковка завершена =="
# ==================================================================
# Установка окружения
# ==================================================================
cd ${TOP}
./env.sh "${INSTALL_BIN_DIR}" "rc"
cd "${LIB_BUILD_DIR}/zlib-1.2.13"
./configure --prefix=${SYSROOT_USR_DIR} --libdir=${SYSROOT_USR_DIR}/lib --static
make -j$(nproc)
make install
# ==================================================================
cd ${TOP}
./env.sh "${INSTALL_BIN_DIR}"
cd "${LIB_BUILD_DIR}/openssl-3.0.13"
./Configure linux-armv4 \
--prefix=${SYSROOT_USR_DIR} \
--libdir=${SYSROOT_USR_DIR}/lib \
--openssldir=${SYSROOT_ETC_DIR}/ssl \
enable-legacy no-mdc2 no-rc5 no-ec2m no-sm2 no-sm4 no-ssl3 \
no-shared no-dso no-async no-comp no-idea no-tests no-threads no-asm no-secure-memory no-seed no-weak-ssl-ciphers \
no-afalgeng no-aria no-async no-bf no-blake2 no-camellia no-capieng no-cast no-chacha no-cms no-cmp no-ct \
no-dgram no-dsa no-dtls no-ecdh no-ecdsa no-engine no-err no-filenames no-gost no-md4 \
no-ocsp no-pinshared no-poly1305 no-posix-io no-rc2 no-rc4 no-rdrand no-rfc3779 no-rmd160 no-scrypt no-sctp no-siphash \
no-sm3 no-srp no-srtp no-ssl-trace no-ssl3 no-ssl3-method no-ts no-whirlpool enable-ktls \
-DNO_FORK -DHAVE_FORK=0
make -j$(nproc) build_libs
make install_sw
# ==================================================================
cd "${LIB_BUILD_DIR}/LibVNCServer-0.9.14"
rm -rf build
mkdir -p build && cd build
cmake -S .. -B . \
-DBUILD_SHARED_LIBS=OFF \
-DWITH_THREADS=OFF \
-DWITH_TESTS=OFF \
-DWITH_EXAMPLES=OFF \
-DWITH_ZLIB=OFF \
-DWITH_LZO=OFF \
-DWITH_JPEG=OFF \
-DWITH_PNG=OFF \
-DWITH_SDL=OFF \
-DWITH_GTK=OFF \
-DWITH_LIBSSH2=OFF \
-DWITH_GNUTLS=OFF \
-DWITH_GCRYPT=OFF \
-DWITH_FFMPEG=OFF \
-DWITH_TIGHTVNC_FILETRANSFER=OFF \
-WITH_IPv6=ON \
-DWITH_WEBSOCKETS=OFF \
-DWITH_SASL=OFF \
-DWITH_OPENSSL=OFF \
-DOPENSSL_ROOT_DIR="${SYSROOT_USR_DIR}" \
-DOPENSSL_LIBRARIES="${SYSROOT_USR_DIR}/lib/libssl.a;${SYSROOT_USR_DIR}/lib/libcrypto.a" \
-DOPENSSL_INCLUDE_DIR="${SYSROOT_USR_DIR}/include" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_FIND_ROOT_PATH="${SYSROOT_DIR}" \
-DCMAKE_SYSROOT="${SYSROOT_DIR}" \
-DCMAKE_STAGING_PREFIX="${SYSROOT_USR_DIR}"
make -j$(nproc)
make install
# ==================================================================
cd "${LIB_BUILD_DIR}/freetype-2.13.2"
[ -d "build" ] && rm -rf build
mkdir -p build && cd build
cmake -S .. -B . \
-DCMAKE_BUILD_TYPE=Release \
-DFT_DISABLE_HARFBUZZ=ON \
-DBUILD_SHARED_LIBS=OFF \
-DFT_DISABLE_BROTLI=ON \
-DFT_DISABLE_BZIP2=ON \
-DFT_DISABLE_PNG=ON \
-DFT_DISABLE_DOCS=ON \
-DFT_DISABLE_TESTS=ON \
-DCMAKE_INSTALL_PREFIX="${SYSROOT_USR_DIR}" \
-DCMAKE_FIND_ROOT_PATH="${SYSROOT_DIR}" \
-DCMAKE_SYSROOT="${SYSROOT_DIR}" \
-DCMAKE_STAGING_PREFIX="${SYSROOT_USR_DIR}" \
-DZLIB_LIBRARY="${SYSROOT_USR_DIR}/lib/libz.a" \
-DZLIB_INCLUDE_DIR="${SYSROOT_USR_DIR}/include" \
-DZLIB_USE_STATIC=ON
make -j$(nproc)
make install

View File

@@ -57,9 +57,20 @@ echo "== Создание директорий =="
mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}"
echo "== Распаковка архивов в ${BUILD_SRC_DIR} =="
shopt -s nullglob
for f in *.tar.xz; do
[ -f "$f" ] || { echo "Нет архивов *.tar.xz в текущей директории!"; exit 1; }
echo " * $f"
dirname="${f%.tar.xz}"
target_dir="${BUILD_SRC_DIR}/${dirname}"
if [ -d "$target_dir" ]; then
echo " -> Пропуск: директория '${dirname}' уже существует"
continue
fi
echo " -> Распаковка в '${BUILD_SRC_DIR}'"
tar -xf "$f" -C "${BUILD_SRC_DIR}"
done
@@ -67,7 +78,7 @@ done
# BINUTILS
# ==================================================================
echo "== Сборка binutils-${BINUTILS_VER} =="
mkdir -p build/binutils && cd build/binutils
rm -rf build/binutils && mkdir -p build/binutils && cd build/binutils
"${SRC_BINUTILS}/configure" \
--target="${TARGET}" \
--prefix="${INSTALL_DIR}" \
@@ -77,7 +88,7 @@ mkdir -p build/binutils && cd build/binutils
--disable-werror
make -j$(nproc) all
make install
cd ../../..
cd "${TOP}"
# ==================================================================
# GCC STAGE 1 (только C, без libc)
@@ -86,9 +97,9 @@ echo "== Сборка GCC-${GCC_VER} Stage 1 =="
cd "${SRC_GCC}"
./contrib/download_prerequisites
cd ../../..
cd "${TOP}"
mkdir -p build/gcc1 && cd build/gcc1
rm -rf build/gcc1 && mkdir -p build/gcc1 && cd build/gcc1
"${SRC_GCC}/configure" \
--target="${TARGET}" \
--prefix="${INSTALL_DIR}" \
@@ -113,14 +124,14 @@ make -j$(nproc) all-gcc
make install-gcc
make -j$(nproc) all-target-libgcc
make install-target-libgcc
cd ../../..
cd "${TOP}"
# ==================================================================
# Linux headers
# ==================================================================
echo "== Установка заголовков linux-${LINUX_VER} =="
mkdir -p build/kernelheader
rm -rf build/kernelheader && mkdir -p build/kernelheader
cd "${SRC_LINUX}"
PATH="${INSTALL_BIN_DIR}:${PATH}" \
@@ -163,7 +174,7 @@ cd "${TOP}"
# GCC FINAL (C + C++)
# ==================================================================
echo "== Сборка финального GCC-${GCC_VER} (C+C++) =="
mkdir -p build/gcc2 && cd build/gcc2
rm -rf build/gcc2 && mkdir -p build/gcc2 && cd build/gcc2
"${SRC_GCC}/configure" \
--target="${TARGET}" \
--prefix="${INSTALL_DIR}" \
@@ -183,10 +194,18 @@ make -j$(nproc)
make install
cd "${TOP}"
# ==================================================================
# Установка библиотек
# ==================================================================
./build-libraries.sh
# ==================================================================
# Strip и упаковка
# ==================================================================
echo "== Strip toolchain и упаковка =="
cd ${TOP}
WDIR=$(mktemp -d)
trap 'rm -rf "$WDIR"' EXIT

12
env.sh
View File

@@ -9,17 +9,12 @@ TOOLCHAIN=arm-uclinuxfdpiceabi
# Пример вызова: ./env.sh /opt/toolchains/arm/bin
TOOLCHAIN_PATH="${1:-${TOP}/${TARGET}/bin}"
# Проверка, что путь существует
if [ ! -d "$TOOLCHAIN_PATH" ]; then
echo "Ошибка: директория с тулчейном не найдена: $TOOLCHAIN_PATH"
exit 1
fi
PREFIX="${TOOLCHAIN_ROOT}/sysroot/usr"
SYSROOT="${TOOLCHAIN_ROOT}/sysroot"
PREFIX="${SYSROOT}/usr"
# Флаги тулчейна
CFLAGS_TOOLSET='-O2'
ARFLAGS_TARGET=""
ARFLAGS_TARGET="${2:-}"
CFLAGS_TARGET='-Os -mthumb'
CXXFLAGS_TARGET=$CFLAGS_TARGET
LDFLAGS_TARGET='-Wl,--fdpic'
@@ -41,6 +36,7 @@ OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump"
PATH="${TOOLCHAIN_PATH}:${PATH}"
# Экспорт
export SYSROOT
export PREFIX
export TARGET
export TOOLCHAIN