diff --git a/.gitmodules b/.gitmodules index e2460ab15..d09df6f0d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -106,3 +106,6 @@ [submodule "externals/libretro-common"] path = externals/libretro-common/libretro-common url = https://github.com/libretro/libretro-common.git +[submodule "dllwalker"] + path = externals/dllwalker + url = https://github.com/azahar-emu/dllwalker diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d58cc70d..3f54584bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,9 @@ cmake_policy(SET CMP0063 NEW) cmake_policy(SET CMP0127 NEW) set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) +# Prefer building bundled dependencies as static instead of shared +set(BUILD_SHARED_LIBS OFF) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules") include(DownloadExternals) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index a0e75c2ac..046e484fe 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -327,12 +327,8 @@ endif() # OpenSSL if (USE_SYSTEM_OPENSSL) find_package(OpenSSL 1.1) - if (OPENSSL_FOUND) - set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) - endif() -endif() - -if (NOT OPENSSL_FOUND) + set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) +else() # LibreSSL set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") set(OPENSSLDIR "/etc/ssl/") diff --git a/externals/dllwalker b/externals/dllwalker new file mode 160000 index 000000000..0c35d5de5 --- /dev/null +++ b/externals/dllwalker @@ -0,0 +1 @@ +Subproject commit 0c35d5de533eb82480dce2a211112517f69010d4 diff --git a/src/citra_meta/CMakeLists.txt b/src/citra_meta/CMakeLists.txt index b19238a9c..baffd0639 100644 --- a/src/citra_meta/CMakeLists.txt +++ b/src/citra_meta/CMakeLists.txt @@ -48,6 +48,26 @@ if (APPLE) endif() endif() +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND WIN32 AND MINGW) + # TODO: Do this for all executables, not just citra_meta + # TODO: Don't hardcode MXE directory to root? + set(dllwalker_command "${CMAKE_SOURCE_DIR}/externals/dllwalker/dllwalker.rb" + $ + /mxe/usr/x86_64-w64-mingw32.shared/bin/ + /mxe/usr/x86_64-w64-mingw32.shared/qt6/bin/) + set(dll_list_filename "${CMAKE_CURRENT_BINARY_DIR}/required_dlls_list.txt") + add_custom_command(TARGET citra_meta POST_BUILD + COMMAND ${dllwalker_command} > ${dll_list_filename} + ) + add_custom_command(TARGET citra_meta POST_BUILD + COMMAND cat ${dll_list_filename} | xargs -I {} ${CMAKE_COMMAND} -E copy {} $ + COMMAND ${CMAKE_COMMAND} -E make_directory "$/plugins/" + COMMAND ${CMAKE_COMMAND} -E copy_directory /mxe/usr/x86_64-w64-mingw32.shared/qt6/plugins/ "$/plugins/" + COMMAND_EXPAND_LISTS + DEPENDS ${dll_list_filename} + ) +endif() + target_link_libraries(citra_meta PRIVATE citra_common fmt) if (ENABLE_QT) diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 027609c26..cf99e004d 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -36,7 +36,7 @@ if (ENABLE_LIBRETRO) endif() add_test(NAME tests COMMAND tests) -if(NOT ANDROID) +if(NOT ANDROID AND (CMAKE_SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME)) catch_discover_tests(tests) endif()