summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMake/DolphinSymlinkOrCopy.cmake20
-rw-r--r--CMakeLists.txt12
-rw-r--r--Source/Core/DolphinQt/CMakeLists.txt57
3 files changed, 56 insertions, 33 deletions
diff --git a/CMake/DolphinSymlinkOrCopy.cmake b/CMake/DolphinSymlinkOrCopy.cmake
new file mode 100644
index 0000000000..dd712cb266
--- /dev/null
+++ b/CMake/DolphinSymlinkOrCopy.cmake
@@ -0,0 +1,20 @@
+if(NOT DEFINED target OR NOT DEFINED link)
+ message(FATAL_ERROR "`target` and `link` must be defined")
+endif()
+
+file(CREATE_LINK "${target}" "${link}" RESULT result SYMBOLIC)
+if(result EQUAL 0)
+ return()
+endif()
+
+if(WIN32)
+ set(hint "On Windows, enable Developer Mode to allow symlinks (https://learn.microsoft.com/windows/advanced-settings/developer-mode).")
+endif()
+message(WARNING "Symlink failed (${result}). Falling back to copying. ${hint}")
+
+file(REMOVE_RECURSE "${link}")
+if(IS_DIRECTORY "${target}")
+ file(COPY "${target}/." DESTINATION "${link}")
+else()
+ file(COPY_FILE "${target}" "${link}" ONLY_IF_DIFFERENT)
+endif()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c3a0f57ba3..6ba9772bf7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -147,12 +147,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
endif()
endif()
-if(UNIX)
- # Builds a relocatable binary on Linux.
- # The Sys folder will need to be copied to the Binaries folder.
- option(LINUX_LOCAL_DEV "Enable relocatable binary" OFF)
-endif()
-
list(APPEND CMAKE_MODULE_PATH
${CMAKE_CURRENT_SOURCE_DIR}/CMake
)
@@ -396,12 +390,6 @@ if(ENABLE_LTO)
endif()
endif()
-if(UNIX)
- if(LINUX_LOCAL_DEV)
- add_definitions(-DLINUX_LOCAL_DEV)
- endif()
-endif()
-
# BSDs put packages in /usr/local instead of /usr, so we need to
# force CMake to look in those directories by default, too.
# All commands and submodule commands also need to see these
diff --git a/Source/Core/DolphinQt/CMakeLists.txt b/Source/Core/DolphinQt/CMakeLists.txt
index bd197b5495..2b7e6bb949 100644
--- a/Source/Core/DolphinQt/CMakeLists.txt
+++ b/Source/Core/DolphinQt/CMakeLists.txt
@@ -495,43 +495,58 @@ if (MSVC)
target_compile_options(dolphin-emu PRIVATE "/GR")
endif()
-if(WIN32)
- target_sources(dolphin-emu PRIVATE DolphinQt.manifest DolphinQt.rc)
-
- set_target_properties(dolphin-emu PROPERTIES
- DEBUG_POSTFIX D
- OUTPUT_NAME Dolphin
- WIN32_EXECUTABLE TRUE
- )
-
- # Copy Sys dir
+if (NOT APPLE AND NOT ANDROID)
+ # Symlink Sys
add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Sys"
- COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/Data/Sys" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Sys"
+ COMMAND ${CMAKE_COMMAND}
+ -Dtarget="${CMAKE_SOURCE_DIR}/Data/Sys"
+ -Dlink="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Sys"
+ -P="${CMAKE_SOURCE_DIR}/CMake/DolphinSymlinkOrCopy.cmake"
)
- # Copy COPYING
+ # Symlink COPYING
add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/COPYING" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/COPYING"
+ COMMAND ${CMAKE_COMMAND}
+ -Dtarget="${CMAKE_SOURCE_DIR}/COPYING"
+ -Dlink="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/COPYING"
+ -P="${CMAKE_SOURCE_DIR}/CMake/DolphinSymlinkOrCopy.cmake"
)
- # Copy Licenses dir
+ # Symlink Licenses dir
add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/LICENSES" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Licenses"
+ COMMAND ${CMAKE_COMMAND}
+ -Dtarget="${CMAKE_SOURCE_DIR}/LICENSES"
+ -Dlink="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Licenses"
+ -P="${CMAKE_SOURCE_DIR}/CMake/DolphinSymlinkOrCopy.cmake"
)
-
- # Copy qt.conf
+endif()
+if (WIN32)
+ # Symlink qt.conf
add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/qt.conf.win" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
+ COMMAND ${CMAKE_COMMAND}
+ -Dtarget="${CMAKE_CURRENT_SOURCE_DIR}/qt.conf.win"
+ -Dlink="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
+ -P="${CMAKE_SOURCE_DIR}/CMake/DolphinSymlinkOrCopy.cmake"
)
if (ENABLE_AUTOUPDATE)
- # Copy build_info.txt
+ # Symlink build_info.txt
add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_BINARY_DIR}/build_info.txt" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/build_info.txt"
+ COMMAND ${CMAKE_COMMAND}
+ -Dtarget="${CMAKE_BINARY_DIR}/build_info.txt"
+ -Dlink="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/build_info.txt"
+ -P="${CMAKE_SOURCE_DIR}/CMake/DolphinSymlinkOrCopy.cmake"
)
endif()
+
+ target_sources(dolphin-emu PRIVATE DolphinQt.manifest DolphinQt.rc)
+
+ set_target_properties(dolphin-emu PROPERTIES
+ DEBUG_POSTFIX D
+ OUTPUT_NAME Dolphin
+ WIN32_EXECUTABLE TRUE
+ )
# Delegate to Qt's official deployment binary on Windows to copy over the necessary Qt-specific libraries, etc.
get_target_property(MOC_EXECUTABLE_LOCATION Qt6::moc IMPORTED_LOCATION)
get_filename_component(QT_BINARY_DIRECTORY "${MOC_EXECUTABLE_LOCATION}" DIRECTORY)