LLVM bug为怀旧童年游戏构建合成CPU

时间:2012-07-05 17:09:54

标签: llvm clang

我一直在尝试编译syn64k - 用于Executor,以运行System's Twilight(我小时候玩的游戏)。我在我的macbook pro(使用最新的Xcode和命令行工具的Lion 10.7.4)上这样做。我将CC映射到gcc -m32以解决我遇到的一些问题,但我得到了以下内容:

Making all in native/i386
make[2]: Nothing to be done for `all'.
outgoing=;\
    gcc -m32 -maccumulate-outgoing-args -c -x c /dev/null 2> /dev/null && outgoing=-maccumulate-outgoing-args; \
    gcc -m32 -S -O2 -fomit-frame-pointer  -Wall -static -fno-defer-pop -Wno-unused\ -I./include -I./../include -I. -I../include $outgoing syn68k.c -o ./syn68k.s
syn68k.c: In function ‘s68k_handle_opcode_0x07A3’:
syn68k.c:52968: internal compiler error: in EmitLV_DECL, at llvm-convert.cpp:7475
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.
make[2]: *** [syn68k.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1

我使用了URL,它看起来不像是一个真正放置有关LLVM的错误报告的地方。在预处理器完成后,我的文件'syn68k.c'大约是50k行,所以我真的不能做一个可重现的测试用例来显示bug。

原来这个issue已经在github项目上了(这是列出的唯一问题,哈)。 MaddTheSane说这是因为clang不支持全局寄存器变量(因为我验证了here)。

在输入make后,我对编译的工作方式基本没有了解,所以有没有办法可以跳过clang或类似的东西?你有什么建议?

3 个答案:

答案 0 :(得分:2)

不幸的是,你需要使用gcc而不是llvm-gcc来编译这个程序。 llvm-gcc的LLVM后端不支持全局寄存器变量。切换到clang也无济于事,因为它也会因为同样的原因而阻塞全局寄存器变量。

答案 1 :(得分:0)

如果对于使用llvm的内容没有必要,你绝对可以跳过构建clang。

llvm使用cmake进行配置和生成makefile。您可以修改.cmake文件以创建禁用您不想创建的任何模块的配置。

答案 2 :(得分:0)

http://developer.apple.com/bugreporter绝对是报告Apple分发的任何编译器的错误的正确位置,即使它可能看起来不像。也就是说,除了铿锵之外,没有必要提交针对其他任何内容的错误报告。 (顺便说一下,测试用例的大小并不重要。)

如果你不知道足够的C来破解源代码,那么从macports或类似东西中获取更新版本的gcc可能是值得的。