Skip to content

Commit

Permalink
[CMAKE] Fixes for clang-cl build
Browse files Browse the repository at this point in the history
- User lib.exe instead of llvm-lib due to incompatibility
- Avoid wrapping resource compiler with cmcldeps
- Fix several conditional flags
  • Loading branch information
Extravert-ir committed Sep 14, 2021
1 parent d74eb54 commit 62d1a2c
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 2 deletions.
2 changes: 1 addition & 1 deletion ntoskrnl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion sdk/cmake/config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
9 changes: 9 additions & 0 deletions toolchain-msvc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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)
Expand Down

0 comments on commit 62d1a2c

Please sign in to comment.