Files
build-toolchain/README.md
Egor Tsyganchuk d16bb178b0 Update README.md to clarify env.sh usage and toolchain modes
- Added detailed instructions for two modes of operation in env.sh: normal mode and full toolchain mode.
- Updated the deactivation command to reflect changes in the toolchain registration process.
- Revised default CFLAGS for host/toolset builds to enhance clarity and consistency.
2026-03-31 08:24:02 +03:00

134 lines
5.6 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.55 | Стандартная библиотека C |
### Дополнительные библиотеки
| Библиотека | Версия | Назначение |
|--------------|--------|---------------------------|
| zlib | 1.2.13 | Сжатие данных |
| OpenSSL | 3.0.13 | Криптография |
| LibVNCServer | 0.9.14 | VNC-сервер |
| FreeType | 2.13.2 | Рендеринг шрифтов |
Все библиотеки собираются статически.
## Характеристики целевой платформы
- **Архитектура:** ARM 32-bit (ARMv7-m)
- **Набор инструкций:** Thumb
- **ABI:** EABI с поддержкой FDPIC
- **Плавающая точка:** программная (soft float)
- **Потоки:** отключены
- **TLS:** отключён
## Зависимости хостовой системы
- bash
- make
- gcc (или другой C-компилятор для хоста)
- cmake
- wget
- tar
- стандартные утилиты (grep, sed и т.д.)
## Использование
### 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.55.tar.xz`.
### 3. Настройка окружения
Есть два режима работы `env.sh`.
Обычный режим:
```bash
source ./env.sh
```
Этот режим работает "как раньше":
- добавляет `${PWD}/arm-uclinuxfdpiceabi/bin` в `PATH`
- задаёт `CFLAGS`, `CFLAGS_FOR_TARGET`, `CXXFLAGS_FOR_TARGET`
- задаёт `SUBARCH=armv7-m` и `SUBMODE=thumb`
- не переопределяет `CC`/`CXX`, поэтому не мешает хостовой сборке под WSL
Режим полного toolchain-окружения:
```bash
source ./env.sh --toolchain /путь/к/install [arflags]
```
Этот режим используется сборочными скриптами и дополнительно устанавливает `CC`, `CXX`, `CPP`, `LD`, `AR`, `RANLIB`, `STRIP`, `OBJCOPY`, `OBJDUMP`, `SYSROOT`, `LDFLAGS` и добавляет путь к тулчейну в `PATH`.
Деактивация:
```bash
source ./env.sh --toolchain --unregister
```
## Флаги компиляции
| Переменная | Значение | Назначение |
|------------|----------|------------|
| `CFLAGS` | `-O2` | Флаги хостовой/toolset-сборки по умолчанию |
| `CFLAGS_FOR_TARGET` | `-Os -mthumb` | Оптимизация по размеру, Thumb-инструкции для target |
| `LDFLAGS` | `-Wl,--fdpic` | Линковка с поддержкой FDPIC |
## Структура каталогов
```
build-toolchain/
├── build-toolchain.sh # Основной скрипт сборки
├── build-libraries.sh # Сборка дополнительных библиотек
├── download_prerequisites.sh # Загрузка исходников
├── env.sh # Настройка окружения
├── config/ # Конфигурации uClibc
│ ├── config-uClibc-ng-1.0.34
│ └── config-uClibc-ng-1.0.55
├── src/ # Исходный код (после загрузки)
│ ├── toolchain/ # Архивы компонентов тулчейна
│ └── libs/ # Архивы библиотек
├── build/ # Каталог сборки (создаётся автоматически)
└── install/ # Каталог установки (создаётся автоматически)
```
## Лицензия
Компоненты тулчейна распространяются под собственными лицензиями (GPL, LGPL и др.).