Compare commits
11 Commits
a46724cc90
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| bfdfea7417 | |||
| f7c51f5f31 | |||
| 1b600fe7c4 | |||
| b804536197 | |||
| d17412f357 | |||
| fbbe5bbb7a | |||
| 8efa2e8c0f | |||
| 5bf6ec0abc | |||
| 54555cee39 | |||
| b82f2d72d1 | |||
| 97c49567ce |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
lib
|
||||||
build
|
build
|
||||||
install
|
install
|
||||||
*.tar.xz
|
*.tar.xz
|
||||||
162
build-libraries.sh
Executable file
162
build-libraries.sh
Executable 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
|
||||||
@@ -57,9 +57,20 @@ echo "== Создание директорий =="
|
|||||||
mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}"
|
mkdir -p "${KERNEL_SYSROOT_DIR}" "${BUILD_SRC_DIR}"
|
||||||
|
|
||||||
echo "== Распаковка архивов в ${BUILD_SRC_DIR} =="
|
echo "== Распаковка архивов в ${BUILD_SRC_DIR} =="
|
||||||
|
shopt -s nullglob
|
||||||
for f in *.tar.xz; do
|
for f in *.tar.xz; do
|
||||||
[ -f "$f" ] || { echo "Нет архивов *.tar.xz в текущей директории!"; exit 1; }
|
[ -f "$f" ] || { echo "Нет архивов *.tar.xz в текущей директории!"; exit 1; }
|
||||||
echo " * $f"
|
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}"
|
tar -xf "$f" -C "${BUILD_SRC_DIR}"
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -67,7 +78,7 @@ done
|
|||||||
# BINUTILS
|
# BINUTILS
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
echo "== Сборка binutils-${BINUTILS_VER} =="
|
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" \
|
"${SRC_BINUTILS}/configure" \
|
||||||
--target="${TARGET}" \
|
--target="${TARGET}" \
|
||||||
--prefix="${INSTALL_DIR}" \
|
--prefix="${INSTALL_DIR}" \
|
||||||
@@ -77,7 +88,7 @@ mkdir -p build/binutils && cd build/binutils
|
|||||||
--disable-werror
|
--disable-werror
|
||||||
make -j$(nproc) all
|
make -j$(nproc) all
|
||||||
make install
|
make install
|
||||||
cd ../../..
|
cd "${TOP}"
|
||||||
|
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
# GCC STAGE 1 (только C, без libc)
|
# GCC STAGE 1 (только C, без libc)
|
||||||
@@ -86,9 +97,9 @@ echo "== Сборка GCC-${GCC_VER} Stage 1 =="
|
|||||||
|
|
||||||
cd "${SRC_GCC}"
|
cd "${SRC_GCC}"
|
||||||
./contrib/download_prerequisites
|
./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" \
|
"${SRC_GCC}/configure" \
|
||||||
--target="${TARGET}" \
|
--target="${TARGET}" \
|
||||||
--prefix="${INSTALL_DIR}" \
|
--prefix="${INSTALL_DIR}" \
|
||||||
@@ -113,14 +124,14 @@ make -j$(nproc) all-gcc
|
|||||||
make install-gcc
|
make install-gcc
|
||||||
make -j$(nproc) all-target-libgcc
|
make -j$(nproc) all-target-libgcc
|
||||||
make install-target-libgcc
|
make install-target-libgcc
|
||||||
cd ../../..
|
cd "${TOP}"
|
||||||
|
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
# Linux headers
|
# Linux headers
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
echo "== Установка заголовков linux-${LINUX_VER} =="
|
echo "== Установка заголовков linux-${LINUX_VER} =="
|
||||||
|
|
||||||
mkdir -p build/kernelheader
|
rm -rf build/kernelheader && mkdir -p build/kernelheader
|
||||||
cd "${SRC_LINUX}"
|
cd "${SRC_LINUX}"
|
||||||
|
|
||||||
PATH="${INSTALL_BIN_DIR}:${PATH}" \
|
PATH="${INSTALL_BIN_DIR}:${PATH}" \
|
||||||
@@ -163,7 +174,7 @@ cd "${TOP}"
|
|||||||
# GCC FINAL (C + C++)
|
# GCC FINAL (C + C++)
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
echo "== Сборка финального GCC-${GCC_VER} (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" \
|
"${SRC_GCC}/configure" \
|
||||||
--target="${TARGET}" \
|
--target="${TARGET}" \
|
||||||
--prefix="${INSTALL_DIR}" \
|
--prefix="${INSTALL_DIR}" \
|
||||||
@@ -183,10 +194,18 @@ make -j$(nproc)
|
|||||||
make install
|
make install
|
||||||
cd "${TOP}"
|
cd "${TOP}"
|
||||||
|
|
||||||
|
# ==================================================================
|
||||||
|
# Установка библиотек
|
||||||
|
# ==================================================================
|
||||||
|
|
||||||
|
./build-libraries.sh
|
||||||
|
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
# Strip и упаковка
|
# Strip и упаковка
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
echo "== Strip toolchain и упаковка =="
|
echo "== Strip toolchain и упаковка =="
|
||||||
|
|
||||||
|
cd ${TOP}
|
||||||
WDIR=$(mktemp -d)
|
WDIR=$(mktemp -d)
|
||||||
trap 'rm -rf "$WDIR"' EXIT
|
trap 'rm -rf "$WDIR"' EXIT
|
||||||
|
|
||||||
|
|||||||
12
env.sh
12
env.sh
@@ -9,17 +9,12 @@ TOOLCHAIN=arm-uclinuxfdpiceabi
|
|||||||
# Пример вызова: ./env.sh /opt/toolchains/arm/bin
|
# Пример вызова: ./env.sh /opt/toolchains/arm/bin
|
||||||
TOOLCHAIN_PATH="${1:-${TOP}/${TARGET}/bin}"
|
TOOLCHAIN_PATH="${1:-${TOP}/${TARGET}/bin}"
|
||||||
|
|
||||||
# Проверка, что путь существует
|
SYSROOT="${TOOLCHAIN_ROOT}/sysroot"
|
||||||
if [ ! -d "$TOOLCHAIN_PATH" ]; then
|
PREFIX="${SYSROOT}/usr"
|
||||||
echo "Ошибка: директория с тулчейном не найдена: $TOOLCHAIN_PATH"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
PREFIX="${TOOLCHAIN_ROOT}/sysroot/usr"
|
|
||||||
|
|
||||||
# Флаги тулчейна
|
# Флаги тулчейна
|
||||||
CFLAGS_TOOLSET='-O2'
|
CFLAGS_TOOLSET='-O2'
|
||||||
ARFLAGS_TARGET=""
|
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'
|
||||||
@@ -41,6 +36,7 @@ OBJDUMP="${TOOLCHAIN_PATH}/${TOOLCHAIN}-objdump"
|
|||||||
PATH="${TOOLCHAIN_PATH}:${PATH}"
|
PATH="${TOOLCHAIN_PATH}:${PATH}"
|
||||||
|
|
||||||
# Экспорт
|
# Экспорт
|
||||||
|
export SYSROOT
|
||||||
export PREFIX
|
export PREFIX
|
||||||
export TARGET
|
export TARGET
|
||||||
export TOOLCHAIN
|
export TOOLCHAIN
|
||||||
|
|||||||
Reference in New Issue
Block a user