2012-07-05 22 views
0

我一直在試圖編譯syn64k - 用於Executor,運行System's Twilight(我小時候玩過的遊戲)。我在我的macbook pro(最新的Xcode和命令行工具lion 10.7.4)上做了這個。我映射到CCgcc -m32解決我有一對夫婦的問題,但我得到了以下內容:LLVM錯誤構建懷舊兒童遊戲合成CPU

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的bug報告的地方。我的文件'syn68k.c'在預處理器完成後大概有50k行,所以我真的不能做出可重複的測試用例來顯示錯誤。

原來這issue已經在github項目上(這是唯一的問題列出,哈)。 MaddTheSane說這是因爲clang不支持全局寄存器變量(因爲我驗證了here)。

我沒有什麼比你在輸入make之後編譯如何工作的基本理解更多,那麼有沒有辦法可以跳過clang或類似的東西?你有什麼建議?

回答

2

不幸的是,你需要使用gcc,而不是llvm-gcc來編譯這個程序。 llvm-gcc的LLVM後端不支持全局寄存器變量。由於同樣的原因,切換到叮聲也無濟於事,因爲它也會扼殺全局寄存器變量。

+0

這也是我來到的結論;在對clang和LLVM進行了一些額外的研究之後,我瞭解到它是爲了替代gcc,並且'gcc'在我的筆記本電腦上映射到了'llvm-gcc'。每caiustheory.com我已經安裝了gcc並再次嘗試構建。 – JoshRagem 2012-07-06 14:14:44

+0

現在我收到了一個不同的錯誤。這是進步 – JoshRagem 2012-07-06 14:18:26

0

你絕對可以跳過建築物鐺,如果它不需要使用llvm。

llvm使用cmake進行配置並生成makefile。您可以修改.cmake文件以創建禁用任何您不想創建的模塊的配置。

+0

我不明白你的意思;你是在談論在構建LLVM時離開clang嗎? – JoshRagem 2012-07-05 18:45:54

+0

是的,clang是使用LLVM庫構建的編譯器 – 2012-07-05 19:48:59

0

http://developer.apple.com/bugreporter絕對是報告針對Apple發佈的任何編譯器的錯誤的正確位置,即使它看起來不像它。也就是說,除了叮噹聲之外,沒有必要提交bug報告。 (順便說一下,測試用例的大小並不重要。)

如果你不知道足夠的C來破解源代碼,那麼可能值得一試,以便從macports獲取更新版本的gcc或其他東西像那樣。

+0

請注意,ICE在llvm-gcc中觸發,而不是在clang中。 llvm-gcc是EOL,所以很可能他們會建議切換到clang。 – 2012-07-06 09:00:42