cmake: make compile with mingw-w64 GCC

This commit is contained in:
oltolm 2024-12-23 01:29:17 +01:00
parent 4f210df86a
commit 51b4b05f0b
23 changed files with 99 additions and 46 deletions

1
.gitignore vendored
View File

@ -43,3 +43,4 @@ CMakeLists.txt.user
/.vscode/
# Ignore flatpak-builder's cache dir
.flatpak-builder
CMakeUserPresets.json

View File

@ -185,7 +185,7 @@ endif()
# as defined above.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Binaries)
if (WIN32)
if (MSVC)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/Binary)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64")
@ -528,7 +528,7 @@ if(ENABLE_EGL)
endif()
if(ENCODE_FRAMEDUMPS)
if(WIN32)
if(MSVC)
if(_M_X86_64)
set(FFMPEG_DIR Externals/FFmpeg-bin/x64)
elseif(_M_ARM_64)
@ -751,8 +751,10 @@ else()
message(STATUS "libsystemd not found, disabling traversal server watchdog support")
endif()
if (WIN32)
if (MSVC)
include_directories(Externals/WIL/include)
endif()
if (WIN32)
include_directories(Externals/OpenAL/include)
endif()

23
CMakePresets.json Normal file
View File

@ -0,0 +1,23 @@
{
"version": 2,
"configurePresets": [
{
"name": "gcc-debug",
"binaryDir": "build-gcc-debug",
"generator": "Ninja",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "clang-debug",
"binaryDir": "build-clang-debug",
"generator": "Ninja",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
}
]
}

View File

@ -10,6 +10,7 @@ option(BUILD_RUST_LIBS "Build rust backends" OFF)
option(BUNDLE_SPEEX "Bundle the speex library" OFF)
option(LAZY_LOAD_LIBS "Lazily load shared libraries" ON)
option(USE_SANITIZERS "Use sanitizers" ON)
option(BUILD_TOOLS "Build tools" OFF)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING

View File

@ -1,4 +1,4 @@
cmake_minimum_required (VERSION 3.2.0)
cmake_minimum_required (VERSION 3.10.0)
project (DiscordRPC)
include(GNUInstallDirs)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.10)
project(enet)

View File

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

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.10)
project(spng C)

View File

@ -9,7 +9,7 @@ add_library(usb STATIC EXCLUDE_FROM_ALL
dolphin_disable_warnings(usb)
set_target_properties(usb PROPERTIES VERSION 1.0.26)
if(WIN32)
if(MSVC)
target_include_directories(usb BEFORE PUBLIC libusb/libusb PRIVATE libusb/msvc)
else()
target_include_directories(usb
@ -31,6 +31,7 @@ if(WIN32 OR CYGWIN)
libusb/libusb/os/events_windows.c
)
set(PLATFORM_WINDOWS TRUE)
set(ENABLE_LOGGING TRUE)
elseif(APPLE)
target_sources(usb PRIVATE libusb/libusb/os/darwin_usb.c)
find_library(COREFOUNDATION_LIBRARY CoreFoundation)
@ -92,7 +93,9 @@ include(CheckTypeSize)
include(CheckSymbolExists)
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_NONBLOCK "sys/eventfd.h" HAVE_DECL_EFD_NONBLOCK)
check_symbol_exists(TFD_CLOEXEC "sys/timerfd.h" HAVE_DECL_TFD_CLOEXEC)

View File

@ -8,7 +8,7 @@
#undef ENABLE_DEBUG_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. */
#cmakedefine HAVE_ASM_TYPES_H 1

View File

@ -20,7 +20,7 @@
# mbedtls, mbedx509, mbedcrypto and apidoc targets.
#
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.10)
# https://cmake.org/cmake/help/latest/policy/CMP0011.html
# Setting this policy is required in CMake >= 3.18.0, otherwise a warning is generated. The OLD

View File

@ -1,23 +1,9 @@
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.10)
project(miniupnpc C)
set(MINIUPNPC_VERSION 1.9)
set(MINIUPNPC_API_VERSION 14)
if(UNIX)
add_definitions(-DMINIUPNPC_SET_SOCKET_TIMEOUT)
add_definitions(-D_BSD_SOURCE -D_POSIX_C_SOURCE=1)
elseif(WIN32)
add_definitions(-D_WIN32_WINNT=0x0501)
find_library(WINSOCK2_LIBRARY NAMES ws2_32 WS2_32 Ws2_32)
find_library(IPHLPAPI_LIBRARY NAMES iphlpapi)
set(LDLIBS ${WINSOCK2_LIBRARY} ${IPHLPAPI_LIBRARY} ${LDLIBS})
endif()
if(APPLE)
add_definitions(-DMACOSX -D_DARWIN_C_SOURCE)
endif()
set(SRCS src/igd_desc_parse.c
src/miniupnpc.c
src/minixml.c
@ -36,4 +22,16 @@ add_library(miniupnpc STATIC ${SRCS})
dolphin_disable_warnings(miniupnpc)
target_include_directories(miniupnpc PUBLIC src)
if(UNIX)
target_compile_definitions(miniupnpc PRIVATE MINIUPNPC_SET_SOCKET_TIMEOUT)
target_compile_definitions(miniupnpc PRIVATE _BSD_SOURCE _POSIX_C_SOURCE=1)
elseif(WIN32)
target_compile_definitions(miniupnpc PRIVATE -D_WIN32_WINNT=0x0501)
target_link_libraries(miniupnpc PUBLIC ws2_32 iphlpapi)
endif()
if(APPLE)
target_compile_definitions(miniupnpc PRIVATE MACOSX _DARWIN_C_SOURCE)
endif()
add_library(Miniupnpc::miniupnpc ALIAS miniupnpc)

View File

@ -60,7 +60,7 @@ dolphin_disable_warnings(rcheevos)
target_include_directories(rcheevos PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/rcheevos/include")
target_include_directories(rcheevos INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
target_compile_definitions(rcheevos PRIVATE "RC_DISABLE_LUA=1" "RCHEEVOS_URL_SSL")
target_compile_definitions(rcheevos PRIVATE "RC_CLIENT_SUPPORTS_HASH")
target_compile_definitions(rcheevos PUBLIC "RC_CLIENT_SUPPORTS_HASH")
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
target_compile_definitions(rcheevos PRIVATE "_CRT_SECURE_NO_WARNINGS")
endif()

View File

@ -1,3 +1,7 @@
if(NOT MSVC)
add_compile_options(-Wno-missing-declarations)
endif()
add_subdirectory(AudioCommon)
add_subdirectory(Common)
add_subdirectory(Core)

View File

@ -206,6 +206,8 @@ elseif(WIN32)
if (_M_X86_64)
target_link_libraries(common PRIVATE opengl32.lib)
endif()
target_compile_definitions(common PRIVATE _WIN32_WINNT=0x0602)
target_compile_options(common PRIVATE -mxsave)
elseif (ANDROID)
target_link_libraries(common
PRIVATE
@ -334,6 +336,7 @@ endif()
if(WIN32)
target_sources(common PRIVATE HRWrap.h HRWrap.cpp)
target_link_libraries(common PUBLIC qwave)
endif()
if(USE_UPNP)
@ -373,7 +376,7 @@ if(UNIX)
if(SYSTEMD_FOUND)
target_link_libraries(traversal_server PRIVATE ${SYSTEMD_LIBRARIES})
endif()
elseif(WIN32)
elseif(MSVC)
find_package(PowerShell REQUIRED)
execute_process(
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.h
ActionReplay.cpp
@ -715,7 +715,6 @@ if(WIN32)
videod3d
videod3d12
setupapi.lib
iphlpapi.lib
)
target_compile_definitions(core PRIVATE "-D_WINSOCK_DEPRECATED_NO_WARNINGS")
elseif(APPLE)
@ -783,8 +782,6 @@ if(MSVC)
target_link_libraries(core PRIVATE use_pch)
endif()
if(USE_RETRO_ACHIEVEMENTS)
target_link_libraries(core PUBLIC rcheevos)
target_compile_definitions(core PUBLIC -DUSE_RETRO_ACHIEVEMENTS)
target_compile_definitions(core PUBLIC -DRC_CLIENT_SUPPORTS_HASH)
if(NOT MSVC)
target_compile_options(core PRIVATE -Wno-invalid-offsetof)
endif()

View File

@ -84,3 +84,8 @@ if(MSVC)
# Add precompiled header
target_link_libraries(discio PRIVATE use_pch)
endif()
if(USE_RETRO_ACHIEVEMENTS)
target_link_libraries(discio PUBLIC rcheevos)
target_compile_definitions(discio PUBLIC -DUSE_RETRO_ACHIEVEMENTS)
endif()

View File

@ -12,6 +12,7 @@ endif()
if(WIN32)
target_sources(dolphin-nogui PRIVATE PlatformWin32.cpp)
target_link_libraries(dolphin-nogui PRIVATE Dwmapi.lib)
endif()
if(APPLE)
@ -32,6 +33,11 @@ PRIVATE
cpp-optparse
)
if(WIN32)
target_link_libraries(dolphin-nogui PRIVATE d3d11)
target_link_options(dolphin-nogui PRIVATE -municode)
endif()
if(APPLE)
target_link_libraries(dolphin-nogui
PRIVATE

View File

@ -19,7 +19,7 @@ message(STATUS "Found Qt version ${Qt6_VERSION}")
set_property(TARGET Qt6::Core PROPERTY INTERFACE_COMPILE_FEATURES "")
add_executable(dolphin-emu
add_executable(dolphin-emu WIN32
AboutDialog.cpp
AboutDialog.h
CheatSearchFactoryWidget.cpp
@ -439,6 +439,7 @@ if (WIN32)
shell32.lib
dwmapi.lib # Needed to set window decorations for dark theme
)
target_link_options(dolphin-emu PRIVATE -municode)
endif()
if (MSVC)
@ -490,11 +491,6 @@ if(WIN32)
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/qt.conf.win" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
)
# Delegate to Qt's official deployment binary on Windows to copy over the necessary Qt-specific libraries, etc.
get_target_property(MOC_EXECUTABLE_LOCATION Qt6::moc IMPORTED_LOCATION)
get_filename_component(QT_BINARY_DIRECTORY "${MOC_EXECUTABLE_LOCATION}" DIRECTORY)
find_program(WINDEPLOYQT_EXE windeployqt HINTS "${QT_BINARY_DIRECTORY}")
# Note: We set the PATH for the duration of this command so that the
# deployment application is able to locate the Qt libraries to copy.
# if the necessary paths aren't already set beforehand.
@ -511,13 +507,13 @@ if(WIN32)
#
add_custom_command(TARGET dolphin-emu POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E env PATH="${QT_BINARY_DIRECTORY}"
"${WINDEPLOYQT_EXE}" --libdir="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
"${WINDEPLOYQT_EXECUTABLE}" --libdir="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
--plugindir="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/QtPlugins"
$<IF:$<CONFIG:Debug>,--debug,--release>
--no-translations
--no-compiler-runtime
--no-system-d3d-compiler
--no-opengl-sw
--verbose 0
"$<TARGET_FILE:dolphin-emu>"
)
endif()

View File

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

View File

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

View File

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

View File

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