# 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.7.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 # Сборка дополнительных библиотек ├── download_prerequisites.sh # Загрузка исходников ├── scripts/ │ └── env.sh # Настройка окружения (копируется в архив) ├── config/ # Конфигурации uClibc │ ├── config-uClibc-ng-1.0.34 │ └── … ├── src/ # Исходный код (после загрузки) │ ├── toolchain/ # Архивы компонентов тулчейна │ └── libs/ # Архивы библиотек └── build/ # Каталог сборки (создаётся автоматически) ``` ## Лицензия Компоненты тулчейна распространяются под собственными лицензиями (GPL, LGPL и др.).