瀏覽代碼

build: add cmake as build tool for linux

totaltaxamount 3 周之前
父節點
當前提交
0c9790075e
共有 4 個文件被更改,包括 132 次插入3 次删除
  1. 6 1
      .gitignore
  2. 104 0
      CMakeLists.txt
  3. 2 2
      Sunrise/resources/sunrise.rc
  4. 20 0
      linux-to-win-toolchain.cmake

+ 6 - 1
.gitignore

@@ -1,10 +1,15 @@
-/build/
 /.vs/
 /.idea/
 /.vscode/
+/.direnv/
+/.xwin-cache/
+/.cache/
 *.user
 *.suo
 *.userosscache
 *.sln.docstates
 *.aps
 *.log
+
+# CMake build files
+/build/

+ 104 - 0
CMakeLists.txt

@@ -0,0 +1,104 @@
+cmake_minimum_required(VERSION 3.31)
+project(Sunrise CXX)
+
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+set(XWIN_SDK_VERSION "10.0.26100" CACHE STRING "xwin SDK Version")
+
+file(GLOB_RECURSE SUNRISE_SOURCES CONFIGURE_DEPENDS
+    "Sunrise/src/*.cpp"
+    "Sunrise/src/*.h"
+)
+file(GLOB_RECURSE VENDOR_SOURCES CONFIGURE_DEPENDS
+    "Sunrise/vendor/detours/*.cpp"
+    "Sunrise/vendor/detours/*.h"
+    "Sunrise/vendor/imgui/*.cpp"
+    "Sunrise/vendor/imgui/*.h"
+    "Sunrise/vendor/*/*LICENSE*"
+    "Sunrise/vendor/*/*LICENSE.txt"
+)
+file(GLOB_RECURSE RESOURCE_FILES CONFIGURE_DEPENDS
+    "Sunrise/resources/*.rc"
+    "Sunrise/resources/*.h"
+    "Sunrise/resources/*.json"
+)
+
+add_library(steam_api64 SHARED
+    ${SUNRISE_SOURCES}
+    ${VENDOR_SOURCES}
+    ${RESOURCE_FILES}
+)
+
+set_property(TARGET steam_api64 PROPERTY
+    MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
+)
+
+include(CheckIPOSupported)
+check_ipo_supported(RESULT lto_supported)
+if(lto_supported)
+    set_property(TARGET steam_api64 APPEND PROPERTY
+        INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
+    )
+endif()
+target_include_directories(steam_api64
+    PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/src"
+)
+target_include_directories(steam_api64 SYSTEM PRIVATE
+    "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/detours"
+    "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/imgui"
+    "${CMAKE_CURRENT_SOURCE_DIR}/Sunrise/vendor/imgui/backends"
+)
+
+if(DEFINED XWIN_DIR)
+    target_include_directories(steam_api64 SYSTEM PRIVATE
+        "${XWIN_DIR}/sdk/Include/${XWIN_SDK_VERSION}/um"
+        "${XWIN_DIR}/sdk/Include/${XWIN_SDK_VERSION}/shared"
+    )
+endif()
+
+target_compile_definitions(steam_api64 PRIVATE
+    WIN32
+    _WINDOWS
+    _USRDLL
+    WIN32_LEAN_AND_MEAN
+    NOMINMAX
+    UNICODE
+    _UNICODE
+    _WINSOCK_DEPRECATED_NO_WARNINGS
+    $<$<CONFIG:Debug>:_DEBUG>
+    $<$<CONFIG:Release>:NDEBUG>
+    IMGUI_USER_CONFIG="core/ui/imgui_user_config.h"
+)
+
+if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+    # Clang warnings are more strict the MSVC I guess, this only works on real clang
+    if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+        list(APPEND STRICT_WARNING_FLAGS
+            -Wno-unused-const-variable
+            -Wno-unused-function
+            -Wno-braced-scalar-init
+            -Wno-missing-braces
+            -Wno-missing-designated-field-initializers
+            -Wno-cast-function-type-mismatch
+        )
+    endif()
+
+    set_source_files_properties(${SUNRISE_SOURCES} PROPERTIES
+        COMPILE_OPTIONS "${STRICT_WARNING_FLAGS}"
+    )
+    set_source_files_properties(${VENDOR_SOURCES} PROPERTIES
+        COMPILE_OPTIONS "/W3"
+    )
+endif()
+
+target_link_libraries(steam_api64 PRIVATE
+    kernel32 bcrypt user32 gdi32 dwmapi
+    d3dcompiler shell32 ws2_32 synchronization
+)
+
+set_target_properties(steam_api64 PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
+    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
+    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/x64/$<CONFIG>"
+)

+ 2 - 2
Sunrise/resources/sunrise.rc

@@ -3,8 +3,8 @@
 #include "resource.h"
 
 IDR_DEFAULT_SETTINGS RCDATA "default_settings.json"
-IDR_IMGUI_LICENSE RCDATA "..\\vendor\\imgui\\LICENSE.txt"
-IDR_DETOURS_LICENSE RCDATA "..\\vendor\\detours\\LICENSE.md"
+IDR_IMGUI_LICENSE RCDATA "LICENSE.txt"
+IDR_DETOURS_LICENSE RCDATA "LICENSE.md"
 
 VS_VERSION_INFO VERSIONINFO
 FILEVERSION SUNRISE_VER_MAJOR, SUNRISE_VER_MINOR, SUNRISE_VER_PATCH, SUNRISE_VER_BUILD

+ 20 - 0
linux-to-win-toolchain.cmake

@@ -0,0 +1,20 @@
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR x86_64)
+
+set(CMAKE_C_COMPILER clang-cl)
+set(CMAKE_CXX_COMPILER clang-cl)
+set(CMAKE_LINKER lld-link)
+set(CMAKE_AR llvm-lib)
+set(CMAKE_RC_COMPILER llvm-rc)
+
+set(XWIN_DIR "${CMAKE_CURRENT_LIST_DIR}/.xwin-cache")
+
+set(CMAKE_C_FLAGS "-target x86_64-pc-windows-msvc /winsdkdir \"${XWIN_DIR}/sdk\" /vctoolsdir \"${XWIN_DIR}/crt\"" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" FORCE)
+
+set(CMAKE_SHARED_LINKER_FLAGS "/libpath:\"${XWIN_DIR}/crt/lib/x86_64\" /libpath:\"${XWIN_DIR}/sdk/lib/um/x86_64\" /libpath:\"${XWIN_DIR}/sdk/lib/ucrt/x86_64\"" CACHE STRING "" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" CACHE STRING "" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}"
+CACHE STRING "" FORCE)
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)