Files
MinecraftConsoles/cmake/CopyFileScript.cmake
rtm516 02a5961f39 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
2026-03-17 16:39:22 -05:00

51 lines
1.5 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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()