From f8fb588b36a03ae3bcb98a69e90dd10f3e2a9267 Mon Sep 17 00:00:00 2001 From: Emma Date: Wed, 22 Apr 2026 13:49:41 +0000 Subject: [PATCH] build: macOS CMake fixes (#1883) --- .github/workflows/build.yml | 1 - CMakeLists.txt | 6 +++- src/CMakeLists.txt | 44 +++++++++++++++++++++++++----- src/gui/wxgui/CemuUpdateWindow.cpp | 3 +- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c66eb61b..66329d0a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -282,7 +282,6 @@ jobs: mv bin/Cemu_release.app bin/Cemu_app/Cemu.app mv bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu_release bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu sed -i '' 's/Cemu_release/Cemu/g' bin/Cemu_app/Cemu.app/Contents/Info.plist - chmod a+x bin/Cemu_app/Cemu.app/Contents/MacOS/{Cemu,update.sh} codesign --entitlements ${{github.workspace}}/src/resource/cemu.macos.entitlements --force --deep --preserve-metadata=entitlements,requirements,flags,runtime --sign - --timestamp --options runtime bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu ln -s /Applications bin/Cemu_app/Applications hdiutil create ./bin/tmp.dmg -ov -volname "Cemu" -fs HFS+ -srcfolder "./bin/Cemu_app" diff --git a/CMakeLists.txt b/CMakeLists.txt index a00879fe..7b1e86d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -93,6 +93,10 @@ if (MSVC) add_compile_options($<$:/Ot>) # favor speed endif() +if(CMAKE_GENERATOR STREQUAL "Xcode") + set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY XCODE_STARTUP_PROJECT CemuBin) +endif() + if (APPLE) enable_language(OBJC OBJCXX) set(CMAKE_OSX_DEPLOYMENT_TARGET "13.4") @@ -246,7 +250,7 @@ if(CEMU_ARCHITECTURE MATCHES "(aarch64)|(AARCH64)|(arm64)|(ARM64)") add_subdirectory("dependencies/xbyak_aarch64" EXCLUDE_FROM_ALL) endif() -find_package(ZArchive) +find_package(ZArchive QUIET) if (NOT ZArchive_FOUND) add_subdirectory("dependencies/ZArchive" EXCLUDE_FROM_ALL) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b7fd67fe..291cc612 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -79,6 +79,12 @@ if(WIN32) ) endif() +if(APPLE AND CMAKE_GENERATOR STREQUAL "Xcode") + set_target_properties(CemuBin PROPERTIES + XCODE_ATTRIBUTE_ENABLE_DEBUG_DYLIB[variant=Debug] "YES" + ) +endif() + string(TIMESTAMP CURRENT_YEAR "%Y" UTC) set_property(TARGET CemuBin PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") @@ -110,7 +116,7 @@ if (MACOS_BUNDLE) set(FOLDERS gameProfiles resources) foreach(folder ${FOLDERS}) add_custom_command (TARGET CemuBin POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${CMAKE_SOURCE_DIR}/bin/${folder}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/SharedSupport/${folder}") + COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${CMAKE_SOURCE_DIR}/bin/${folder}" "$/Contents/SharedSupport/${folder}") endforeach(folder) if(CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -126,13 +132,37 @@ if (MACOS_BUNDLE) else() message(FATAL_ERROR "failed to find libMoltenVK.dylib") endif () + set(UPDATE_SH_PATH "${CMAKE_SOURCE_DIR}/src/resource/update.sh") - add_custom_command (TARGET CemuBin POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy "${MOLTENVK_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libMoltenVK.dylib" - COMMAND ${CMAKE_COMMAND} ARGS -E copy "${LIBUSB_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib" - COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_SOURCE_DIR}/src/resource/update.sh" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/update.sh" - COMMAND bash -c "install_name_tool -add_rpath @executable_path/../Frameworks ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}" - COMMAND install_name_tool -change @rpath/libusb-1.0.0.dylib @executable_path/../Frameworks/libusb-1.0.0.dylib ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}) + set(APP_BUNDLE_DIR "$") + set(FRAMEWORKS_DIR "${APP_BUNDLE_DIR}/Contents/Frameworks") + set(RESOURCES_DIR "${APP_BUNDLE_DIR}/Contents/Resources") + + add_custom_command(TARGET CemuBin POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + "${MOLTENVK_PATH}" + "${FRAMEWORKS_DIR}/libMoltenVK.dylib" + COMMAND ${CMAKE_COMMAND} -E copy + "${LIBUSB_PATH}" + "${FRAMEWORKS_DIR}/libusb-1.0.0.dylib" + COMMAND ${CMAKE_COMMAND} -E copy + "${UPDATE_SH_PATH}" + "${RESOURCES_DIR}/update.sh" + COMMAND chmod 755 + "${RESOURCES_DIR}/update.sh" + ) + + set_target_properties(CemuBin PROPERTIES + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH "@executable_path/../Frameworks" + ) + + add_custom_command(TARGET CemuBin POST_BUILD + COMMAND install_name_tool + -change @rpath/libusb-1.0.0.dylib + @executable_path/../Frameworks/libusb-1.0.0.dylib + "$" + ) else() if(APPLE) find_library(MOLTENVK_LIBRARY diff --git a/src/gui/wxgui/CemuUpdateWindow.cpp b/src/gui/wxgui/CemuUpdateWindow.cpp index fd51467d..53674a58 100644 --- a/src/gui/wxgui/CemuUpdateWindow.cpp +++ b/src/gui/wxgui/CemuUpdateWindow.cpp @@ -616,7 +616,8 @@ void CemuUpdateWindow::OnClose(wxCloseEvent& event) { const auto tmppath = fs::temp_directory_path() / L"cemu_update/Cemu.dmg"; fs::path exePath = ActiveSettings::GetExecutablePath().parent_path(); - const auto apppath = exePath / L"update.sh"; + const auto appResources = exePath.parent_path().parent_path() / L"Resources"; + const auto apppath = appResources / L"update.sh"; execlp("sh", "sh", apppath.c_str(), NULL); exit(0);