Clang を MinGW 64 bit 版 でコンパイル2015年2月15日 | |
はじめにClang を MinGW 64 bit 版 でコンパイルするメモ。環境は Windows 7 Home Premium 64 bit。 前準備ここでコンパイルする LLVM/Clang 3.5.1 はそこそこ新しい GCC を要求するので、必要であればアップデートする (バージョンが足りているかどうかはコンパイルしてみればわかる)。ここでは GCC 4.9.2 を使用した。 また、LLVM/Clang のコンパイルには CMake が必要である。ここ からダウンロード、インストールし、パスを通しておく。 パッケージの入手LLVM Download Page から、LLVM、Clang のソースコードをダウンロードする。
コンパイルパッケージを展開する。.xz は 7-Zip で展開できる。 clang-3.5.1.src を llvm-3.5.1.src/tools/clang として移動する。 cmake を実行 (インストール先を "$HOME/opt/llvm-3.5.1" としている)。 $ cd llvm-3.5.1.src $ mkdir build $ cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=$HOME/opt/llvm-3.5.1 .. 1 回目すぐ止まるが、2 回実行すると進む。 make を実行。 $ make エラーで止まった。 [ 69%] Createing export file for LTO コマンドの構文が誤っています。 tools\lto\CMakeFiles\LTO_exports.dir\build.make:50: recipe for target 'tools/lto/LTO.def' failed mingw32-make[2]: *** [tools/lto/LTO.def] Error 1 CMakeFiles\Makefile2:9231: recipe for target 'tools/lto/CMakeFiles/LTO_exports.dir/all' failed mingw32-make[1]: *** [tools/lto/CMakeFiles/LTO_exports.dir/all] Error 2 makefile:136: recipe for target 'all' failed mingw32-make: *** [all] Error 2 気にしないでもう一度 make を実行すると、突破した。 またエラー。 C:\Users\...\ccl8qQCi.s: Fatal error: can't write CMakeFiles\clangDynamicASTMatchers.dir\Registry.cpp.obj: File to big よくわからないが、"tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/flags.make" の CXX に "-Og" を追加して make したら突破できた。 またエラー。 [ 98%] Creating export file for libclang コマンドの構文が誤っています。 tools\clang\tools\libclang\CMakeFiles\libclang_exports.dir\build.make:50: recipe for target 'tools/clang/tools/libclang/libclang.def' failed ... 1 つめのエラーと同じなので、気にせず再度 make を実行。 かなりメモリを食うみたい。コンパイルに数時間かかった。 コンパイルが済んだら、インストール。 $ make install パスを通す。 ~/.bashrc export PATH=$HOME/opt/llvm-3.5.1/bin:$PATH clang はインクルードファイルをフルではもっていないようで、gcc のものを使う必要がある。まず、gcc のインクルードパスを調べる。適当なコード test.c を用意する。 $ gcc -v test.c ... #include <...> search starts here: c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include-fixed c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/include End of search list. 同様に g++ のも調べる。 $ g++ -v test.c #include <...> search starts here: c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include-fixed c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/include c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/lib/gcc/../../x86_64-w64-mingw32/include/c++ c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/lib/gcc/../../x86_64-w64-mingw32/include/c++/x86_64-w64-mingw32 c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/lib/gcc/../../x86_64-w64-mingw32/include/c++/backward End of search list. これらを CPATH に設定する。 ~/.bashrc CPATH="/c/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include" CPATH="/c/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include-fixed":$CPATH CPATH="/c/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/include":$CPATH CPATH="/c/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/lib/gcc/../../x86_64-w64-mingw32/include/c++":$CPATH CPATH="/c/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/lib/gcc/../../x86_64-w64-mingw32/include/c++/x86_64-w64-mingw32":$CPATH CPATH="/c/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/lib/gcc/../../x86_64-w64-mingw32/include/c++/backward":$CPATH export CPATH これで clang、clang++ が使えるようになる。clang の gcc のコードに対する警告がうるさいので、警告を抑制しておいたほうがよいかもしれない。 ~/.bashrc alias clang='clang -Wno-ignored-attributes' 参考 | |
| PENGUINITIS | |