GNAT Community Editionの後継 ============================ .. post:: Jul 20, 2022 :tags: gnat `A New Era For Ada/SPARK Open Source Community | The AdaCore Blog `_ によりますと、 `GNAT Community Edition`_ は2021年版で終了のようで、代わりに `Alire`_ というパッケージマネージャに移行していくようです。 .. container:: gray-and-small 正直に申しましてこの手の処理系ごとにパッケージマネージャを再発明する流行どうにかならないかな……と思っているのですが、まあそれはそれとしまして。 Adaフロントエンド込みのgccを用意しようとするときGNAT Community Editionは貴重なビルド済みバイナリでした。 Linuxですとほぼ全てのディストリビューションのパッケージとして用意されていますのでバージョンを気にしないなら苦労はありませんが、macOSとWindowsではそもそも動作するバイナリをどこから持ってくるかという問題があります。 Linuxでもバージョンを気にするならば問題となります。 gccをAdaフロントエンド込みでビルドするにも同じかひとつ前のバージョンのgccをAdaフロントエンド込みで必要としますのでブートストラップのためには特定のバージョンのバイナリを用意できないといけません。 他の選択肢としましては、macOSでは\ `Simon Wrightさんが野良ビルドを配布してくださっています `_\ 。 (`私もこっそりと…… `_)。 Windowsでは `MSYS2`_ や `Cygwin`_ があります。 でも開発元が配布しているGNAT Community Editionの方が安心ですよね。 というわけでAlireを用いてビルド済みコンパイラを取ってくる方法をメモしておきます。 Alireのインストール ------------------- `githubにビルド済みバイナリが置かれています `_\ ので、適当に展開してPATHを通すだけです。 現在のところ実行ファイルひとつで動作するようです。 gccとgprbuildのインストール --------------------------- ``alr toolchain --select`` を実行しますとgnat_nativeとgprbuildのそれぞれについてどのバージョンを使用するか尋ねられますので、それぞれ選ぶだけでダウンロードと展開を行ってくれます。 1が最新版っぽいです。 コンパイラはアーキテクチャ指定版ではなくgnat_nativeを選びます。 .. code-block:: sh % alr toolchain --select Welcome to the toolchain selection assistant In this assistant you can set up the default toolchain to be used with any crate that does not specify its own top-level dependency on a version of gnat or gprbuild. If you choose "None", Alire will use whatever version is found in the environment. ⓘ gnat is currently not configured. (alr will use the version found in the environment.) Please select the gnat version for use with this configuration 1. gnat_native=11.2.4 2. None 3. gnat_arm_elf=11.2.4 4. gnat_avr_elf=11.2.4 5. gnat_riscv64_elf=11.2.4 6. gnat_arm_elf=11.2.3 7. gnat_native=11.2.3 8. gnat_riscv64_elf=11.2.3 9. gnat_arm_elf=11.2.2 0. gnat_native=11.2.2 a. (See more choices...) Enter your choice index (first is default): > 1 ⓘ Selected tool version gnat_native=11.2.4 ⓘ Choices for the following tool are narrowed down to releases compatible with just selected gnat_native=11.2.4 ⓘ gprbuild is currently not configured. (alr will use the version found in the environment.) Please select the gprbuild version for use with this configuration 1. gprbuild=22.0.1 2. None 3. gprbuild=21.0.2 4. gprbuild=21.0.1 Enter your choice index (first is default): > 1 ⓘ Selected tool version gprbuild=22.0.1 ⓘ Deploying gprbuild=22.0.1... ######################################################################### 100.0% ⓘ gprbuild=22.0.1 installed successfully. ⓘ Deploying gnat_native=11.2.4... ######################################################################### 100.0% ⓘ gnat_native=11.2.4 installed successfully. sparkのインストール ------------------- GNAT Community Editionには静的検証を行うspark(gnatproveコマンド)も付いてきていましたのでこれもインストールしたくなるかもしれません。 ツールチェインであれば ``alr toolchain`` コマンドでインストールできるのですがgnatproveはツールチェイン扱いではないようですので適当なAlire管理下のプロジェクトのディレクトリの中で依存関係としてインストールする必要があるようです。 gnatproveをインストールしたいだけですので作業用のAlireプロジェクトはなんでもいいのですけれども、チュートリアルにもあるHello Worldを使いましょうか。 ``alr get hello`` で取ってこれます。 後は中に ``cd`` して ``alr with gnatprove`` でインストールできます。 .. code-block:: sh % cd /tmp % alr get hello ⓘ Deploying hello=1.0.1... ######################################################################### 100.0% ⓘ Deploying libhello=1.0.0... ######################################################################### 100.0% hello=1.0.1 successfully retrieved. Dependencies were solved as follows: + libhello 1.0.0 (new) % cd hello_1.0.1_dcc36a2f % alr with gnatprove Requested changes: ✓ gnatprove ^11.2.3 (add) Changes to dependency solution: +♼ gnatprove 11.2.3 (new,installed) Do you want to proceed? [Y] Yes [N] No (default is Yes) Y ⓘ Deploying gnatprove=11.2.3... ######################################################################### 100.0% ⓘ gnatprove=11.2.3 installed successfully. インストール先ディレクトリ -------------------------- こうしてインストールしたgnat_native、gprbuild、gnatproveはAlireの外からでも使える形でインストールされています。 `$HOME/.config/alire/cache/dependencies` の中になります。 ディレクトリは `cache` という名前ですが所謂HTTPキャッシュではなく展開済みです。 .. code-block:: sh % ls ~/.config/alire/cache/dependencies/ gnat_native_11.2.4_2f37a10b gprbuild_22.0.1_24dfc1b5 gnatprove_11.2.3_f7ece6d3 それぞれの `bin` ディレクトリにPATHを通すだけです。 GNAT Studio ----------- GNAT Community EditionにはIDEであるGNAT Studioも付いてきていました。 現在のところAlireのパッケージにはなっていないようですが、\ `ビルド済みバイナリがgithubで配布されています `_\ 。 Visual Studio Code使いましょう。 .. _`Alire`: https://alire.ada.dev/ .. _`Cygwin`: https://www.cygwin.com/ .. _`GNAT Community Edition`: https://www.adacore.com/download .. _`MSYS2`: https://www.msys2.org/