我如何获得适用于 Solaris 11 的 Ada GNAT gcc 7.3?

How can I get Ada GNAT gcc 7.3 for Solaris 11?

我们有一个带有gcc 7.3 的Solaris 11 系统,我们需要安装Ada 包。在 Linux gcc 7 附带 Ada/GNAT 作为 gcc 安装的一部分:

 apt install gcc

我访问过AdaCore 貌似Solaris (SPARC) 已经不在名单上了。我需要使用 Ada95,并且无论如何我们都希望在 Linux 和 Solaris 上使用相同的编译器。

pkg install gcc

只安装了各种C++命令和Fortran。

pkg install gcc-ada

和 gcc7ada 之类的变种,找不到任何可安装的东西。

如果必须的话,我们可以重建 GCC 7 的 Ada 组件,但是我还没有找到明确的食谱风格"How To ..."(目前)。

希望您能按优先顺序向我指出这些项目,以帮助我们重回正轨。

  1. 用于 gcc7/Solaris 11 spark 的 Solaris 11 gcc-ada 包和包存储库。
  2. 一个 'alternative' 包存储库,我可以检索 GCC Ada 工具。
  3. 预构建 GCC 7 Ada 模块,我们可以将其复制到正确的位置。
  4. Solaris 的现成构建 Ada/GNAT 项目以及如何下载和开始构建。
  5. 在 Solaris(或 Unix)上使用 gcc 7 下载和构建 gcc-ada 的说明。

从过去几天在 Gnu Compiler Collection、Oracle、包管理器搜索中搜索,google 等等……看起来真的好像在 Solaris 上几乎不支持 CGG Ada 这些天。

我对该列表之外的其他解决方案非常感兴趣。例如,有人从 Linux 交叉编译到 Solaris 吗?无论如何,它可以在 Solaris 机器上与 GDB 一起工作吗?

期待您的建议。

请注意,我对 Solaris 了解不多,但在 Google 上快速搜索后,我找到了 OpenCSW 网站。本网站提供软件包 gcc4ada and gcc5ada.

gcc5ada 似乎是使用 makefile 构建的(发现 here, in particular notice line 424). A similar makefile exists for gcc7ada (as found here,特别注意第 426 行)。然而,虽然似乎可以使用后一个 makefile 创建软件包“gcc7ada”,但它并未发布在 OpenCSW.org 网站上(网站不再更新?)。

您可以尝试先安装 gcc5ada,然后使用这个旧的 GCC/GNAT 编译器作为引导程序来编译所需的版本(使用 GCC 7 makefile)。

我已经使用以下过程在 OpenIndiana (Hipster 2020/10) 上使用 GNAT 成功构建了 gcc 7.50(x86_64 原生的 i386 交叉编译器)。

  1. 从位于 http://downloads.dragonlace.net/src/ada-bootstrap.x86_64.solaris.511.tar.bz2

    的 Dragonlace 下载 bootstrap 编译器
  2. https://github.com/illumos/gcc/tree/il-7_5_0

    获取 illumos gcc 7.5.0 源
  3. 将bootstrap编译器的bin目录放在$PATH的前面,将/usr/bin/gcc/usr/bin/cpp/usr/bin/g++替换为对应的符号链接在 bootstrap 编译器目录中(请参阅下面关于 g++ 和 c++ 的注释)

  4. 确保你有 gnu-binutils 和 gmake;然后 运行 contrib/download_prerequisites

  5. 配置为 --enable-languages='c ada c++' --build=x86_64-aux-solaris2.11 --enable-threads=posix --disable-libmudflap --disable-libgomp --disable -libssp --disable-libquadmath --disable-nls --disable-shared --disable-lto --disable-libstdcxx-pch --enable-multilib --with-gnu-as --with-as=/usr/bin/gas --without-gnu-ld --with-ld=/usr/bin/ld

  6. gmake 然后 gmake 安装

注意事项: 此设置应该足够接近 Solaris 11 才能正常工作。如果没有,请尝试使用常规的 gcc 7.5.0 版本而不是 illumos-modified 分支。

如果您在链接阶段遇到困难,请尝试使用 gcc ld,但您绝对应该首先尝试使用 Solaris ld。 gnu as (gas) 使构建过程更加顺利。我没有遇到任何问题,但如果你在第 1 阶段结束或第 2 阶段开始时遇到困难,请尝试设置 $CONFIG_SHELL=/usr/bin/ksh -- 我认为它已被修复,但是至少对于较旧的 gcc 版本,需要指定 ksh,因为内置的 sh 有一些非POSIX 特性,这些特性不适用于某些组件的 makefile

如果不构建 gcc c++ 并使用具有完整 bootstrap 的 g++,我无法获得 gnat 的支持库之一以轻松编译。您也许能够弄清楚,但阻力最小的路径可能是构建 gcc c++ 并将 g++ 符号链接放在 /usr/bin 中,这是 makefile 想要找到它的地方。