diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bf33c7a6..6726e49fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,8 +18,34 @@ option(USE_LIBCXX "Link WickedEngine to llvm libc++ library - only available wit option(WICKED_EDITOR "Build WickedEngine editor" ON) option(WICKED_TESTS "Build WickedEngine tests" ON) option(WICKED_IMGUI_EXAMPLE "Build WickedEngine imgui example" ON) +if (CMAKE_HOST_WIN32) + set(symlink_default OFF) +else() + set(symlink_default ON) +endif() +option(WICKED_USE_SYMLINKS "Prefer symlinking over copying directories" ${symlink_default}) -include(CMakeDependentOption) + +if(WICKED_USE_SYMLINKS) + # check for symlink support (on windows it requires admin or developer mode) + execute_process( + COMMAND ${CMAKE_COMMAND} -E create_symlink CMakeLists.txt ${CMAKE_CURRENT_BINARY_DIR}/symlink-test + ERROR_QUIET + RESULT_VARIABLE symlink_check_result + ) + if(symlink_check_result EQUAL 0) + file(REMOVE ${CMAKE_BINARY_DIR}/symlink-test) + set(COPY_OR_SYMLINK_DIR_CMD create_symlink) + else() + message(FATAL_ERROR "Symlinks are not supported. Either disable them using -DWICKED_USE_SYMLINKS=OFF or enable Windows' developer mode") + endif() +else() + if(CMAKE_VERSION VERSION_LESS "3.26.0") + set(COPY_OR_SYMLINK_DIR_CMD copy_directory) + else() + set(COPY_OR_SYMLINK_DIR_CMD copy_directory_if_different) + endif() +endif() if(UNIX) option(WICKED_LINUX_TEMPLATE "Build WickedEngine Linux template" ON) @@ -99,10 +125,9 @@ endif() add_subdirectory(WickedEngine) add_custom_target(Content - COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_CURRENT_BINARY_DIR}/Content - COMMAND ${CMAKE_COMMAND} -E create_symlink ${WICKED_ROOT_DIR}/Content ${CMAKE_CURRENT_BINARY_DIR}/Content - COMMENT "Symlinking Content directory" - VERBATIM + COMMAND ${CMAKE_COMMAND} -E ${COPY_OR_SYMLINK_DIR_CMD} ${WICKED_ROOT_DIR}/Content ${CMAKE_CURRENT_BINARY_DIR}/Content + COMMENT "$,Symlinking,Copying> Content directory" + VERBATIM ) if (WICKED_EDITOR) diff --git a/Samples/Tests/CMakeLists.txt b/Samples/Tests/CMakeLists.txt index 9dadc4751..78ecee0e9 100644 --- a/Samples/Tests/CMakeLists.txt +++ b/Samples/Tests/CMakeLists.txt @@ -46,11 +46,11 @@ add_custom_command( # Copy the shader library next to the executable COMMAND ${CMAKE_COMMAND} -E copy_if_different ${WICKED_ROOT_DIR}/WickedEngine/${LIB_DXCOMPILER} ${CMAKE_CURRENT_BINARY_DIR} # Copy the resources - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/images ${CMAKE_CURRENT_BINARY_DIR}/images + COMMAND ${CMAKE_COMMAND} -E ${COPY_OR_SYMLINK_DIR_CMD} ${CMAKE_CURRENT_SOURCE_DIR}/images ${CMAKE_CURRENT_BINARY_DIR}/images COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/test_script.lua ${CMAKE_CURRENT_BINARY_DIR}/test_script.lua # Copy font test resources COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/yumin.ttf ${CMAKE_CURRENT_BINARY_DIR}/ - COMMENT "Copying Tests resources" + COMMENT "$,Symlinking,Copying> Tests resources" VERBATIM ) diff --git a/WickedEngine/CMakeLists.txt b/WickedEngine/CMakeLists.txt index d37cf4462..7a22706f2 100644 --- a/WickedEngine/CMakeLists.txt +++ b/WickedEngine/CMakeLists.txt @@ -191,9 +191,9 @@ set_property(TARGET dxcompiler PROPERTY # Copy the shader library next to the executable add_custom_command( - TARGET ${TARGET_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${WICKED_ROOT_DIR}/WickedEngine/${LIBDXCOMPILER} ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E create_symlink ${WICKED_ROOT_DIR}/WickedEngine/shaders ${CMAKE_CURRENT_BINARY_DIR}/shaders + TARGET ${TARGET_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${WICKED_ROOT_DIR}/WickedEngine/${LIBDXCOMPILER} ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E ${COPY_OR_SYMLINK_DIR_CMD} ${WICKED_ROOT_DIR}/WickedEngine/shaders ${CMAKE_CURRENT_BINARY_DIR}/shaders ) set_property(SOURCE