OpenBSD上的工作D编译器

2021-03-20 23:35:12

我得到了GDC,GNU D编译器,在OpenBSD上工作。支持D已经很长时间了。在这里,我们在这里到达的故事以及我们需要走的故事。

回到2017年的方式是我第一次学习D.似乎有趣,我们没有港口。我喜欢挑战所以我想我会试一试。我最终设法获得LDC,LLVM D编译器,在OpenBSD上构建。或者,至少,它的LTS版本。这是一个不需要D编译器来引导的最后一个版本,并且声称能够构建最新版本的LDC。我从来没有结束尝试它,所以我从来没有能够直接证实这一点,但我没有理由怀疑他们。

但后来我被困了。请参阅,d完全继承C库。而D标准库,PHOBOS,有效地需要与LIBC完全绑定。 OpenBSD没有OPER,虽然有一个完整的FreeBSD的PHOBOS。我试图复制OpenBSD上的FreeBSD绑定,但绝不能完成它。 FreeBSD和OpenBSD之间有足够的微妙差异,我只是没有时间完成它。直到我可以致力于它的重要资源,必须在永久的背部燃烧器上。

在临时岁月中,人们继续为OpenBSD增加支持。已经提交针对DMD的OpenBSD支持,D参考编译器,Druntime,静态支持库提供Libc绑定,以及D标准库。然而,我怀疑没有人真正尝试在OpenBSD上运行完整的D Toolchain。这些提交不够。然而,我很高兴我不必这样做,感谢每个人的工作,这让我的工作更容易!

它开始了陷入困境。很久没有秘密,我一直在OpenBSD上跟踪GCC头。截至GCC 9,GDC被纳入GCC。它就是如此,即时GDC' s d前端仍然用c ++写入。我们可能能够编译它!所以我在我的BuildBot上添加了要构建的语言列表,并等待看到发生了什么。

好吧它失败了。可能不想出来。第一顺序业务:将OpenBSD添加到libphobos' s configure.tgt。再试一次,...更多失败。在OpenBSD的数学库绑定中,Druntime正在寻找__fpclassifyd符号,但在OpenBSD上的符号名为__fpclassify。修复它......好吧,它建成了!但它实际上支持OpenBSD。事实证明,您必须向GCC Build添加其他支持文件以获取GDC识别OpenBSD。比我预期的那样太长了。

其他一些修补程序稍后,我们终于拥有一个完全建立的GDC,即识别OpenBSD。大多数事情都在工作。但奇怪的是,DUB,D包管理器将在尝试远程获取软件包时拍摄。我最终发现,使用静态的libgphobos.a而不是共享libgphobos.so修复了问题。我不知道为什么这是作品,但我已经前进并禁用了现在的建筑物和安装共享的Libgphobos。它类似于静态编制Libc进入所有C程序,我个人不'这么多。 Phobos库不是那么大,我现在没有在我的机器上有很多D节目。

我最终提出了对DMD的转发OpenBSD支持,该支持是致电的。可以从GDC引导的DMD能够在使用前往移植的Druntime时重建,因此正在进行提交。具有能够重建本身的参考编译器是确保持续的D支持的一步。即使D语言基础没有正式支持OpenBSD,D,Creator的Walter Bright,请告诉我,欢迎对OpenBSD的上游支持。我对这种安排感到满意,很受欢迎。

虽然所有三个D编译器都可以构建一旦您拥有GDC,只有GDC全部工作。这是因为d需要线程本地存储,OpenBSD尚不支持。通过使用来自GCC的模拟TLS来实现GDC,添加GDC'自己的额外TLS仿真。这在OpenBSD上有效。我尚未尝试将GDC TLS仿真映射到DMD或LDC,但它位于我的尝试列表中。也许这就是足够的。

GDC完全工作后我做的第一件事是创建一个为承诺提供D绑定的包(2)。任何体面的语言都有这样的绑定。它也很容易实施。现在包已发布,您可以简单地将其添加为您的D程序以及从OpenBSD中受益于OpenBSD和#39; S安全功能。是的,我最终会加入揭幕(2)。

我不确定GDC港口如何工作。我仍然需要上游GDC的变化。我想如果人们想要为自己尝试GDC,我可以为您提供将其设置在系统上的软件包。但是您将获得全部GCC-11.0.1。没有道歉。并零支持。当您安装它时不仅是真正的包,我将已经搬到了GCC树的最新头部。理想情况下,我们将在DMD或LDC(或两者)上获得模拟TLS支持。然后,我可以轻松地使用GDC执行Bootstrap。我们可以轻松为DMD和LDC进行启动并具有仿真TLS,为DMD和LDC提供端口。

那个'我如何在OpenBSD上完成最后一英里的最后一英里的凝聚体故事。我想我可以将此作为与下一个DConf会议的谈话。我认为这会很有趣,并会提供一种不同的谈话,对每个人来说仍然非常有趣。