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: Difference between revisions
Line 14: | Line 14: | ||
=== Intel Compiler === | === Intel Compiler === | ||
Currently llvm requires some tweaks to compile with icl ( | 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). | ||
== Build == | == Build == | ||
Line 51: | Line 51: | ||
<nowiki>*</nowiki> Second build round: | <nowiki>*</nowiki> Second build round: | ||
<nowiki> </nowiki> 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 | <nowiki> </nowiki> 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 | |||
<nowiki>*</nowiki> Training | |||
<nowiki>*</nowiki> 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 == | == Performance == |
Revision as of 13:27, 12 March 2018
Configuring builds
MSVC (2015 and 2017) and MinGW
Can be configured with Qt Creator. It's enough to manually set CMAKE_INSTALL_PREFIX, CMAKE_BUILD_TYPE and LLVM_ENABLE_RTTI
For MinGW there are extra flags though to link libraries into libclang.dll statically (CMAKE_C_FLAGS and CMAKE_CXX_FLAGS): -static-libgcc -static-libstdc++ -static
Clang
Configurable with cmake: You need msvc command line and append PATH with bin directory of clang (set PATH=%PATH%;path\to\clang\bin)
cmake -G <Generator ("NMake Makefiles JOM" or "NMake Makefiles")> -DCMAKE_BUILD_TYPE=<Release|Debug> -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" -DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.0" -DMSVC=1 -DCMAKE_CL_64=<1|0> path\to\llvm
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).
Build
In creator and command line you can just use "jom install" or use default step from Qt Creator
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.