Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CMake] Enable CMP0179 alongside CMP0156 for deduplication on LLD
LLD has a bug regarding ordering of static link libraries in the ELF backend, which has been reported as #116669. CMake 3.31.0 started properly deduplicating static libraries for LLD causing the following linking failure for libclang-cpp.so with -DLLVM_LINK_LLVM_DYLIB=ON: ``` ld.lld: error: undefined symbol: llvm::omp::getOpenMPClauseName(llvm::omp::Clause) >>> referenced by OpenMPKinds.cpp >>> tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/OpenMPKinds.cpp.o:(clang::getOpenMPSimpleClauseTypeName(llvm::omp::Clause, unsigned int)) >>> referenced by SemaOpenMP.cpp >>> tools/clang/lib/Sema/CMakeFiles/obj.clangSema.dir/SemaOpenMP.cpp.o:(clang::SemaOpenMP::CheckOMPRequiresDecl(clang::SourceLocation, llvm::ArrayRef<clang::OMPClause*>)) >>> referenced by SemaOpenMP.cpp >>> tools/clang/lib/Sema/CMakeFiles/obj.clangSema.dir/SemaOpenMP.cpp.o:(clang::SemaOpenMP::CheckOMPRequiresDecl(clang::SourceLocation, llvm::ArrayRef<clang::OMPClause*>)) >>> referenced 166 more times [tons more] ``` CMake 3.31 also introduced CMP0179, which builds on CMP0156 and makes the deduplication consistent across platforms. By coincidence this works around the above LLD deficiency and is the fix that CMake 3.31.1 will implement. However, the fix is to ignore CMP0156 unless CMP0179 is also enabled, i.e. no more deduplication. So enable CMP0179 to keep the benefits of deduplication from CMP0156 on LLD and fix the build for CMake 3.31.0. See: #116669 See: https://gitlab.kitware.com/cmake/cmake/-/issues/26447 Fixes: cb90d5b
- Loading branch information