CMakeLists.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. cmake_minimum_required(VERSION 3.31)
  2. project(Sunrise C 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/lua/*.c"
  17. "Sunrise/vendor/lua/*.h"
  18. "Sunrise/vendor/sqlite/*.c"
  19. "Sunrise/vendor/sqlite/*.h"
  20. )
  21. # Lua builds as C++ here, matching the MSVC project's CompileAsCpp setting.
  22. file(GLOB_RECURSE LUA_SOURCES CONFIGURE_DEPENDS
  23. "Sunrise/vendor/lua/*.c"
  24. )
  25. set_source_files_properties(${LUA_SOURCES} PROPERTIES LANGUAGE CXX)
  26. file(GLOB_RECURSE RESOURCE_FILES CONFIGURE_DEPENDS
  27. "Sunrise/resources/*.rc"
  28. "Sunrise/resources/*.h"
  29. "Sunrise/resources/*.json"
  30. "Sunrise/resources/*.sql"
  31. )
  32. add_library(steam_api64 SHARED
  33. ${SUNRISE_SOURCES}
  34. ${VENDOR_SOURCES}
  35. ${RESOURCE_FILES}
  36. )
  37. set_property(TARGET steam_api64 PROPERTY
  38. MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
  39. )
  40. include(CheckIPOSupported)
  41. check_ipo_supported(RESULT lto_supported)
  42. if(lto_supported)
  43. set_property(TARGET steam_api64 APPEND PROPERTY
  44. INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
  45. )
  46. endif()
  47. target_include_directories(steam_api64
  48. PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/src"
  49. )
  50. # sunrise.rc names its payloads relative to itself, so its directory has to be on the include path.
  51. target_include_directories(steam_api64
  52. PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/resources"
  53. )
  54. target_include_directories(steam_api64 SYSTEM PRIVATE
  55. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/detours"
  56. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/imgui"
  57. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/imgui/backends"
  58. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/lua"
  59. "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/sqlite"
  60. )
  61. if(DEFINED XWIN_DIR)
  62. target_include_directories(steam_api64 SYSTEM PRIVATE
  63. "${XWIN_DIR}/sdk/Include/${XWIN_SDK_VERSION}/um"
  64. "${XWIN_DIR}/sdk/Include/${XWIN_SDK_VERSION}/shared"
  65. )
  66. endif()
  67. target_compile_definitions(steam_api64 PRIVATE
  68. WIN32
  69. _WINDOWS
  70. _USRDLL
  71. WIN32_LEAN_AND_MEAN
  72. NOMINMAX
  73. UNICODE
  74. _UNICODE
  75. _WINSOCK_DEPRECATED_NO_WARNINGS
  76. $<$<CONFIG:Debug>:_DEBUG>
  77. $<$<CONFIG:Release>:NDEBUG>
  78. IMGUI_USER_CONFIG="core/ui/imgui_user_config.h"
  79. )
  80. if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  81. # The vendored Lua interpreter throws, so its error path needs C++ unwinding.
  82. target_compile_options(steam_api64 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/EHsc>)
  83. # Clang warnings are more strict the MSVC I guess, this only works on real clang
  84. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  85. list(APPEND STRICT_WARNING_FLAGS
  86. -Wno-unused-const-variable
  87. -Wno-unused-function
  88. -Wno-braced-scalar-init
  89. -Wno-missing-braces
  90. -Wno-missing-designated-field-initializers
  91. -Wno-cast-function-type-mismatch
  92. )
  93. endif()
  94. set_source_files_properties(${SUNRISE_SOURCES} PROPERTIES
  95. COMPILE_OPTIONS "${STRICT_WARNING_FLAGS}"
  96. )
  97. set_source_files_properties(${VENDOR_SOURCES} PROPERTIES
  98. COMPILE_OPTIONS "/W3"
  99. )
  100. endif()
  101. if(CMAKE_HOST_LINUX AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  102. target_compile_options(steam_api64 PRIVATE
  103. $<$<CONFIG:Debug>:/clang:-gdwarf>
  104. $<$<CONFIG:Debug>:/clang:-g>
  105. )
  106. target_link_options(steam_api64 PRIVATE
  107. $<$<CONFIG:Debug>:/DEBUG:DWARF>
  108. )
  109. endif()
  110. target_link_libraries(steam_api64 PRIVATE
  111. kernel32 bcrypt user32 gdi32 dwmapi
  112. d3dcompiler shell32 ws2_32 synchronization
  113. windowscodecs
  114. )
  115. set_target_properties(steam_api64 PROPERTIES
  116. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
  117. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
  118. ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
  119. )
  120. set_source_files_properties(Sunrise/vendor/sqlite/sqlite3.c PROPERTIES
  121. COMPILE_DEFINITIONS "SQLITE_OMIT_LOAD_EXTENSION;SQLITE_THREADSAFE=1"
  122. )