Самый простой путь — использовать alire.
Но если Вам интересны подробности и варианты, мы рассмотрим их в этой статье.
Из бесплатных вариантов на данный момент доступен компилятор Ады из состава коллекции компиляторов GCC (the Gnu Compiler Collection). Он называется GNAT (акроним GNU NYU Ada Translator).
Компилятор имеет открытый исходный код. Как и все подобные проекты его нетрудно собрать самостоятельно, но существуют различные, уже готовые к использованию, сборки.
Этот способ установки подойдёт для систем Linux, Windows и Mac OS X с процессором x86_64 (либо aarch64, например Raspberry Pi 4).
Alire это пакетный менеджер для Ады. Он включает в себя каталог проектов (crates — библиотек или готовых программ) и соответствующую утилиту для их установки и сборки. Аналогичные менеджеры есть в других языках (cargo в Rust или opam в OCaml). Alire может поставить и компилятор.
Установить Alire можно скачав последний релиз с github и прописав путь к нему в переменную PATH. На Windows, при первом запуске, alr предложит установить msys2, что рекомендуется сделать.
Более подробно о работе с alire мы расскажем в отдельной статье.
Для установки компилятора запустите
alr toolchain --select gnat_native gprbuild
Alire скачает и распакует компилятор в домашний каталог (.config/alire/cache/dependencies/*). Далее он будет использовать его для сборки проектов. Вне Alire вы тоже можете использовать этот компилятор, если пропишите его в переменную окружения PATH. Опцией --install-dir= можно заставить Alire ставить компилятор в другое место.
Мы собрали Alire для процессора Aarch64, скачать его можно здесь.
Как ещё один вариант сбороки GNAT можно рекомендовать использовать дистрибутив msys2. Эта система управления пакетами (пакетный менеджер) для Windows. Она основана на форке pacman, основного пакетного менеджера дистрибутива Arch Linux. После ее установки появляется возможность пользоваться bash, autotools и прочим ПО, характерным для POSIX систем. Установка выполняется в несколько шагов
pacman -S mingw-w64-gcc-ada
В современных дистрибутивах Linux GNAT FSF обычно входит в список пакетов готовых для установки. Версии компилятора и наличие библиотек разработки на языке Ада варьируются в зависимости от дистрибутива Linux.
Выгодно выделяется на общем фоне Fedora Linux. Так Fedora 33 предлагает 10.2.1 для архитектур x86_64, ia64, ppc, ppc64, alpha, arm и aarch64, а Fedora 34 — 11.0.1. Достаточно установить компилятор и утилиту сборки:
dnf install gcc-gnat gprbuild
В Debian компилятор более старый. Debian 10 предлагается GNAT 8.3. Дистрибутив Ubuntu основан на Debian. Ubuntu 20.04 предлагает компилятор GNAT 9.3 Для платформы ARM есть популярный дистрибутив Raspbian. Он также основан на Debian и в нем тоже есть GNAT FSF (например в buster идет gnat 8). Установить компилятор можно так:
apt install gnat gprbuild
Также стоит упомянуть дистрибутив OpenSUSE. В Leap 15.2 идет компилятор 7 (но есть и более поздние версии). Пакета gprbuild в стандартной поставке нет.
zypper install gcc-ada
Специальная редакция GNAT Community Edition последний раз была выпущена в 2021 году (под Mac OS X в 2020). Она отличается лицензией GPL на библиотеку времени исполнения, как следствие пользователь должен публиковать свои исходные тексты под лицензией GPL, если он распространяет свою программу в бинарном виде. Зато она боле тщательно оттестирована и (на момент выпуска) имеет более свежий «фронтэнд» со всеми новыми возможностями компилятора. Эта редакция содержит GNAT Studio IDE (которая может работать и с другими версиями GNAT), gprbuild, несколько библиотек от AdaCore и другие инструменты.
Для тех, кто умеет пользоваться docker не составит труда запустить GNAT Community версию в контейнере:
docker run -i -t reznik/gnat:gpl.2021.fc34.slim
Версия .slim отличается отсутствием интегрированной среды разработки GNAT Studio и дополнительных библиотек (GNATCOLL, XmlAda, AWS, AUnit и др.). Ее удобно использовать в системах непрерывного тестирования ввиду сравнительно небольшого размера образа контейнера.
Ещё несколько вариантов для работы под Mac OS X:
Для FreeBSD, DragonFly, OpenBSD и прочих развивается порт GNAT FSF на сайте www.dragonlace.net. Там же есть и кросс компиляторы для Android.
GNAT GCC 10 и 11 работает в NetBSD. Подробнее по ссылке.
Интересный вариант — компиляция Ады в LLVM. Этот подход открывает возможности использования Ады с LLVM инструментарием, а значит можно относительно несложно получить поддержку тех архитектур, которые есть в LLVM. В том числе WebAssembly, OpenCL SPIR-V, и др. На github выложены исходные тексты компилятора GNAT LLVM. Процесс построения описан в README.md. Помимо исходных текстов GNAT LLVM также необходимы исходные тексты GNAT, сам LLVM и clang. Для построения нужен работаеющи компилятор Ады. Подойдет GNAT Community Edition 2019 или даже GNAT FSF 8. Использовать GNAT Community, наверное предпочтительней, тк. там есть поддержка GNAT LLVM в конфигурационных файлах gprbuild/gprconfig. Зато GNAT FSF 8 и другие зависимости можно поставить в Ubuntu прямо «из коробки». Вот как выглядит установка на Ubuntu 19.04:
git clone https://github.com/AdaCore/gnat-llvm.git cd gnat-llvm svn co svn://gcc.gnu.org/svn/gcc/trunk/gcc/ada llvm-interface/gnat_src sudo apt install -y llvm-dev clang cmake gnat gprbuild g++ make export PATH=$PWD/llvm-interface/bin:$PATH cat > hello.adb << EOF with Ada.Text_IO; procedure Hello is begin Ada.Text_IO.Put_Line ("Hello"); end; EOF llvm-gnatmake hello.adb
Компилятор ObjectAda распространяется на коммерческой основе. Он доступен для Windows и (относительно недавно) для Linux. Если вы разрабатываете програмное обеспечение с открытым исходным кодом, можно попросить бесплатную версию компилятора. См. подробности на reddit.
Адаптация GNAT LLVM для компиляции в WebAssembly и запуска в браузере называется AdaWebPack. Есть RPM‐ы для Fedora 33/34, но проще всего запускать из Docker построив образ:
docker build --tag wgprbuild2 - <<EOF FROM registry.fedoraproject.org/fedora-minimal:33 RUN microdnf --assumeyes install \ make \ rpmdevtools \ gcc-gnat \ gcc-c++ \ libstdc++-static \ clang \ llvm-devel \ lld \ gprbuild \ gdb \ git \ subversion \ openssh-server \ tar \ gzip \ chrpath \ ca-certificates && \ curl -o adawebpack-0.1.0-git.fc33.x86_64.rpm \ https://download.copr.fedorainfracloud.org/results/reznik/adawebpack/fedora-33-x86_64/02306488-adawebpack/adawebpack-0.1.0-git.fc33.x86_64.rpm && \ rpm -i adawebpack-0.1.0-git.fc33.x86_64.rpm && \ rm -f adawebpack-0.1.0-git.fc33.x86_64.rpm && \ microdnf clean all EOF
И запускать его скриптом
#!/bin/bash exec docker run --rm --tmpfs /tmp/ --user $UID --volume $HOME:$HOME --workdir $PWD wgprbuild2 gprbuild "$@"
Alire может также поставить кросс компилятор в ARM или RISC-V. Он позволяет собирать программы для для некоторый “голых досок” (bareboard, без ОС) с процессорами ARM Cortex M3, ARM Cortex M4F, ARM Cortex R4F или RISC-V.
alr toolchain --select gnat_arm_elf alr toolchain --select gnat_riscv64_elf
Я включил Аду в кросс компиляторе для ESP32. Библиотека времени исполнения опирается на FreeRTOS. Как использовать описано здесь.
С помощью Fedora оказалось не трудно получить кросс компилятор Linux -> Windows. В дистрибутив Fedora включен кросс компилятор в Windows, но в нем нет поддержки Ады. Включит Аду оказалось довольно легко. Вот например пакеты собранные для Fedora 24 https://build.opensuse.org/package/show/home:reznik/mingw-gcc Воспользоваться ими можно так:
dnf install --assumeyes dnf-plugins-core dnf config-manager --add-repo http://download.opensuse.org/repositories/home:reznik/Fedora_24/home:reznik.repo dnf --assumeyes install gcc-gnat gprbuild mingw32-gcc-gnat mingw64-gcc-gnat
Либо воспользоваться готовым Docker образом:
docker pull reznik/matreshka-cross docker run -i -t reznik/matreshka-cross /bin/bash
Интересные эксперименты можно провести используя AdaMagic. Этот компилятор имеет давнюю историю. Сейчас он распространяется MapuSoft, как часть их продукта Ada-C/C++ Changer™. Пользователь OCTAGRAM провел целое исследование и записал руководство, как скачать, поставить и начать использовать этот транслятор.
Подробности можно узнать на форуме forum.pascal.net.ru (требуется регистрация).
ноябрь 2021