CMakeLists.txt 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. cmake_minimum_required(VERSION 3.31)
  2. project(Sunrise CXX)
  3. set(CMAKE_CXX_STANDARD 20)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  6. set(XWIN_SDK_VERSION "10.0.26100" CACHE STRING "xwin SDK Version")
  7. file(GLOB_RECURSE SUNRISE_SOURCES CONFIGURE_DEPENDS
  8. "Sunrise/src/*.cpp"
  9. "Sunrise/src/*.h"
  10. )
  11. file(GLOB_RECURSE VENDOR_SOURCES CONFIGURE_DEPENDS
  12. "Sunrise/vendor/detours/*.cpp"
  13. "Sunrise/vendor/detours/*.h"
  14. "Sunrise/vendor/imgui/*.cpp"
  15. "Sunrise/vendor/imgui/*.h"
  16. "Sunrise/vendor/*/*LICENSE*"
  17. "Sunrise/vendor/*/*LICENSE.txt"
  18. )
  19. file(GLOB_RECURSE RESOURCE_FILES CONFIGURE_DEPENDS
  20. "Sunrise/resources/*.rc"
  21. "Sunrise/resources/*.h"
  22. "Sunrise/resources/*.json"
  23. )
  24. add_library(steam_api64 SHARED
  25. ${SUNRISE_SOURCES}
  26. ${VENDOR_SOURCES}
  27. ${RESOURCE_FILES}
  28. )
  29. set_property(TARGET steam_api64 PROPERTY
  30. MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
  31. )
  32. include(CheckIPOSupported)
  33. check_ipo_supported(RESULT lto_supported)
  34. if(lto_supported)
  35. set_property(TARGET steam_api64 APPEND PROPERTY
  36. INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
  37. )
  38. endif()
  39. target_include_directories(steam_api64
  40. PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/src"
  41. )
  42. target_include_directories(steam_api64 SYSTEM PRIVATE
  43. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/detours"
  44. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/imgui"
  45. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/imgui/backends"
  46. )
  47. if(DEFINED XWIN_DIR)
  48. target_include_directories(steam_api64 SYSTEM PRIVATE
  49. "${XWIN_DIR}/sdk/Include/${XWIN_SDK_VERSION}/um"
  50. "${XWIN_DIR}/sdk/Include/${XWIN_SDK_VERSION}/shared"
  51. )
  52. endif()
  53. target_compile_definitions(steam_api64 PRIVATE
  54. WIN32
  55. _WINDOWS
  56. _USRDLL
  57. WIN32_LEAN_AND_MEAN
  58. NOMINMAX
  59. UNICODE
  60. _UNICODE
  61. _WINSOCK_DEPRECATED_NO_WARNINGS
  62. $<$<CONFIG:Debug>:_DEBUG>
  63. $<$<CONFIG:Release>:NDEBUG>
  64. IMGUI_USER_CONFIG="core/ui/imgui_user_config.h"
  65. )
  66. if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  67. # Clang warnings are more strict the MSVC I guess, this only works on real clang
  68. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  69. list(APPEND STRICT_WARNING_FLAGS
  70. -Wno-unused-const-variable
  71. -Wno-unused-function
  72. -Wno-braced-scalar-init
  73. -Wno-missing-braces
  74. -Wno-missing-designated-field-initializers
  75. -Wno-cast-function-type-mismatch
  76. )
  77. endif()
  78. set_source_files_properties(${SUNRISE_SOURCES} PROPERTIES
  79. COMPILE_OPTIONS "${STRICT_WARNING_FLAGS}"
  80. )
  81. set_source_files_properties(${VENDOR_SOURCES} PROPERTIES
  82. COMPILE_OPTIONS "/W3"
  83. )
  84. endif()
  85. target_link_libraries(steam_api64 PRIVATE
  86. kernel32 bcrypt user32 gdi32 dwmapi
  87. d3dcompiler shell32 ws2_32 synchronization
  88. )
  89. set_target_properties(steam_api64 PROPERTIES
  90. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
  91. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
  92. ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
  93. )