Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
Build libclang on Windows
Download source
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies, including Clang and libclang. It can be obtained by cloning its source with Git:
git clone https://github.com/llvm/llvm-project.git
Configure + build
The LLVM Project already offers configure and build instructions for Windows here. The steps outlined under "Using Ninja alongside Visual Studio" are recommended.
Notes:
- Visual Studio 2019 and 2022 are also supported.
- Skip steps 5. and 6. if you want to build with MinGW GCC instead of MSVC (or set the values accordingly).
- Add to your configure command if you need a debug build of libclang, e.g.,
-DCMAKE_BUILD_TYPE=Debug
cmake -GNinja -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Debug ..\llvm
- It is recommended to add an install prefix to your configure command, e.g., . Run
cmake -GNinja -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_INSTALL_PREFIX=C:\libclang\ ..\llvm
after the build to install libclang to the directory you provided through the install prefix.cmake -- install .
Intel Compiler
Currently llvm requires some tweaks to compile with icl (https://software.intel.com/en-us/forums/intel-c-compiler/topic/759252 may solve some of them).
Profile-guided builds extra configuration
MSVC
* First build round: CMAKE_C_FLAGS and CMAKE_CXX_FLAGS: /GL CMAKE_EXE_LINKER_FLAGS and CMAKE_SHARED_LINKER_FLAGS: /LTCG and /GENPROFILE:PGD=pgd\files\path * Training Just run parsing/completion * Second build round: CMAKE_C_FLAGS and CMAKE_CXX_FLAGS: /GL CMAKE_EXE_LINKER_FLAGS and CMAKE_SHARED_LINKER_FLAGS: /LTCG and /USEPROFILE:PGD=same\pgd\files\path
MinGW
* First build round: CMAKE_C_FLAGS and CMAKE_CXX_FLAGS: -fprofile-generate=path\to\profile\files * Training Just run parsing/completion * Second build round: CMAKE_C_FLAGS and CMAKE_CXX_FLAGS: -fprofile-use=path\to\profile\files
Clang
Clang requires compiler-rt to build llvm with -fprofile-instr-generate flag Follow the https://compiler-rt.llvm.org/ to build it. You need additional configuration though: -DCMAKE_INSTALL_PREFIX=<path\to\llvm\install>\lib\clang\5.0.0 and a proper -DCMAKE_BUILD_TYPE
* First build round: cmake -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=1 -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_INSTALL_PREFIX=path\to\install -DCMAKE_C_FLAGS="-fms-compatibility-version=19.0 -fprofile-instr-generate=path\llvm-%p.profraw" -DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.0 -fprofile-instr-generate=path\llvm-%p.profraw" -DMSVC=1 -DCMAKE_CL_64=<1|0> -DCMAKE_EXE_LINKER_FLAGS="<path\to\llvm\install>\lib\clang\5.0.0\lib\windows\clang_rt.profile-x86_64.lib /FORCE:MULTIPLE" path\to\llvm * Training * Merging train data llvm-profdata merge -output= llvm.profdata llvm-*.profraw * Second build round: cmake -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=1 -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_INSTALL_PREFIX=path\to\install -DCMAKE_C_FLAGS="-fms-compatibility-version=19.0 -fprofile-instr-use=path\llvm.prodata" -DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.0 -fprofile-instr-use=path\llvm.prodata" -DMSVC=1 -DCMAKE_CL_64=<1|0> path\to\llvm
Intel Compiler
* First build round: cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=1 -DCMAKE_C_COMPILER=icl -DCMAKE_CXX_COMPILER=icl -DCMAKE_INSTALL_PREFIX=path\to\install -DLLVM_ENABLE_WARNINGS=0 -DCMAKE_CXX_FLAGS="/Qvc14.1 /Qprof-gen /Qprof-dirc:\icl_profiled" -DCMAKE_C_FLAGS="/Qvc14.1 /Qprof-gen /Qprof-dirc:\icl_profiled" path\to\llvm * Training * Second build round: cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=1 -DCMAKE_C_COMPILER=icl -DCMAKE_CXX_COMPILER=icl -DCMAKE_INSTALL_PREFIX=path\to\install -DLLVM_ENABLE_WARNINGS=0 -DCMAKE_CXX_FLAGS="/Qvc14.1 /Qprof-use /O2 /Qip /Qprof-dirc:\icl_profiled" -DCMAKE_C_FLAGS="/Qvc14.1 /Qprof-use /O2 /Qip /Qprof-dirc:\icl_profiled" path\to\llvm
Performance
We have measurements comparison between different llvm builds. The most important there are parse and re-parse times.
This is the comparison for sample file that was done for our llvm builds (all compilers are 64-bit):
action | LLVM 5.0 mingw PGO | LLVM 5.0 intel compiler PGO | LLVM 3.9 mingw PGO | LLVM 3.9 msvc2015 | LLVM 3.9 msvc2017 PGO | LLVM 3.9 clang PGO | LLVM 3.9 mingw | LLVM 3.9 clang | LLVM 3.9 msvc2017 |
Parsing | 1.306 | 1.5426 | 1.2874 | 2.7482 | 1.473 | 1.5015 | 1.5797 | 1.7486 | 1.8487 |
Reparsing | 1.9258 | 2.2318 | 2.3362 | 2.9665 | 2.5521 | 2.6727 | 3.183 | 2.8431 | 3.0255 |
That means that currently the fastest build is mingw with applied profile-guided optimization.