我得到了在OpenBSD上工作的GNU Modula-2编译器

2021-04-04 12:16:11

当鸣则已一鸣惊人。在与D的溅起后,1我想象一段时间我开始尝试将GNU Modula-2编译器带到OpenBSD。因为为什么不呢? Modula-2是一种存在的语言,并具有编译器实现。我猜我的目标是将所有语言和编译器带到OpenBSD。一如既往,有课程要学习。所以,让'学到了一些。

与GDC不同于已正式集成到GCC的GDC,GM2存在于官方GCC存储库中。有了这一说,设置相对简单。在GM2下载页面上有预先设置的存储库,您可以使用Git克隆。或者,如果git isn' t你的东西,有tarballs与git存储库相同的内容。或者如果您真正讨厌编译并碰巧运行Debian,则有一些预先构建的二进制文件可用。但当然,我们在OpenBSD上所以让'编译。我选择了当前的开发分支,它使用GCC-11作为其基础。

让' s只是为了它。让'建立并看看会发生什么。也许我们会幸运。

惊喜惊喜,我们击中了一个构建错误。这一个我从Josh Rickmar获得了一点帮助,我已经知道了很多,一直都回到Devio.us天。谢谢乔希!

问题是C ++编译器在重新诠释_Cast< *&gt上失败了。 (无效的)。事实证明,在OpenBSD上,如果您正在编译C ++ 11或更高版本,Null会扩展到NULLPTR。标准留下了要定义的null的扩展。所以我试过了几个Linux Distrs和FreeBSD比较。似乎每个Linux,null对__null无条件地扩展。在FreeBSD上,null扩展到依赖于所用的编译器:如果使用基础克朗null展开到nullptr,而如果使用gcc-10的包,则null扩展到__null。由于GNU Modula-2使用C ++ 11,这是OpenBSD的问题。然而,OpenBSD' NULL的扩张根据标准是合法的,所以我不相信改变它是需要做的。相反,我们可能会添加到GM2额外的预处理器检查__openBSD__,如果是那个' s true那么我们应该unefine null并将其重新定义为__null。目前,我只是注明了在sys / _null.h中的检查,以强制null展开__null。

拒绝零扩建后,建筑持续顺利。但是,我收到了一系列链接错误,告诉我__builtin_unroachable没有解决。该符号首次出现在GCC-4.5中,让我认为可能以某种方式来自GCC-4.2.1的Libgcc,它仍处于OpenBSD / AMD64基础系统,在GCC-11之前正在拾取。这里的沉重方法:我用新的GCC-11 Libgcc替换了旧的GCC-4.2.1 Libgcc。我不实际使用基于基础的GCC的任何东西,我会发现一天会删除它。理想情况下,这将是固定的,但我对获得GM2的工作更感兴趣,然后我们可以回去解决这些问题。

建筑继续直到它试图构建GM2插件。不幸的是,构建系统尝试拾取GMP.h,但构建系统不包括MPP包含编译器调用中的目录。这似乎是应该修复的GM2开发人员的监督。

gm2.texi文件没有使用基础MakeInfo或From-Ports MakeInfo构建。所以我摆脱了它。如果需要,可以始终阅读在线文档。

然后构建成功完成!这令人惊讶地容易。现在是时候测试它了。幸运的是,由于GM2在测试页面上,因此很容易。我跑了测试并发布了结果。这不是那么糟糕。有很多失败,但它远远超过了。我与结果写入GM2邮件列表。我希望很快能听到开发商的回复。

但是构建保持失败!首先,它看起来像GM2找不到自己的标题。一旦我手动添加了那些,我有很多链接器错误。我最终追踪了一些非常旧的GM2文档在旧的FTP站点上掉了出来的旧FTP网站,始终始终拥有-i。在所有编译器调用中。这确实是魔法补充。一旦我添加了-I。编译正常工作,而无需添加其他任何内容:gm2 -i。 hello.mod。它确实留下了大量的中间文件,并且出现在C ++中将调制模块-2转换为,然后将C ++编译为二进制文件。编译的二进制文件也奏效,这是一个很好的重新确认,我确实建立了一个工作编译器。

我希望GM2开发人员很快就会回复我的邮件列表帖子。我要将TestSuite失败降至零。而且我也想提交修补程序以确保OpenBSD构建只是作品。没有关于补丁提交的工作原理的说明,所以我在邮寄名单帖子中询问。随着GM2的发展,终于准备合并到GCC,现在是获得OpenBSD支持的那些非常小的调整的完美时间。对GM2团队的持久性和奉献精神先发制人祝贺。但我也想确保OpenBSD可以在合并发生的那一天在盒子中建造GM2。

作为创建,进口和维护GNU Pascal港的人,我仍然使用,遗憾的是在没有人在破裂后搬到维护之后搬到港口的唯一剩余的帕斯卡编译器,我猜我必须对Wirth语言具有一些亲和力。

但我也喜欢移植编译器和其他工具链条。我认为这一切都是关于它的梅塔。无论如何,我希望你喜欢这个冒险进入GNU Modula-2在OpenBSD上工作!

1有趣的是,由于我对D标准库的贡献,我的名字现在将显示在GCC源树中。