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

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

環境

LLVM Clang 11.0.1
Visual Studio 2019 16.9.2
CMake 3.1.8.4
Ninja 1.10.2

GitHub - llvm/llvm-project: The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. - llvm/llvm-project
CMake - Upgrade Your Software Build System
CMake is a powerful and comprehensive solution for managing the software build process. CMake is the de-facto standard f...

Ninja

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

Ninja, a small build system with a focus on speed

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

GitHub - ninja-build/ninja: a small build system with a focus on speed
a small build system with a focus on speed. Contribute to ninja-build/ninja development by creating an account on GitHub...

ビルドする

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

CMakeを実行して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でビルドする方法はこちらの記事で紹介しています。

タイトルとURLをコピーしました