From b7f517b0c085a36539ca8178302ee343d1f71df6 Mon Sep 17 00:00:00 2001 From: Mustafa Kemal Gilor Date: Fri, 4 Jul 2025 11:22:02 +0300 Subject: [PATCH 1/3] [client/gui] symlink libdart_ffi to bundle/lib post build The GUI binary, multipass.gui's RUNPATH is $ORIGIN/lib, which resolves to `$REPO_ROOT/build/bin/bundle/lib/`, whereas the libdart_ffi.so is in `$REPO_ROOT/build/lib` folder. Hence, the multipass.gui fails to launch on local builds if libdart_ffi.so is not somehow placed to the library search path manually (i.e. by copying, or by LD_LIBRARY_PATH). This patch adds a libdart_ffi.so symlink to the bundle/lib so the GUI can find the dart_ffi library on local build without relying on a manual intervention. Signed-off-by: Mustafa Kemal Gilor --- src/client/gui/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/client/gui/CMakeLists.txt b/src/client/gui/CMakeLists.txt index d32aaecf76..60a5ce8689 100644 --- a/src/client/gui/CMakeLists.txt +++ b/src/client/gui/CMakeLists.txt @@ -42,4 +42,11 @@ if(MULTIPASS_ENABLE_FLUTTER_GUI) else() # Windows include("CMakeLists.txt.windows") endif() + + add_custom_command(TARGET dart_ffi POST_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink + $ + "${CMAKE_BINARY_DIR}/bin/bundle/lib/$" + COMMENT "Creating symlink `$` --> `bundle/lib/$`" + ) endif() From eec305236feee6c74587f746192f517b2e4cd417 Mon Sep 17 00:00:00 2001 From: Mustafa Kemal Gilor Date: Fri, 4 Jul 2025 12:22:04 +0300 Subject: [PATCH 2/3] [client/gui] move libdart_ffi symlink creation to Linux Signed-off-by: Mustafa Kemal Gilor --- src/client/gui/CMakeLists.txt | 7 ------- src/client/gui/CMakeLists.txt.linux | 6 ++++++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/client/gui/CMakeLists.txt b/src/client/gui/CMakeLists.txt index 60a5ce8689..d32aaecf76 100644 --- a/src/client/gui/CMakeLists.txt +++ b/src/client/gui/CMakeLists.txt @@ -42,11 +42,4 @@ if(MULTIPASS_ENABLE_FLUTTER_GUI) else() # Windows include("CMakeLists.txt.windows") endif() - - add_custom_command(TARGET dart_ffi POST_BUILD - COMMAND ${CMAKE_COMMAND} -E create_symlink - $ - "${CMAKE_BINARY_DIR}/bin/bundle/lib/$" - COMMENT "Creating symlink `$` --> `bundle/lib/$`" - ) endif() diff --git a/src/client/gui/CMakeLists.txt.linux b/src/client/gui/CMakeLists.txt.linux index f208b1d406..14e83f1469 100644 --- a/src/client/gui/CMakeLists.txt.linux +++ b/src/client/gui/CMakeLists.txt.linux @@ -56,6 +56,12 @@ add_custom_target(bundle_symlink ALL COMMAND ${CMAKE_COMMAND} -E create_symlink ${MULTIPASS_GUI_PREFIX}/${MULTIPASS_GUI_BUNDLE_RELATIVE} ${MULTIPASS_GUI_BUNDLE_RELATIVE} ) +add_custom_target(libffi_symlink ALL + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + COMMAND ${CMAKE_COMMAND} -E create_symlink $ ${MULTIPASS_GUI_BUNDLE_RELATIVE}/lib/$ + DEPENDS ${MULTIPASS_GUI_EXECUTABLE_FULL_PATH} +) + # Install the symlink. install(FILES ${MULTIPASS_GUI_BUILD_DIR}/${MULTIPASS_GUI_LINK_NAME} DESTINATION bin From 0cc0d8539e591306ae849c1249fab568be04159b Mon Sep 17 00:00:00 2001 From: Mustafa Kemal Gilor Date: Fri, 4 Jul 2025 17:46:35 +0300 Subject: [PATCH 3/3] [client/gui] copy the file instead of creating a symlink symlinking gets complicated pretty fast when the folder structure changes. Signed-off-by: Mustafa Kemal Gilor --- src/client/gui/CMakeLists.txt.linux | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/gui/CMakeLists.txt.linux b/src/client/gui/CMakeLists.txt.linux index 14e83f1469..e028d17664 100644 --- a/src/client/gui/CMakeLists.txt.linux +++ b/src/client/gui/CMakeLists.txt.linux @@ -56,9 +56,9 @@ add_custom_target(bundle_symlink ALL COMMAND ${CMAKE_COMMAND} -E create_symlink ${MULTIPASS_GUI_PREFIX}/${MULTIPASS_GUI_BUNDLE_RELATIVE} ${MULTIPASS_GUI_BUNDLE_RELATIVE} ) -add_custom_target(libffi_symlink ALL +add_custom_target(libffi_copy ALL WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMAND ${CMAKE_COMMAND} -E create_symlink $ ${MULTIPASS_GUI_BUNDLE_RELATIVE}/lib/$ + COMMAND ${CMAKE_COMMAND} -E copy $ ${MULTIPASS_GUI_BUNDLE_RELATIVE}/lib/$ DEPENDS ${MULTIPASS_GUI_EXECUTABLE_FULL_PATH} )