Files
build-toolchain/README.md
Egor Tsyganchuk f7a908f096 Update build-toolchain.sh and README.md for toolchain environment script changes
- Modified build-toolchain.sh to copy env.sh from the scripts directory instead of the top-level directory, ensuring proper organization.
- Updated README.md to reflect the new version of uClibc-ng and clarify the structure of the output archive, including the location of env.sh within the archive.
2026-03-31 18:09:01 +03:00

5.8 KiB
Raw Blame History

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 Рендеринг шрифтов

Все библиотеки собираются статически.

Характеристики целевой платформы

  • Архитектура: ARM 32-bit (ARMv7-m)
  • Набор инструкций: Thumb
  • ABI: EABI с поддержкой FDPIC
  • Плавающая точка: программная (soft float)
  • Потоки: отключены
  • TLS: отключён

Зависимости хостовой системы

  • bash
  • make
  • gcc (или другой C-компилятор для хоста)
  • cmake
  • wget
  • bzip2
  • tar
  • стандартные утилиты (grep, sed и т.д.)

Для Ubuntu/WSL можно установить минимальный набор так:

sudo apt update
sudo apt install -y make gcc g++ cmake wget bzip2 tar sed grep xz-utils

Использование

1. Загрузка исходников

./download_prerequisites.sh

Скрипт загружает архивы исходного кода всех компонентов в каталоги src/toolchain/ и src/libs/. Уже загруженные архивы пропускаются.

2. Сборка тулчейна

./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:

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 и др.).