# 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 - bzip2 - tar - стандартные утилиты (grep, sed и т.д.) Для Ubuntu/WSL можно установить минимальный набор так: ```bash sudo apt update sudo apt install -y make gcc g++ cmake wget bzip2 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.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 и др.).