cmake: support GCC and Clang from MSYS2

Differentiate between MSVC which is the Microsoft compiler and WN32 AND
NOT MSVC which is GCC and Clang on Windows. MSVC uses
#pragma comment(lib, "libittnotify.lib") to link to libittnotify but
for GCC/Clang you need to link explicitly using target_link_libraries.
target_link_options(-municode) is needed for unicode applications.
This commit is contained in:
oltolm 2025-07-19 23:51:20 +02:00
commit b046d79e63
12 changed files with 63 additions and 25 deletions

View file

@ -193,7 +193,7 @@ endif()
# as defined above. # as defined above.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Binaries) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Binaries)
if (WIN32) if (MSVC)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/Binary) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/Binary)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64")
@ -536,7 +536,7 @@ if(ENABLE_EGL)
endif() endif()
if(ENCODE_FRAMEDUMPS) if(ENCODE_FRAMEDUMPS)
if(WIN32) if(MSVC)
if(_M_X86_64) if(_M_X86_64)
set(FFMPEG_DIR Externals/FFmpeg-bin/x64) set(FFMPEG_DIR Externals/FFmpeg-bin/x64)
elseif(_M_ARM_64) elseif(_M_ARM_64)
@ -556,7 +556,7 @@ if(ENCODE_FRAMEDUMPS)
if(WIN32) if(WIN32)
# Our prebuilt binaries depend on Bcrypt # Our prebuilt binaries depend on Bcrypt
set_property(TARGET FFmpeg::avutil APPEND PROPERTY set_property(TARGET FFmpeg::avutil APPEND PROPERTY
INTERFACE_LINK_LIBRARIES "Bcrypt.lib" INTERFACE_LINK_LIBRARIES Bcrypt
) )
endif() endif()
else() else()
@ -769,8 +769,10 @@ else()
message(STATUS "libsystemd not found, disabling traversal server watchdog support") message(STATUS "libsystemd not found, disabling traversal server watchdog support")
endif() endif()
if (WIN32) if (MSVC)
include_directories(Externals/WIL/include) include_directories(Externals/WIL/include)
endif()
if (WIN32)
include_directories(Externals/OpenAL/include) include_directories(Externals/OpenAL/include)
endif() endif()

View file

@ -6,8 +6,9 @@ target_include_directories(hidapi PUBLIC hidapi-src/hidapi)
if(APPLE) if(APPLE)
target_sources(hidapi PRIVATE hidapi-src/mac/hid.c) target_sources(hidapi PRIVATE hidapi-src/mac/hid.c)
elseif(MSVC) elseif(WIN32)
target_sources(hidapi PRIVATE hidapi-src/windows/hid.c) target_sources(hidapi PRIVATE hidapi-src/windows/hid.c)
target_link_libraries(hidapi PUBLIC setupapi)
else() else()
find_package(LIBUDEV) find_package(LIBUDEV)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND LIBUDEV_FOUND) if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND LIBUDEV_FOUND)

View file

@ -9,7 +9,7 @@ add_library(usb STATIC EXCLUDE_FROM_ALL
dolphin_disable_warnings(usb) dolphin_disable_warnings(usb)
set_target_properties(usb PROPERTIES VERSION 1.0.26) set_target_properties(usb PROPERTIES VERSION 1.0.26)
if(WIN32) if(MSVC)
target_include_directories(usb BEFORE PUBLIC libusb/libusb PRIVATE libusb/msvc) target_include_directories(usb BEFORE PUBLIC libusb/libusb PRIVATE libusb/msvc)
else() else()
target_include_directories(usb target_include_directories(usb
@ -31,6 +31,7 @@ if(WIN32 OR CYGWIN)
libusb/libusb/os/events_windows.c libusb/libusb/os/events_windows.c
) )
set(PLATFORM_WINDOWS TRUE) set(PLATFORM_WINDOWS TRUE)
set(ENABLE_LOGGING TRUE)
elseif(APPLE) elseif(APPLE)
target_sources(usb PRIVATE libusb/libusb/os/darwin_usb.c) target_sources(usb PRIVATE libusb/libusb/os/darwin_usb.c)
find_library(COREFOUNDATION_LIBRARY CoreFoundation) find_library(COREFOUNDATION_LIBRARY CoreFoundation)
@ -92,7 +93,9 @@ include(CheckTypeSize)
include(CheckSymbolExists) include(CheckSymbolExists)
check_include_files(asm/types.h HAVE_ASM_TYPES_H) check_include_files(asm/types.h HAVE_ASM_TYPES_H)
check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) if(NOT WIN32)
check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)
endif()
check_symbol_exists(EFD_CLOEXEC "sys/eventfd.h" HAVE_DECL_EFD_CLOEXEC) check_symbol_exists(EFD_CLOEXEC "sys/eventfd.h" HAVE_DECL_EFD_CLOEXEC)
check_symbol_exists(EFD_NONBLOCK "sys/eventfd.h" HAVE_DECL_EFD_NONBLOCK) check_symbol_exists(EFD_NONBLOCK "sys/eventfd.h" HAVE_DECL_EFD_NONBLOCK)
check_symbol_exists(TFD_CLOEXEC "sys/timerfd.h" HAVE_DECL_TFD_CLOEXEC) check_symbol_exists(TFD_CLOEXEC "sys/timerfd.h" HAVE_DECL_TFD_CLOEXEC)

View file

@ -8,7 +8,7 @@
#undef ENABLE_DEBUG_LOGGING #undef ENABLE_DEBUG_LOGGING
/* Define to 1 to enable message logging. */ /* Define to 1 to enable message logging. */
#undef ENABLE_LOGGING #cmakedefine ENABLE_LOGGING 1
/* Define to 1 if you have the <asm/types.h> header file. */ /* Define to 1 if you have the <asm/types.h> header file. */
#cmakedefine HAVE_ASM_TYPES_H 1 #cmakedefine HAVE_ASM_TYPES_H 1

View file

@ -205,12 +205,17 @@ if (APPLE)
elseif(WIN32) elseif(WIN32)
target_link_libraries(common target_link_libraries(common
PRIVATE PRIVATE
kernel32.lib kernel32
shlwapi.lib shlwapi
winmm.lib winmm
SetupAPI
) )
if (_M_X86_64) if (_M_X86_64)
target_link_libraries(common PRIVATE opengl32.lib) target_link_libraries(common PRIVATE opengl32)
endif()
if(MINGW)
target_compile_definitions(common PRIVATE _WIN32_WINNT=0x0602)
target_compile_options(common PRIVATE -mxsave)
endif() endif()
elseif (ANDROID) elseif (ANDROID)
target_link_libraries(common target_link_libraries(common
@ -342,6 +347,7 @@ endif()
if(WIN32) if(WIN32)
target_sources(common PRIVATE HRWrap.h HRWrap.cpp) target_sources(common PRIVATE HRWrap.h HRWrap.cpp)
target_link_libraries(common PUBLIC qwave)
endif() endif()
if(USE_UPNP) if(USE_UPNP)
@ -381,7 +387,7 @@ if(UNIX)
if(SYSTEMD_FOUND) if(SYSTEMD_FOUND)
target_link_libraries(traversal_server PRIVATE ${SYSTEMD_LIBRARIES}) target_link_libraries(traversal_server PRIVATE ${SYSTEMD_LIBRARIES})
endif() endif()
elseif(WIN32) elseif(MSVC)
find_package(PowerShell REQUIRED) find_package(PowerShell REQUIRED)
execute_process( execute_process(
COMMAND ${POWERSHELL_EXE} -Command "[System.Diagnostics.FileVersionInfo]::GetVersionInfo('$ENV{VCToolsRedistDir}vc_redist.x64.exe').ProductVersion" COMMAND ${POWERSHELL_EXE} -Command "[System.Diagnostics.FileVersionInfo]::GetVersionInfo('$ENV{VCToolsRedistDir}vc_redist.x64.exe').ProductVersion"

View file

@ -1,4 +1,4 @@
add_library(core add_library(core STATIC
AchievementManager.cpp AchievementManager.cpp
AchievementManager.h AchievementManager.h
ActionReplay.cpp ActionReplay.cpp
@ -733,8 +733,7 @@ if(WIN32)
target_link_libraries(core PUBLIC target_link_libraries(core PUBLIC
videod3d videod3d
videod3d12 videod3d12
setupapi.lib setupapi
iphlpapi.lib
) )
target_compile_definitions(core PRIVATE "-D_WINSOCK_DEPRECATED_NO_WARNINGS") target_compile_definitions(core PRIVATE "-D_WINSOCK_DEPRECATED_NO_WARNINGS")
elseif(APPLE) elseif(APPLE)

View file

@ -12,6 +12,7 @@ endif()
if(WIN32) if(WIN32)
target_sources(dolphin-nogui PRIVATE PlatformWin32.cpp) target_sources(dolphin-nogui PRIVATE PlatformWin32.cpp)
target_link_libraries(dolphin-nogui PRIVATE Dwmapi)
endif() endif()
if(APPLE) if(APPLE)
@ -32,6 +33,13 @@ PRIVATE
cpp-optparse cpp-optparse
) )
if(WIN32)
target_link_libraries(dolphin-nogui PRIVATE d3d11)
if(NOT MSVC)
target_link_options(dolphin-nogui PRIVATE -municode)
endif()
endif()
if(APPLE) if(APPLE)
target_link_libraries(dolphin-nogui target_link_libraries(dolphin-nogui
PRIVATE PRIVATE
@ -43,7 +51,7 @@ endif()
if(WIN32) if(WIN32)
# needed for adjusting window decorations with DwmSetWindowAttribute # needed for adjusting window decorations with DwmSetWindowAttribute
target_link_libraries(dolphin-nogui PRIVATE dwmapi.lib) target_link_libraries(dolphin-nogui PRIVATE dwmapi)
endif() endif()
if(MSVC) if(MSVC)

View file

@ -19,7 +19,7 @@ message(STATUS "Found Qt version ${Qt6_VERSION}")
set_property(TARGET Qt6::Core PROPERTY INTERFACE_COMPILE_FEATURES "") set_property(TARGET Qt6::Core PROPERTY INTERFACE_COMPILE_FEATURES "")
add_executable(dolphin-emu add_executable(dolphin-emu WIN32
AboutDialog.cpp AboutDialog.cpp
AboutDialog.h AboutDialog.h
CheatSearchFactoryWidget.cpp CheatSearchFactoryWidget.cpp
@ -443,10 +443,13 @@ PRIVATE
if (WIN32) if (WIN32)
target_link_libraries(dolphin-emu target_link_libraries(dolphin-emu
PRIVATE PRIVATE
gdi32.lib gdi32
shell32.lib shell32
dwmapi.lib # Needed to set window decorations for dark theme dwmapi # Needed to set window decorations for dark theme
) )
if(NOT MSVC)
target_link_options(dolphin-emu PRIVATE -municode)
endif()
endif() endif()
if (MSVC) if (MSVC)

View file

@ -21,6 +21,10 @@ PRIVATE
fmt::fmt fmt::fmt
) )
if(WIN32 AND NOT MSVC)
target_link_options(dolphin-tool PRIVATE -municode)
endif()
if(MSVC) if(MSVC)
# Add precompiled header # Add precompiled header
target_link_libraries(dolphin-tool PRIVATE use_pch) target_link_libraries(dolphin-tool PRIVATE use_pch)

View file

@ -1,4 +1,4 @@
add_library(inputcommon add_library(inputcommon STATIC
DynamicInputTextureManager.cpp DynamicInputTextureManager.cpp
DynamicInputTextureManager.h DynamicInputTextureManager.h
GCAdapter.cpp GCAdapter.cpp
@ -101,13 +101,20 @@ if(WIN32)
ControllerInterface/DInput/XInputFilter.h ControllerInterface/DInput/XInputFilter.h
ControllerInterface/Win32/Win32.cpp ControllerInterface/Win32/Win32.cpp
ControllerInterface/Win32/Win32.h ControllerInterface/Win32/Win32.h
ControllerInterface/WGInput/WGInput.cpp
ControllerInterface/WGInput/WGInput.h
ControllerInterface/XInput/XInput.cpp ControllerInterface/XInput/XInput.cpp
ControllerInterface/XInput/XInput.h ControllerInterface/XInput/XInput.h
ControllerInterface/ForceFeedback/ForceFeedbackDevice.cpp ControllerInterface/ForceFeedback/ForceFeedbackDevice.cpp
ControllerInterface/ForceFeedback/ForceFeedbackDevice.h ControllerInterface/ForceFeedback/ForceFeedbackDevice.h
) )
if(MSVC)
target_sources(inputcommon PRIVATE
ControllerInterface/WGInput/WGInput.cpp
ControllerInterface/WGInput/WGInput.h
)
else()
target_compile_definitions(inputcommon PRIVATE WINVER=0x0602)
endif()
target_link_libraries(inputcommon PUBLIC cfgmgr32 dinput8)
elseif(APPLE) elseif(APPLE)
target_sources(inputcommon PRIVATE target_sources(inputcommon PRIVATE
ControllerInterface/Quartz/Quartz.h ControllerInterface/Quartz/Quartz.h

View file

@ -1,4 +1,4 @@
add_library(videod3d add_library(videod3d STATIC
D3DBase.cpp D3DBase.cpp
D3DBase.h D3DBase.h
D3DBoundingBox.cpp D3DBoundingBox.cpp

View file

@ -12,6 +12,11 @@ target_link_libraries(winupdater PRIVATE
Comctl32 Comctl32
) )
target_compile_definitions(winupdater PRIVATE _UNICODE UNICODE)
if(NOT MSVC)
target_link_options(winupdater PRIVATE -municode)
endif()
set_target_properties(winupdater PROPERTIES OUTPUT_NAME "Updater") set_target_properties(winupdater PROPERTIES OUTPUT_NAME "Updater")
if(MSVC) if(MSVC)