今天抽空整理了下GCC和LLVM+Clang+libc++abi的编译脚本和libatbus的CI

好久没更新这一套脚本啦。主要是最近没抽出太多时间来跟进,并且最近这些开源组件的release版本都有些问题。

今天脑子不好使,就抽点时间来跟进一下这个。

我的构建环境都是 CentOS 7.1,其他环境没有测试,但是一般来说GCC的脚本不会有什么问题,因为之前在其他的各个平台上测试过,而且流程改动较少。
LLVM+Clang就不一定了,不过问题应该也不大。最多一些目录和依赖库方面的小调整应该就行。

GCC

之前也说过,GCC 5.3以来很多配套的东西都移除了对**cloog**的依赖(最后一项是binutils)。所以我会等所有的组件都更新后发一个完整并且干净的编译脚本。

然而等binutils完成的时候,最新版本(7.10.1)的gdb的编译头文件依赖又出现了问题。这两天gdb发新版本解决了这个问题,所以就刚好可以一口气跟进完。

至此,GCC 5.3+gdb 7.11+binutils 2.26 整条链构建完成。依赖库也更新到了各个组件的最新release版本。开始全面使用新的isl库和移除cloog。

编译脚本在这里:https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer

LLVM+Clang+libc++abi的编译脚本

苹果的这一套东西构建脚本一直不是很完善,总会有各种奇怪的问题。所有已相当长一段时间我没有去跟进它。现在也同时大规模整理一下。

首先还是恢复了以前的一个目录patch,加了之后才能保证install不出错。另外改成了大规模使用动态库,因为以前都用静态库导致二进制巨大无比,好几百MB太夸张了,而且以前构建动态库的流程也有问题。

然后就是llvm里并非每个组件都按llvm的规范走,有些组件就是要非主流,所以我在构建的是后强制把libcxxabi的头文件目录加到搜索目录里了。

现在基本测试通过,clang既可以用libc++,也可以用gcc的libstdc++作为STL库,但是用libstdc++的时候只能开到-std=c++11,开不了-std=c++14。使用libc++就完全没问题了。

另外如果用-stdlib=libc++,那么必须加-lc++abi来链接c++ abi进来。我这里测试了lldb和lld都能编译出来,但是没再测试了。
编译出来的二进制不再依赖libstdc++,而依赖llvm系列自带的libc++,但是仍然会依赖一个gcc的库.libgcc_s.so这个蛮底层的也没太大剥离的必要。

不过顺便一提的就是,llvm+clang这一套东西非要比较高版本的编译器才能编出来,貌似用到了比较高级的特性。也就是说,如果系统编译器比较老的话,可能只能先编上面的GCC,再用上面的GCC来编译这个。或者用LLVM+Clang系一个版本、一个版本编过来也行。

编译脚本在这里:https://github.com/owent-utils/bash-shell/tree/master/LLVM%26Clang%20Installer

libatbus

今天还整理了libatbus的CI和跨平台方面的一些东西。Windows版本的脚本配合Msys2那是相当难写,搞了好多遍。

然后CI环境还会有一些不太好预料的问题,比如Linux的那个CI服务器的DNS竟然不能解析localhost。

所以我对单元测试做了一些允许这部分错误仍然算通过(当然我本地是全OK的)。

Windows配合MSYS2的最后编译出来了,但是单元测试block在了某个地方(肯定又是什么地方权限问题或者网络问题),因为这个环境相当难搞,超时的时候暂时没法打印出跑了一半的结果,所以暂时把MinGW下自动单元测试关掉了。当然也是我本地全跑通过的情况下。

主要也是我没想话太多时间在单元测试的超时方面的完备性上。

再来就是之前没在MinGW上跑过,发现之前写的文件系统封装在MinGW中不能走POSIX的那一套,反而得走MSVC的那一套。所以今天主要还改了这个。这部分明天我会merge到我们目前的项目中去,主要测试一下新代码的在其他环境是否正常。比如Linux、Windows、Cygwin等等。之前还真没在MinGW上编译过。

 

总而言之,今天结掉了好多麻烦的杂事儿。

本文短地址: https://www.owent.net/qTRqz

About OWenT

管理员

3 Responses to 今天抽空整理了下GCC和LLVM+Clang+libc++abi的编译脚本和libatbus的CI

  1. tk says:

    llvm+clang这一套东西 是比较扯淡,有些时候发布的版本都编译不过去。而且在3.4以后不断地加入一些C++11的东西,文档也超级全面但不友好,其实在增加使用难度。

发表评论

电子邮件地址不会被公开。 必填项已用*标注