Files
build-toolchain/README.md
Egor Tsyganchuk 8267e2e4da Refactor toolchain packaging process by introducing package-toolchain.sh
- Replaced the packaging logic in build-toolchain.sh with a call to the new package-toolchain.sh script for better organization and maintainability.
- Added package-toolchain.sh to handle the stripping and archiving of the toolchain, including necessary checks for the installation directory and environment script.
- Updated README.md to document the addition of package-toolchain.sh for clarity on the build process.
2026-04-06 15:09:07 +03:00

133 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Build Toolchain — кросс-компилятор для ARM uClinux FDPIC
Набор скриптов для сборки кросс-компилятора под целевую платформу **ARM uClinux FDPIC (Thumb, ARMv7-m)**.
Целевой триплет: `arm-uclinuxfdpiceabi`
## Состав тулчейна
| Компонент | Версия | Назначение |
|-----------------|----------|-------------------------------------|
| Binutils | 2.42 | Ассемблер, линковщик, утилиты |
| GCC | 13.4.0 | Компилятор C/C++ |
| Linux (headers) | 4.9.224 | Заголовочные файлы ядра |
| uClibc-ng | 1.0.34 | Стандартная библиотека C |
### Дополнительные библиотеки
| Библиотека | Версия | Назначение |
|--------------|--------|---------------------------|
| zlib | 1.2.13 | Сжатие данных |
| OpenSSL | 3.0.13 | Криптография |
| LibVNCServer | 0.9.14 | VNC-сервер |
| FreeType | 2.13.2 | Рендеринг шрифтов |
| libnl | 3.2.0 | Netlink для Linux |
Все библиотеки собираются статически.
## Характеристики целевой платформы
- **Архитектура:** ARM 32-bit (ARMv7-m)
- **Набор инструкций:** Thumb
- **ABI:** EABI с поддержкой FDPIC
- **Плавающая точка:** программная (soft float)
- **Потоки:** отключены
- **TLS:** отключён
## Зависимости хостовой системы
- bash
- make
- gcc (или другой C-компилятор для хоста)
- cmake
- wget
- bzip2
- bison (или yacc)
- flex
- tar
- стандартные утилиты (grep, sed и т.д.)
Для Ubuntu/WSL можно установить минимальный набор так:
```bash
sudo apt update
sudo apt install -y make gcc g++ cmake wget bzip2 bison flex tar sed grep xz-utils
```
## Использование
### 1. Загрузка исходников
```bash
./download_prerequisites.sh
```
Скрипт загружает архивы исходного кода всех компонентов в каталоги `src/toolchain/` и `src/libs/`. Уже загруженные архивы пропускаются.
### 2. Сборка тулчейна
```bash
./build-toolchain.sh
```
Сборка выполняется поэтапно:
1. Распаковка архивов
2. Сборка Binutils
3. Сборка GCC (этап 1 — минимальный компилятор C без libc)
4. Установка заголовочных файлов ядра Linux
5. Сборка uClibc-ng
6. Сборка GCC (этап 2 — полный компилятор C/C++ с поддержкой FDPIC)
7. Сборка дополнительных библиотек
8. Упаковка результата в архив
На выходе создаётся архив `toolset-jlv-armv7-m-gcc13.4.0-uclibc1.0.34.tar.xz`. Внутри архива:
- каталог `arm-uclinuxfdpiceabi/` — установленный тулчейн (как после `prefix`);
- файл `env.sh` в том же каталоге, что и `arm-uclinuxfdpiceabi/` (без отдельной папки `scripts`).
В репозитории шаблон для упаковки лежит в `scripts/env.sh`, при сборке архива он копируется в корень как `env.sh`.
### 3. Настройка окружения после распаковки архива
Распакуйте архив в удобное место и перейдите в каталог, где лежат `arm-uclinuxfdpiceabi/` и `env.sh`:
```bash
tar -xf toolset-jlv-armv7-m-gcc13.4.0-uclibc1.0.34.tar.xz
cdаталог_распаковки>
source ./env.sh
```
Скрипт задаёт `TOP` как текущий каталог, добавляет `${TOP}/arm-uclinuxfdpiceabi/bin` в `PATH`, выставляет `CFLAGS` / `CFLAGS_FOR_TARGET` / `CXXFLAGS_FOR_TARGET`, `SUBARCH` и `SUBMODE`.
## Флаги компиляции
| Переменная | Значение | Назначение |
|------------|----------|------------|
| `CFLAGS` | `-O2` | Базовые флаги оптимизации |
| `CFLAGS_FOR_TARGET` | `-Os -mthumb` | Оптимизация по размеру, Thumb для target |
| `LDFLAGS` | `-Wl,--fdpic` | Линковка с поддержкой FDPIC (при полной настройке toolchain) |
## Структура каталогов
```
build-toolchain/
├── build-toolchain.sh # Основной скрипт сборки
├── build-libraries.sh # Сборка дополнительных библиотек
├── package-toolchain.sh # Упаковка готового тулчейна
├── download_prerequisites.sh # Загрузка исходников
├── scripts/
│ └── env.sh # Настройка окружения (копируется в архив)
├── config/ # Конфигурации uClibc
│ ├── config-uClibc-ng-1.0.34
│ └── …
├── src/ # Исходный код (после загрузки)
│ ├── toolchain/ # Архивы компонентов тулчейна
│ └── libs/ # Архивы библиотек
└── build/ # Каталог сборки (создаётся автоматически)
```
## Лицензия
Компоненты тулчейна распространяются под собственными лицензиями (GPL, LGPL и др.).