Compare commits

4 Commits

3 changed files with 98 additions and 5 deletions

66
README.md Normal file
View File

@@ -0,0 +1,66 @@
# build-toolchain
Сборка кросс-компилятора `arm-uclinuxfdpiceabi` (ARMv7-M, Thumb, FDPIC) на базе
binutils + GCC + uClibc-ng, а также набора статических библиотек под него.
## Состав
| Компонент | Версия |
|---------------|----------|
| binutils | 2.42 |
| GCC | 13.4.0 |
| Linux headers | 4.9.224 |
| uClibc-ng | 1.0.34 |
## Требования (Ubuntu/Debian)
Для `build-toolchain.sh` (сборка самого компилятора):
```
sudo apt install build-essential bison flex texinfo gawk bc m4 wget python3 perl
```
Для `build-libraries.sh` (сборка zlib/OpenSSL/LibVNCServer/freetype под целевую
платформу) дополнительно нужен `cmake`:
```
sudo apt install cmake pkg-config
```
Библиотеки gmp/mpfr/mpc/isl отдельно ставить не нужно — `contrib/download_prerequisites`
сам скачивает их исходники внутрь дерева GCC (нужен доступ в интернет).
## Исходники
В корень репозитория нужно положить архивы (не входят в git, см. `.gitignore`):
```
binutils-2.42.tar.xz
gcc-13.4.0.tar.xz
linux-4.9.224.tar.xz
uClibc-ng-1.0.34.tar.xz
```
Для `build-libraries.sh` — архивы библиотек в подпапку `lib/`:
```
lib/zlib-1.2.13.tar.xz (или .tar.gz)
lib/openssl-3.0.13.tar.xz (или .tar.gz)
lib/LibVNCServer-0.9.14.tar.xz (или .tar.gz)
lib/freetype-2.13.2.tar.xz (или .tar.gz)
lib/libnl-3.9.0.tar.xz (или .tar.gz)
```
## Сборка
```
./build-toolchain.sh # компилятор + libc -> install/, архив toolset-jlv-*.tar.xz
./build-libraries.sh # статические библиотеки -> install/sysroot
```
Компилятор ставится в `install/bin` (`arm-uclinuxfdpiceabi-gcc` и т.д.).
Для сборки чего-либо этим компилятором подключить окружение:
```
. ./env.sh install/bin
```

View File

@@ -158,5 +158,20 @@ cmake -S .. -B . \
-DZLIB_INCLUDE_DIR="${SYSROOT_USR_DIR}/include" \
-DZLIB_USE_STATIC=ON
make -j$(nproc)
make install
# ==================================================================
# libnl-3.9.0 (nl80211 — нужен wpa_supplicant/hostapd, wext больше не поддерживается)
# ==================================================================
cd "${LIB_BUILD_DIR}/libnl-3.9.0"
./configure \
--host="${TARGET}" \
--prefix="${SYSROOT_USR_DIR}" \
--disable-shared \
--enable-static \
--enable-cli=no
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}" \
@@ -88,7 +99,7 @@ cd "${SRC_GCC}"
./contrib/download_prerequisites
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}" \
@@ -120,7 +131,7 @@ cd "${TOP}"
# ==================================================================
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}" \
@@ -171,9 +182,10 @@ mkdir -p build/gcc2 && cd build/gcc2
--with-arch="${SUBARCH}" \
--with-mode="${SUBMODE}" \
--enable-languages=c,c++ \
--enable-threads=posix \
--disable-threads \
--enable-fdpic \
--disable-libstdcxx-pch \
--disable-libitm \
--disable-multilib \
--disable-bootstrap \
--disable-libgomp \