為什麼這篇mingw-w64 make鄉民發文收入到精華區:因為在mingw-w64 make這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者suhorng ( )看板ASM標題[心得] Windows(32bit)下用MinGW32編L...
照官方說明抓好code. 目前我編的版本是 LLVM/clang 3.3
clang的code要被放在 llvm-src/tools/clang/ 下面.
我的環境用 MinGW 及 gcc (GCC) 4.7.2, mingw32-make 3.82.90, i686-pc-mingw32
然後另外在外面建一個空資料夾拿來編東西, 例如就叫 llvm-build
加入 compiler default search path
llvm預設搜尋路徑是 hard-coded, 若 MinGW 安裝的位置不是預設的 C:\MinGW
或版本太新(如4.7.2)要改 llvm-src/tools/clang/lib/Frontend/InitHeaderSearch.cpp
http://stackoverflow.com/questions/6525245/getting-clang-to-work-on-windows
搜尋找到寫 // FIXME: temporary hack: hard-coded paths. 的地方,
往下拉找到 MinGW 的部份, 手動加入用的版本&路徑, 例如:
void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths(const llvm::Triple
&triple, const HeaderSearchOptions &HSOpts) {
llvm::Triple::OSType os = triple.getOS();
// FIXME: temporary hack: hard-coded paths.
...
switch (os) {
case llvm::Triple::MinGW32:
// mingw-w64 C++ include paths (i686-w64-mingw32 and x86_64-w64-mingw32)
AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.5.0");
AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.5.1");
...(略)
+ AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.7.2");
// mingw.org C++ include paths
AddMinGWCPlusPlusIncludePaths("/mingw/lib/gcc", "mingw32", "4.5.2");
//MSYS
#if defined(_WIN32)
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.6.2");
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.6.1");
...(略)
AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.3.0");
+ AddMinGWCPlusPlusIncludePaths("c:/compilers/MinGW/lib/gcc", "mingw32",
"4.7.2");
#endif
使用 cmake 做配置. (根本懶人包 XD)
在 llvm-build 下用 cmake PATH-TO-LLVM-SOURCE 來自動偵測環境 & 產生 Makefile
中間可以設一些自己的參數, 例如 -DCMAKE_BUILD_TYPE:STRING=Release 之類
我還有指定 -DLLVM_TARGETS_TO_BUILD:STRING=X86 -G "MinGW Makefiles"
及安裝路徑, -DCMAKE_INSTALL_PREFIX:PATH=PATH-TO-INSTALL-LLVM
真正重要的是因為 MinGW32 的 bug, address rellocation非常慢. 若要
避開這個問題可以用 static linkage
http://stackoverflow.com/questions/15310996/clang-slow-startup-using-mingw
-DCMAKE_EXE_LINKER_FLAGS=-static -DCMAKE_MODULE_LINKER_FLAGS=-static
編譯
剩下就是沒什麼問題的
mingw32-make
mingw32-make check-all
mingw32-make install
另, 編譯時也可以指定要開 optimization, 如 mingw32-make ENABLE_OPTIMIZED=1
因為我們用 Windows 的 command line, 測試時有一些 case 會 fail
(諸如 "Command not found: echo")
不過用 MSYS 的話 grep, find, diff, etc都有所以多數測資可以過
後記
C++ 程式仍然不能正確的動(with clang++), 一跑就噴 exception
搜尋的時候發現有別人遇到一樣的狀況
http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-June/050837.html
然而這是去年的事了。同樣去年時有人測試
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-April/021027.html
"I try to build Clang for windows with MinGW[1].
I build Clang using gcc-4.6.3[2]. All the programs which are built
using it, are compiled and work successfully.
But if when I build Clang using gcc-4.7.0[3], programs which written
on C++ crash when run-time. C-code programs are compiled and work
successfully.
simple example:
> #include <iostream>
> int main() {
> std::cout << "Hello world!" << std::endl;
> return 0;
> }
"
也許目前仍然無解?
果然在 Windows 上(ry
p.s. llvm都編完後才發現有別人寫了步驟...
http://www.dev.idv.tw/mediawiki/index.php/%E5%9C%A8Windows%E4%B8
%8B%E9%9D%A2%E9%80%B2%E8%A1%8CLLVM%E8%88%87CLANG%E7%9A%84%E5%AE%
89%E8%A3%9D
還有
http://stackoverflow.com/questions/14419168/
using-clang-with-codeblocks-on-windows-7
有人提供編好得檔案耶XD
不過我沒測試
阿, llvm asm還一直不得其門而入QQ
官方的 tutorial 都是用官方提供的 binding
不過一方面我不想用 C++ 寫, 另一方面我編的時候忘了弄 OCaml binding,
還不知道要怎麼弄... 難道要重編第四次嗎 orz
Haskell的binding還不知道要怎麼裝的說 QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.16.131
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: suhorng (140.112.16.131), 時間: 07/10/2013 18:28:32
※ 編輯: suhorng 來自: 140.112.16.131 (07/10 18:30)
※ 編輯: suhorng 來自: 118.166.47.118 (07/10 20:38)