Move project to CMake (#781)

* Move to cmake

* Move sources to source_groups and ditch more old VS files

* Add BuildVer.h generation

* Break out cmake source lists to platforms

* Don't copy swf files

* Revert audio changes from merge

* Add platform defines

* Match MSBuild flags

* Move BuildVer.h to common include and fix rebuild issue

* Seperate projects properly

* Exclude more files and make sure GameHDD exists

* Missing line

* Remove remaining VS project files

* Update readme and actions

* Use incremental LTCG

* Update workflows

* Update build workflows and output folder

* Disable vcpkg checks

* Force MSVC

* Use precompiled headers

* Only use PCH for cpp

* Exclude compat_shims from PCH

* Handle per-platform source includes

* Copy only current platform media

* Define Iggy libs per platform

* Fix EnsureGameHDD check

* Only set WIN32_EXECUTABLE on Windows

* Correct Iggy libs path

* Remove include of terrain_MipmapLevel

* Correct path to xsb/xwb

* Implement copilot suggestions

* Add clang flags (untested)

* Fix robocopy error checking

* Update documentation

* Drop CMakePresets.json version as we dont use v6 features

* Always cleanup artifacts in nightly even if some builds fail

* Re-work compiler target options

* Move newer iggy dll into redist and cleanup

* Fix typos

* Remove 'Source Files' from all source groups

* Remove old ps1 build scripts
This commit is contained in:
rtm516
2026-03-17 21:39:22 +00:00
committed by GitHub
parent 1a3fcb5b20
commit 02a5961f39
106 changed files with 8070 additions and 72800 deletions

View File

@@ -0,0 +1,51 @@
# Cross-platform single file copy using fast native tools
#
# Required:
# COPY_SOURCE pipe-separated list of source file paths
# COPY_DEST destination directory
if(NOT COPY_SOURCE OR NOT COPY_DEST)
message(FATAL_ERROR "COPY_SOURCE and COPY_DEST must be set.")
endif()
string(REPLACE "|" ";" COPY_SOURCE "${COPY_SOURCE}")
if(CMAKE_HOST_WIN32)
# Group files by parent directory so we can batch them into single robocopy calls
set(dir_file_map "")
set(unique_dirs "")
foreach(filepath IN LISTS COPY_SOURCE)
get_filename_component(dir "${filepath}" DIRECTORY)
get_filename_component(name "${filepath}" NAME)
if(NOT dir IN_LIST unique_dirs)
list(APPEND unique_dirs "${dir}")
endif()
list(APPEND "FILES_IN_${dir}" "${name}")
endforeach()
foreach(dir IN LISTS unique_dirs)
execute_process(
COMMAND robocopy.exe "${dir}" "${COPY_DEST}" ${FILES_IN_${dir}} /MT /R:0 /W:0 /NP
RESULT_VARIABLE rc
)
if(rc GREATER 7) # Allows for "files copied" and "no files copied" cases, but treats actual errors as failures
message(FATAL_ERROR "robocopy failed (exit code ${rc})")
endif()
endforeach()
elseif(CMAKE_HOST_UNIX)
execute_process(
COMMAND rsync -av ${COPY_SOURCE} "${COPY_DEST}/"
RESULT_VARIABLE rs
)
if(rs GREATER 0) # Any non-zero exit code indicates an error
message(FATAL_ERROR "rsync failed (exit code ${rs})")
endif()
else()
message(FATAL_ERROR "Unsupported host platform for asset copying.")
endif()