Tencent / yadcc

Yet Another Distributed C++ Compiler. yadcc是一套腾讯广告自研的分布式编译系统,用于支撑腾讯广告的日常开发及流水线。相对于已有的同类解决方案,我们针对实际的工业生产环境做了性能、可靠性、易用性等方面优化。
Other
371 stars 62 forks source link

如果使用的编译器不是gcc而是llvm,yadcc是否支持呢?应该如何整合构建系统? #34

Open liyunwang opened 2 years ago

0x804d8000 commented 2 years ago

二者的支持方式是类似的(本地预处理+远程编译),涉及到的命令行参数也基本一致(不过llvm额外支持了一个-frewrite-includes,可以进一步优化本地性能)。但是没有专门测试过llvm的兼容性。

可以测试一下直接套在llvm上面,如果有不兼容也可以贴上来看看(参考 https://github.com/Tencent/yadcc/blob/master/yadcc/doc/debugging.md#客户端 获得调试信息),比较简单的case的话也可以直接发mr

aguludunu commented 2 years ago

clang不支持-fdirectives-only和-fpreprocessed(clang-15已经支持-fdirectives-only) 在本地使用-frewrite-includes用clang进行预处理后,云端还是不能编译(因为clang不支持-fpreprocessed),使用"-x c++-cpp-output"也不行,返回的编译结果大小为0

wlii-by commented 1 year ago

我也遇到了-fdirectives-only和-fpreprocessed问题,所以是yadcc不支持clang?

0x804d8000 commented 1 year ago

看起来应该是不支持,我们目前没有在生产环境中尝试过分布式的clang编译。

-fdirectives-only并不是必须的,单纯的-E也可以,但是性能会差一些。

初步(而且可能并不完善)的测试了一下,本地预处理+远程编译对于clang来说也是可以的,但是可能在yadcc的client(主要是RewriteFile)和daemon(粗看感觉可能不用改)部分需要少量适配。

e.g.

$ cat > 1.cc
#include <iostream>

int main() {
  std::cout << "Hello world." << std::endl;
}
$ clang++ -E ./1.cc -o 1.ii
$ clang++ -c 1.ii -o 1.o
$ clang++ 1.o
$ ./a.out
Hello world.
$