diff options
| author | Joshua Vandaƫle <joshua@vandaele.software> | 2025-12-11 03:29:09 +0100 |
|---|---|---|
| committer | Joshua Vandaƫle <joshua@vandaele.software> | 2026-07-24 03:45:13 +0200 |
| commit | 3d9f46cd64eeedbb7ac92039002d505ca6e594c7 (patch) | |
| tree | 798710c4024e5be3dbddc81f3aea60a625f3b262 | |
| parent | fa2a250f01be4f58e728d6f3fbb43e1eef56c808 (diff) | |
CMake: Remove LINUX_LOCAL_DEV and symlink required files
| -rw-r--r-- | CMake/DolphinSymlinkOrCopy.cmake | 20 | ||||
| -rw-r--r-- | CMakeLists.txt | 12 | ||||
| -rw-r--r-- | Source/Core/DolphinQt/CMakeLists.txt | 57 |
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) |
