[CMAKE] Fixes for clang-cl build
authorVictor Perevertkin <victor.perevertkin@reactos.org>
Mon, 13 Sep 2021 20:39:03 +0000 (23:39 +0300)
committerVictor Perevertkin <victor.perevertkin@reactos.org>
Tue, 14 Sep 2021 14:58:23 +0000 (17:58 +0300)
- User lib.exe instead of llvm-lib due to incompatibility
- Avoid wrapping resource compiler with cmcldeps
- Fix several conditional flags

ntoskrnl/CMakeLists.txt
sdk/cmake/config.cmake
toolchain-msvc.cmake

index b0cf73e..9109a7b 100644 (file)
@@ -8,7 +8,7 @@ endif()
 
 include(ntos.cmake)
 
-if (CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
+if(NOT MSVC)
     # Make sure we don't duplicate some symbols
     add_compile_options(-fno-common)
 endif()
index 63e5d71..75a6326 100644 (file)
@@ -79,7 +79,7 @@ else()
     message("WARNING: the compiler has not been recognized")
 endif()
 
-if(MSVC AND (NOT USE_CLANG_CL))
+if(MSVC)
     set(KDBG FALSE CACHE BOOL
 "Whether to compile in the integrated kernel debugger.")
     if(CMAKE_BUILD_TYPE STREQUAL "Release")
index 97921b2..12e499f 100644 (file)
@@ -24,6 +24,10 @@ if(USE_CLANG_CL)
     set(CMAKE_CXX_COMPILER clang-cl)
     # Clang now defaults to lld-link which we're not compatible with yet
     set(CMAKE_LINKER link)
+    # llvm-lib with link.exe can't generate proper delayed imports
+    set(CMAKE_AR lib)
+    set(CMAKE_C_COMPILER_AR lib)
+    set(CMAKE_CXX_COMPILER_AR lib)
     # Explicitly set target so CMake doesn't get confused
     if (ARCH STREQUAL "amd64")
         set(CMAKE_C_COMPILER_TARGET "x86_64-pc-windows-msvc")
@@ -38,6 +42,11 @@ if(USE_CLANG_CL)
         set(CMAKE_C_COMPILER_TARGET "i686-pc-windows-msvc")
         set(CMAKE_CXX_COMPILER_TARGET "i686-pc-windows-msvc")
     endif()
+
+    # Avoid wrapping RC compiler with cmcldeps utility for clang-cl.
+    # Otherwise it breaks cross-compilation (32bit ReactOS cannot be compiled by 64bit LLVM),
+    # target architecture is not passed properly
+    set(CMAKE_NINJA_CMCLDEPS_RC OFF)
 else()
     set(CMAKE_C_COMPILER cl)
     set(CMAKE_CXX_COMPILER cl)