summaryrefslogtreecommitdiff
path: root/CMakeModules/CopyYuzuQt5Deps.cmake
diff options
context:
space:
mode:
authorlat9nq <22451773+lat9nq@users.noreply.github.com>2021-05-19 17:18:33 -0400
committerlat9nq <22451773+lat9nq@users.noreply.github.com>2021-05-26 15:29:45 -0400
commit52cc25ccbf5faf3ae0ee33e9e28e998440f5c424 (patch)
treec390fd461611f32a69274fbb53f45da4d18fa697 /CMakeModules/CopyYuzuQt5Deps.cmake
parent3394f24728050368086afae4beae81e5bd21d9f1 (diff)
cmake: Download Qt binaries on Linux if needed
If the local version of Qt is older than the minimum version required by yuzu, download a pre-built binary package from yuzu-emu/ext-linux-bin and build yuzu with it, instead. This also requires linking yuzu to the correct libraries after building it, and copying over the required binaries when building yuzu. This sets the Qt requirement to 5.12, which is intentionally behind the versions used by our toolchains since they are not all updated yet to 5.15.
Diffstat (limited to 'CMakeModules/CopyYuzuQt5Deps.cmake')
-rw-r--r--CMakeModules/CopyYuzuQt5Deps.cmake135
1 files changed, 97 insertions, 38 deletions
diff --git a/CMakeModules/CopyYuzuQt5Deps.cmake b/CMakeModules/CopyYuzuQt5Deps.cmake
index 59343b1ca..4a6aeebbb 100644
--- a/CMakeModules/CopyYuzuQt5Deps.cmake
+++ b/CMakeModules/CopyYuzuQt5Deps.cmake
@@ -1,52 +1,111 @@
function(copy_yuzu_Qt5_deps target_dir)
include(WindowsCopyFiles)
- set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
- set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin")
+ if (MSVC)
+ set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
+ set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin")
+ else()
+ set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/")
+ set(Qt5_DLL_DIR "${Qt5_DIR}/../../../lib/")
+ endif()
set(Qt5_PLATFORMS_DIR "${Qt5_DIR}/../../../plugins/platforms/")
+ set(Qt5_PLATFORMTHEMES_DIR "${Qt5_DIR}/../../../plugins/platformthemes/")
+ set(Qt5_PLATFORMINPUTCONTEXTS_DIR "${Qt5_DIR}/../../../plugins/platforminputcontexts/")
+ set(Qt5_XCBGLINTEGRATIONS_DIR "${Qt5_DIR}/../../../plugins/xcbglintegrations/")
set(Qt5_STYLES_DIR "${Qt5_DIR}/../../../plugins/styles/")
set(Qt5_IMAGEFORMATS_DIR "${Qt5_DIR}/../../../plugins/imageformats/")
set(Qt5_RESOURCES_DIR "${Qt5_DIR}/../../../resources/")
set(PLATFORMS ${DLL_DEST}plugins/platforms/)
set(STYLES ${DLL_DEST}plugins/styles/)
set(IMAGEFORMATS ${DLL_DEST}plugins/imageformats/)
- windows_copy_files(${target_dir} ${Qt5_DLL_DIR} ${DLL_DEST}
- icudt*.dll
- icuin*.dll
- icuuc*.dll
- Qt5Core$<$<CONFIG:Debug>:d>.*
- Qt5Gui$<$<CONFIG:Debug>:d>.*
- Qt5Widgets$<$<CONFIG:Debug>:d>.*
- )
-
- if (YUZU_USE_QT_WEB_ENGINE)
- windows_copy_files(${target_dir} ${Qt5_DLL_DIR} ${DLL_DEST}
- Qt5Network$<$<CONFIG:Debug>:d>.*
- Qt5Positioning$<$<CONFIG:Debug>:d>.*
- Qt5PrintSupport$<$<CONFIG:Debug>:d>.*
- Qt5Qml$<$<CONFIG:Debug>:d>.*
- Qt5Quick$<$<CONFIG:Debug>:d>.*
- Qt5QuickWidgets$<$<CONFIG:Debug>:d>.*
- Qt5WebChannel$<$<CONFIG:Debug>:d>.*
- Qt5WebEngine$<$<CONFIG:Debug>:d>.*
- Qt5WebEngineCore$<$<CONFIG:Debug>:d>.*
- Qt5WebEngineWidgets$<$<CONFIG:Debug>:d>.*
- QtWebEngineProcess$<$<CONFIG:Debug>:d>.*
+ if (MSVC)
+ windows_copy_files(${target_dir} ${Qt5_DLL_DIR} ${DLL_DEST}
+ icudt*.dll
+ icuin*.dll
+ icuuc*.dll
+ Qt5Core$<$<CONFIG:Debug>:d>.*
+ Qt5Gui$<$<CONFIG:Debug>:d>.*
+ Qt5Widgets$<$<CONFIG:Debug>:d>.*
)
- windows_copy_files(${target_dir} ${Qt5_RESOURCES_DIR} ${DLL_DEST}
- qtwebengine_resources.pak
- qtwebengine_devtools_resources.pak
- qtwebengine_resources_100p.pak
- qtwebengine_resources_200p.pak
- icudtl.dat
- )
- endif ()
- windows_copy_files(yuzu ${Qt5_PLATFORMS_DIR} ${PLATFORMS} qwindows$<$<CONFIG:Debug>:d>.*)
- windows_copy_files(yuzu ${Qt5_STYLES_DIR} ${STYLES} qwindowsvistastyle$<$<CONFIG:Debug>:d>.*)
- windows_copy_files(yuzu ${Qt5_IMAGEFORMATS_DIR} ${IMAGEFORMATS}
- qjpeg$<$<CONFIG:Debug>:d>.*
- qgif$<$<CONFIG:Debug>:d>.*
- )
+ if (YUZU_USE_QT_WEB_ENGINE)
+ windows_copy_files(${target_dir} ${Qt5_DLL_DIR} ${DLL_DEST}
+ Qt5Network$<$<CONFIG:Debug>:d>.*
+ Qt5Positioning$<$<CONFIG:Debug>:d>.*
+ Qt5PrintSupport$<$<CONFIG:Debug>:d>.*
+ Qt5Qml$<$<CONFIG:Debug>:d>.*
+ Qt5Quick$<$<CONFIG:Debug>:d>.*
+ Qt5QuickWidgets$<$<CONFIG:Debug>:d>.*
+ Qt5WebChannel$<$<CONFIG:Debug>:d>.*
+ Qt5WebEngine$<$<CONFIG:Debug>:d>.*
+ Qt5WebEngineCore$<$<CONFIG:Debug>:d>.*
+ Qt5WebEngineWidgets$<$<CONFIG:Debug>:d>.*
+ QtWebEngineProcess$<$<CONFIG:Debug>:d>.*
+ )
+
+ windows_copy_files(${target_dir} ${Qt5_RESOURCES_DIR} ${DLL_DEST}
+ qtwebengine_resources.pak
+ qtwebengine_devtools_resources.pak
+ qtwebengine_resources_100p.pak
+ qtwebengine_resources_200p.pak
+ icudtl.dat
+ )
+ endif ()
+ windows_copy_files(yuzu ${Qt5_PLATFORMS_DIR} ${PLATFORMS} qwindows$<$<CONFIG:Debug>:d>.*)
+ windows_copy_files(yuzu ${Qt5_STYLES_DIR} ${STYLES} qwindowsvistastyle$<$<CONFIG:Debug>:d>.*)
+ windows_copy_files(yuzu ${Qt5_IMAGEFORMATS_DIR} ${IMAGEFORMATS}
+ qjpeg$<$<CONFIG:Debug>:d>.*
+ qgif$<$<CONFIG:Debug>:d>.*
+ )
+ else()
+ set(Qt5_DLLS
+ "${Qt5_DLL_DIR}libQt5Core.so.5"
+ "${Qt5_DLL_DIR}libQt5DBus.so.5"
+ "${Qt5_DLL_DIR}libQt5Gui.so.5"
+ "${Qt5_DLL_DIR}libQt5Widgets.so.5"
+ "${Qt5_DLL_DIR}libQt5XcbQpa.so.5"
+ "${Qt5_DLL_DIR}libicudata.so.60"
+ "${Qt5_DLL_DIR}libicui18n.so.60"
+ "${Qt5_DLL_DIR}libicuuc.so.60"
+ )
+ set(Qt5_IMAGEFORMAT_DLLS
+ "${Qt5_IMAGEFORMATS_DIR}libqjpeg.so"
+ "${Qt5_IMAGEFORMATS_DIR}libqgif.so"
+ "${Qt5_IMAGEFORMATS_DIR}libqico.so"
+ )
+ set(Qt5_PLATFORMTHEME_DLLS
+ "${Qt5_PLATFORMTHEMES_DIR}libqgtk3.so"
+ "${Qt5_PLATFORMTHEMES_DIR}libqxdgdesktopportal.so"
+ )
+ set(Qt5_PLATFORM_DLLS
+ "${Qt5_PLATFORMS_DIR}libqxcb.so"
+ )
+ set(Qt5_PLATFORMINPUTCONTEXT_DLLS
+ "${Qt5_PLATFORMINPUTCONTEXTS_DIR}libcomposeplatforminputcontextplugin.so"
+ "${Qt5_PLATFORMINPUTCONTEXTS_DIR}libibusplatforminputcontextplugin.so"
+ )
+ set(Qt5_XCBGLINTEGRATION_DLLS
+ "${Qt5_XCBGLINTEGRATIONS_DIR}libqxcb-glx-integration.so"
+ )
+ foreach(LIB ${Qt5_DLLS})
+ file(COPY ${LIB} DESTINATION "${DLL_DEST}/lib" FOLLOW_SYMLINK_CHAIN)
+ endforeach()
+ foreach(LIB ${Qt5_IMAGEFORMAT_DLLS})
+ file(COPY ${LIB} DESTINATION "${DLL_DEST}plugins/imageformats/" FOLLOW_SYMLINK_CHAIN)
+ endforeach()
+ foreach(LIB ${Qt5_PLATFORMTHEME_DLLS})
+ file(COPY ${LIB} DESTINATION "${DLL_DEST}plugins/platformthemes/" FOLLOW_SYMLINK_CHAIN)
+ endforeach()
+ foreach(LIB ${Qt5_PLATFORM_DLLS})
+ file(COPY ${LIB} DESTINATION "${DLL_DEST}plugins/platforms/" FOLLOW_SYMLINK_CHAIN)
+ endforeach()
+ foreach(LIB ${Qt5_PLATFORMINPUTCONTEXT_DLLS})
+ file(COPY ${LIB} DESTINATION "${DLL_DEST}plugins/platforminputcontexts/" FOLLOW_SYMLINK_CHAIN)
+ endforeach()
+ foreach(LIB ${Qt5_XCBGLINTEGRATION_DLLS})
+ file(COPY ${LIB} DESTINATION "${DLL_DEST}plugins/xcbglintegrations/" FOLLOW_SYMLINK_CHAIN)
+ endforeach()
+
+ endif()
# Create an empty qt.conf file. Qt will detect that this file exists, and use the folder that its in as the root folder.
# This way it'll look for plugins in the root/plugins/ folder
add_custom_command(TARGET yuzu POST_BUILD