LLVM ClangをMSVC + Ninjaでビルドする

2021年4月3日C++,Clang,LLVM,MSVC

LLVM ClangをMSVC + Ninjaでビルドする方法を紹介します。

環境

LLVM Clang 11.0.1
Visual Studio 2019 16.9.2
CMake 3.1.8.4
Ninja 1.10.2

Ninja

Ninjaは依存解決の速度早くプログラムのビルド時間を短くする事が出来るビルドシステムです。CMakeからNinja用のビルド設定ファイルを出力出来るので、LLVM ClangもNinjaでビルドする事が出来ます。

Ninjaの最新版はGitHubのTagからReleaseを選択する事で取得出来ます。

Build

LLVMとClangをそれぞれ解凍したら、clang は、llvm/tools/clangへと配置します。

次に、下記のいずれかの方法でVisual Studioで配布されているVC ToolsetへとPATHを通します。

  • スタートメニューから"x64 Native Tools Command Prompt for VS 2019″を選択してコマンドプロンプトを起動する
  • コマンドラインから"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"を実行する

vcvars64.batの場所はVisual StudioがCommunity、Professional、Enterpriseかによって変わってくるので、vswhereの使用を推奨します。

for /f "usebackq delims=" %%a in (`"%ProgramFiles(x86)%/Microsoft Visual Studio/Installer/vswhere" -version 16 -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set VSPATH=%%a
"%VSPATH%/VC/Auxiliary/Build/vcvars64.bat"

cmakeを実行する時には out-of-source buildが推奨されているので、ビルド用のディレクトリを作成します。
-DCMAKE_MAKE_PROGRAMはNinja.exeへのPathを指定します。

GitHubからCloneした場合と、圧縮されているソースコードをダウンロードした場合とで少し手順が違います。

GitHubからClone

git clone https://github.com/llvm/llvm-project.git
mkdir build
cmake -S llvm -B build -G "Ninja" -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_MAKE_PROGRAM=ninja.exe -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_CXX_FLAGS_RELEASE:STRING="/MT" -DCMAKE_CXX_FLAGS_DEBUG:STRING="/MTd"
cd build
ninja build-Release.ninja

ソースコードをダウンロード

mkdir build
cd build
cmake -G Ninja -DCMAKE_MAKE_PROGRAM=ninja.exe -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_CXX_FLAGS_RELEASE:STRING="/MT" -DCMAKE_CXX_FLAGS_DEBUG:STRING="/MTd" -DCMAKE_INSTALL_PREFIX:PATH="../install/release" ../
ninja

ビルドターゲットを指定してビルド

プロジェクトを個別にビルドする時はプロジェクト名を指定します。

Ninja clangAST

同時に複数のビルドターゲットを指定できます。

Ninja clangAST clangTooling

Ninja Multi-Config

NinjaはMulti-Configに対応しているので、複数のConfigureをcmakeで出力できます。
-G オプションの設定を変えるで、それ以外は同じです。

cmake -G "Ninja Multi-Config"

ビルドする時には、Configure毎のファイルを指定します。

# Build with Debug configuration
ninja build-Debug.ninja
# Build with Release configuration
ninja build-Release.ninja

バイナリの出力先もDebug/lib、Release/libのように分けられるので便利です。

MSBuildでビルドする方法はこちらの記事で紹介しています。

プログラムC++,Clang,LLVM,MSVC

Posted by melty