thieta created this revision. Herald added subscribers: llvm-commits, cfe-commits, mstorsjo, dexonsmith, mgorny. Herald added projects: clang, LLVM.
These are a collection of small fixes to make LLVM/Clang build with a clang+mingw toolchain to target Windows. The three commits address the following problems: - When using LTO we pass --lto-cache-directory to lld - but this option is not supported by the lld MingW driver so it fails with unknown argument. - Don't symlink the tools - a MingW build version of clang should be assumed to be used on Windows - which doesn't support symlinks correctly - so instead use the copy path of the code for MingW as well. - The logic for linking libclang with libdl was a bit flawed - use the similar logic as to other places in the CMake build system. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D80425 Files: clang/tools/libclang/CMakeLists.txt llvm/cmake/modules/AddLLVM.cmake llvm/cmake/modules/HandleLLVMOptions.cmake Index: clang/tools/libclang/CMakeLists.txt =================================================================== --- clang/tools/libclang/CMakeLists.txt +++ clang/tools/libclang/CMakeLists.txt @@ -66,9 +66,8 @@ endif () endif () -find_library(DL_LIBRARY_PATH dl) -if (DL_LIBRARY_PATH) - list(APPEND LIBS dl) +if (HAVE_LIBDL) + list(APPEND LIBS ${CMAKE_DL_LIBS}) endif() option(LIBCLANG_BUILD_STATIC Index: llvm/cmake/modules/HandleLLVMOptions.cmake =================================================================== --- llvm/cmake/modules/HandleLLVMOptions.cmake +++ llvm/cmake/modules/HandleLLVMOptions.cmake @@ -953,6 +953,8 @@ # time a little since we re-link a lot of the same objects, and significantly # improves incremental build time. # FIXME: We should move all this logic into the clang driver. + # + # FIXME; mingw lld driver doesn't support any of the options below if(APPLE) append("-Wl,-cache_path_lto,${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) @@ -962,7 +964,7 @@ elseif(LLVM_USE_LINKER STREQUAL "gold") append("-Wl,--plugin-opt,cache-dir=${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - elseif(LINKER_IS_LLD_LINK) + elseif(LINKER_IS_LLD_LINK AND NOT MINGW) append("/lldltocache:${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) endif() Index: llvm/cmake/modules/AddLLVM.cmake =================================================================== --- llvm/cmake/modules/AddLLVM.cmake +++ llvm/cmake/modules/AddLLVM.cmake @@ -1868,7 +1868,7 @@ if(NOT ARG_OUTPUT_DIR) # If you're not overriding the OUTPUT_DIR, we can make the link relative in # the same directory. - if(CMAKE_HOST_UNIX) + if(CMAKE_HOST_UNIX AND NOT MINGW) set(dest_binary "$<TARGET_FILE_NAME:${target}>") endif() if(CMAKE_CONFIGURATION_TYPES) @@ -1894,7 +1894,7 @@ endif() endif() - if(CMAKE_HOST_UNIX) + if(CMAKE_HOST_UNIX AND NOT MINGW) set(LLVM_LINK_OR_COPY create_symlink) else() set(LLVM_LINK_OR_COPY copy)
Index: clang/tools/libclang/CMakeLists.txt =================================================================== --- clang/tools/libclang/CMakeLists.txt +++ clang/tools/libclang/CMakeLists.txt @@ -66,9 +66,8 @@ endif () endif () -find_library(DL_LIBRARY_PATH dl) -if (DL_LIBRARY_PATH) - list(APPEND LIBS dl) +if (HAVE_LIBDL) + list(APPEND LIBS ${CMAKE_DL_LIBS}) endif() option(LIBCLANG_BUILD_STATIC Index: llvm/cmake/modules/HandleLLVMOptions.cmake =================================================================== --- llvm/cmake/modules/HandleLLVMOptions.cmake +++ llvm/cmake/modules/HandleLLVMOptions.cmake @@ -953,6 +953,8 @@ # time a little since we re-link a lot of the same objects, and significantly # improves incremental build time. # FIXME: We should move all this logic into the clang driver. + # + # FIXME; mingw lld driver doesn't support any of the options below if(APPLE) append("-Wl,-cache_path_lto,${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) @@ -962,7 +964,7 @@ elseif(LLVM_USE_LINKER STREQUAL "gold") append("-Wl,--plugin-opt,cache-dir=${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - elseif(LINKER_IS_LLD_LINK) + elseif(LINKER_IS_LLD_LINK AND NOT MINGW) append("/lldltocache:${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) endif() Index: llvm/cmake/modules/AddLLVM.cmake =================================================================== --- llvm/cmake/modules/AddLLVM.cmake +++ llvm/cmake/modules/AddLLVM.cmake @@ -1868,7 +1868,7 @@ if(NOT ARG_OUTPUT_DIR) # If you're not overriding the OUTPUT_DIR, we can make the link relative in # the same directory. - if(CMAKE_HOST_UNIX) + if(CMAKE_HOST_UNIX AND NOT MINGW) set(dest_binary "$<TARGET_FILE_NAME:${target}>") endif() if(CMAKE_CONFIGURATION_TYPES) @@ -1894,7 +1894,7 @@ endif() endif() - if(CMAKE_HOST_UNIX) + if(CMAKE_HOST_UNIX AND NOT MINGW) set(LLVM_LINK_OR_COPY create_symlink) else() set(LLVM_LINK_OR_COPY copy)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits