Compare commits
4 Commits
f165563387
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 852d3c1cff | |||
| 767903d1ea | |||
| bfdfea7417 | |||
| f7c51f5f31 |
66
README.md
Normal file
66
README.md
Normal 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
|
||||
```
|
||||
@@ -160,3 +160,18 @@ cmake -S .. -B . \
|
||||
|
||||
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
|
||||
@@ -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 \
|
||||
|
||||
Reference in New Issue
Block a user