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/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 fc589f5f1..baffd0639 100644 --- a/src/citra_meta/CMakeLists.txt +++ b/src/citra_meta/CMakeLists.txt @@ -49,19 +49,23 @@ if (APPLE) endif() if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND WIN32 AND MINGW) - # TODO: This is placeholder bullshit, we need to find out a way to do actual dependency resolution. - # Can we use Wine maybe? -OS - set(EXTRA_LIBS /mxe/usr/x86_64-w64-mingw32.shared/bin/*.dll ) + # 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 ${CMAKE_COMMAND} -E copy $ ${EXTRA_LIBS} $ + 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} ) - add_custom_command(TARGET citra_meta POST_BUILD - COMMAND_EXPAND_LISTS - ) - unset(EXTRA_LIBS) endif() target_link_libraries(citra_meta PRIVATE citra_common fmt)