From c84211b9a8f08b2e96f1374c27c5ee193d516219 Mon Sep 17 00:00:00 2001 From: Shoaib Meenai Date: Fri, 15 Dec 2017 01:05:48 +0000 Subject: [PATCH] [cmake] Fix clang-cl cross-compilation on macOS macOS paths usually start with /Users, which clang-cl interprets as a macro undefine, leading to pretty much everything failing to compile. CMake should be taught to put a -- in its compilation rules for clang-cl (and I've been meaning to submit that upstream for a while). In the meantime, however, and to support older CMake versions, we can just create a custom make rules override to fix the compilation rules. Differential Revision: https://reviews.llvm.org/D41219 llvm-svn: 320785 --- llvm/cmake/platforms/ClangClCMakeCompileRules.cmake | 9 +++++++++ llvm/cmake/platforms/WinMsvc.cmake | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 llvm/cmake/platforms/ClangClCMakeCompileRules.cmake diff --git a/llvm/cmake/platforms/ClangClCMakeCompileRules.cmake b/llvm/cmake/platforms/ClangClCMakeCompileRules.cmake new file mode 100644 index 000000000000..a3bcf1c24a91 --- /dev/null +++ b/llvm/cmake/platforms/ClangClCMakeCompileRules.cmake @@ -0,0 +1,9 @@ +# macOS paths usually start with /Users/*. Unfortunately, clang-cl interprets +# paths starting with /U as macro undefines, so we need to put a -- before the +# input file path to force it to be treated as a path. CMake's compilation rules +# should be tweaked accordingly, but until that's done, and to support older +# CMake versions, overriding compilation rules works well enough. This file will +# be included by cmake after the default compilation rules have already been set +# up, so we can just modify them instead of duplicating them entirely. +string(REPLACE "-c " "-c -- " CMAKE_C_COMPILE_OBJECT "${CMAKE_C_COMPILE_OBJECT}") +string(REPLACE "-c " "-c -- " CMAKE_CXX_COMPILE_OBJECT "${CMAKE_CXX_COMPILE_OBJECT}") diff --git a/llvm/cmake/platforms/WinMsvc.cmake b/llvm/cmake/platforms/WinMsvc.cmake index c4761636c920..a736a4578722 100644 --- a/llvm/cmake/platforms/WinMsvc.cmake +++ b/llvm/cmake/platforms/WinMsvc.cmake @@ -299,3 +299,6 @@ set(CMAKE_SHARED_LINKER_FLAGS "${_CMAKE_SHARED_LINKER_FLAGS_INITIAL} ${LINK_FLAG # control which libraries they require. set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) + +# Allow clang-cl to work with macOS paths. +set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_CURRENT_LIST_DIR}/ClangClCMakeCompileRules.cmake") -- 2.34.1