From 4d7fe0e96cf7ae86e30961503ff4babf6e2d1019 Mon Sep 17 00:00:00 2001 From: Stuart Carnie Date: Fri, 7 Sep 2018 17:38:46 -0700 Subject: [PATCH] feat(macOS): Embed Qt frameworks and frameworks to @executable_path * note that install_name_tool is used to update the frameworks via a post-build script --- pkg/apple/QTConfig.xcconfig | 3 +- pkg/apple/RetroArch copy-Info.plist | 49 ------------ .../RetroArch_Metal.xcodeproj/project.pbxproj | 79 +++++++++++++++++-- 3 files changed, 72 insertions(+), 59 deletions(-) delete mode 100644 pkg/apple/RetroArch copy-Info.plist diff --git a/pkg/apple/QTConfig.xcconfig b/pkg/apple/QTConfig.xcconfig index 01ef9d0d01..9351c4511d 100644 --- a/pkg/apple/QTConfig.xcconfig +++ b/pkg/apple/QTConfig.xcconfig @@ -8,6 +8,7 @@ QT_INSTALL = /usr/local/opt/qt QT_FRAMEWORK_PATH = $(QT_INSTALL)/lib QT_FRAMEWORKS = -framework QtWidgets -framework QtGui -framework QtConcurrent -framework QtNetwork -framework QtCore +QT_VERSION = 5 QT_HEADERS = $(QT_INSTALL)/include QT_HEADER_SEARCH_PATHS = $(QT_HEADERS) $(QT_HEADERS)/QtWidgets $(QT_HEADERS)/QtGui $(QT_HEADERS)/QtConcurrent $(QT_HEADERS)/QtNetwork $(QT_HEADERS)/QtCore @@ -16,8 +17,6 @@ QT_CFLAGS = -DHAVE_QT -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CONCURRENT // general FRAMEWORK_SEARCH_PATHS[sdk=macosx*] = $(inherited) $(QT_FRAMEWORK_PATH) -OTHER_LDFLAGS = $(inherited) $(QT_FRAMEWORKS) - OTHER_CFLAGS = $(inherited) $(QT_CFLAGS) HEADER_SEARCH_PATHS = $(inherited) $(QT_HEADER_SEARCH_PATHS) diff --git a/pkg/apple/RetroArch copy-Info.plist b/pkg/apple/RetroArch copy-Info.plist deleted file mode 100644 index a28050a571..0000000000 --- a/pkg/apple/RetroArch copy-Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - * - - CFBundleTypeName - All Files - CFBundleTypeRole - Viewer - - - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - retroarch - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.7.4 - CFBundleSignature - ???? - CFBundleVersion - 1.7.4 - LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} - NSHighResolutionCapable - - NSHumanReadableCopyright - Copyright © 2018 RetroArch. All rights reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - RApplication - - diff --git a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj index ff6a1ed853..449099d9e3 100644 --- a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj @@ -8,6 +8,16 @@ /* Begin PBXBuildFile section */ 05269A6220ABF20500C29F1E /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05269A6120ABF20500C29F1E /* MetalKit.framework */; }; + 053FC25E21433F2200D98D46 /* QtConcurrent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25521433F1700D98D46 /* QtConcurrent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 053FC26021433F2200D98D46 /* QtCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25421433F1700D98D46 /* QtCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 053FC26221433F2200D98D46 /* QtGui.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25321433F1700D98D46 /* QtGui.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 053FC26421433F2200D98D46 /* QtNetwork.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25621433F1800D98D46 /* QtNetwork.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 053FC26521433F2200D98D46 /* QtWidgets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25721433F1800D98D46 /* QtWidgets.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 053FC26621433F2200D98D46 /* QtWidgets.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25721433F1800D98D46 /* QtWidgets.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 053FC270214340F500D98D46 /* QtGui.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25321433F1700D98D46 /* QtGui.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 053FC271214340F500D98D46 /* QtNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25621433F1800D98D46 /* QtNetwork.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 053FC272214341E000D98D46 /* QtConcurrent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25521433F1700D98D46 /* QtConcurrent.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 053FC275214341F000D98D46 /* QtCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053FC25421433F1700D98D46 /* QtCore.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 05422E3E2140C8DB00F09961 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 05422E3F2140C8DB00F09961 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 05422E402140C8DB00F09961 /* retroarch.icns in Resources */ = {isa = PBXBuildFile; fileRef = 84DD5EB71A89F1C7007336C1 /* retroarch.icns */; }; @@ -60,6 +70,21 @@ name = "Embed Libraries"; runOnlyForDeploymentPostprocessing = 0; }; + 053FC26721433F2200D98D46 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 053FC26021433F2200D98D46 /* QtCore.framework in Embed Frameworks */, + 053FC25E21433F2200D98D46 /* QtConcurrent.framework in Embed Frameworks */, + 053FC26621433F2200D98D46 /* QtWidgets.framework in Embed Frameworks */, + 053FC26421433F2200D98D46 /* QtNetwork.framework in Embed Frameworks */, + 053FC26221433F2200D98D46 /* QtGui.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; 05422E552140C8DB00F09961 /* Embed Libraries */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -112,8 +137,12 @@ 0538875720DE11D300769232 /* retro_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = ""; }; 0538875820DE11D300769232 /* retro_endianness.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_endianness.h; sourceTree = ""; }; 0538875920DE11D300769232 /* libretro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = ""; }; + 053FC25321433F1700D98D46 /* QtGui.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtGui.framework; path = /usr/local/opt/qt/lib/QtGui.framework; sourceTree = ""; }; + 053FC25421433F1700D98D46 /* QtCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtCore.framework; path = /usr/local/opt/qt/lib/QtCore.framework; sourceTree = ""; }; + 053FC25521433F1700D98D46 /* QtConcurrent.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtConcurrent.framework; path = /usr/local/opt/qt/lib/QtConcurrent.framework; sourceTree = ""; }; + 053FC25621433F1800D98D46 /* QtNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtNetwork.framework; path = /usr/local/opt/qt/lib/QtNetwork.framework; sourceTree = ""; }; + 053FC25721433F1800D98D46 /* QtWidgets.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtWidgets.framework; path = /usr/local/opt/qt/lib/QtWidgets.framework; sourceTree = ""; }; 05422E592140C8DB00F09961 /* RetroArchQT.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RetroArchQT.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 05422E5A2140C8DC00F09961 /* RetroArch copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "RetroArch copy-Info.plist"; path = "/Volumes/Data/projects/libretro/retroarch/pkg/apple/RetroArch copy-Info.plist"; sourceTree = ""; }; 05422E5B2140CE3500F09961 /* VulkanConfig.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = VulkanConfig.xcconfig; sourceTree = ""; }; 05422E5C2140CFC500F09961 /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; 0548E2B220F976E10094A083 /* driver.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = driver.c; path = ../../driver.c; sourceTree = ""; }; @@ -516,7 +545,6 @@ 05F2873F20F2BEEA00632D47 /* task_content.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_content.c; sourceTree = ""; }; 05F2874020F2BEEA00632D47 /* task_http.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_http.c; sourceTree = ""; }; 05F2874120F2BEEA00632D47 /* task_patch.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_patch.c; sourceTree = ""; }; - 05FA11A120CC6684008C5D0A /* MetalRenderer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MetalRenderer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = OSX/en.lproj/InfoPlist.strings; sourceTree = ""; }; 1DDD58150DA1D0A300B32029 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MainMenu.xib; path = OSX/en.lproj/MainMenu.xib; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; @@ -543,6 +571,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 053FC272214341E000D98D46 /* QtConcurrent.framework in Frameworks */, + 053FC275214341F000D98D46 /* QtCore.framework in Frameworks */, + 053FC270214340F500D98D46 /* QtGui.framework in Frameworks */, + 053FC271214340F500D98D46 /* QtNetwork.framework in Frameworks */, + 053FC26521433F2200D98D46 /* QtWidgets.framework in Frameworks */, 05422E4A2140C8DB00F09961 /* QuartzCore.framework in Frameworks */, 05422E4B2140C8DB00F09961 /* IOSurface.framework in Frameworks */, 05422E4C2140C8DB00F09961 /* Metal.framework in Frameworks */, @@ -1415,7 +1448,6 @@ 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, - 05422E5A2140C8DC00F09961 /* RetroArch copy-Info.plist */, ); indentWidth = 3; name = RetroArch; @@ -1437,7 +1469,11 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( - 05FA11A120CC6684008C5D0A /* MetalRenderer.framework */, + 053FC25521433F1700D98D46 /* QtConcurrent.framework */, + 053FC25421433F1700D98D46 /* QtCore.framework */, + 053FC25321433F1700D98D46 /* QtGui.framework */, + 053FC25621433F1800D98D46 /* QtNetwork.framework */, + 053FC25721433F1800D98D46 /* QtWidgets.framework */, 05269A6120ABF20500C29F1E /* MetalKit.framework */, 05A8E23B20A63CF50084ABDA /* QuartzCore.framework */, 05A8E23920A63CED0084ABDA /* IOSurface.framework */, @@ -1478,6 +1514,8 @@ 05422E422140C8DB00F09961 /* Sources */, 05422E492140C8DB00F09961 /* Frameworks */, 05422E552140C8DB00F09961 /* Embed Libraries */, + 053FC26721433F2200D98D46 /* Embed Frameworks */, + 053FC27621434B7700D98D46 /* ShellScript */, ); buildRules = ( ); @@ -1556,6 +1594,23 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 053FC27621434B7700D98D46 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/zsh; + shellScript = "BINARY=${TARGET_BUILD_DIR}/${EXECUTABLE_PATH}\nVER=Versions/${QT_VERSION}\nfor name in {QtConcurrent,QtCore,QtWidgets,QtNetwork,QtGui}; do\n echo updating install path for ${name}.framework\n install_name_tool -change ${QT_FRAMEWORK_PATH}/${name}.framework/${VER}/${name} @executable_path/../Frameworks/${name}.framework/${VER}/${name} ${BINARY}\ndone"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 05422E422140C8DB00F09961 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -1616,8 +1671,12 @@ GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = "RetroArch copy-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; + INFOPLIST_FILE = "$(SRCROOT)/OSX/Info.plist"; + INSTALL_PATH = "@rpath"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; PRODUCT_BUNDLE_IDENTIFIER = libretro.RetroArch; @@ -1634,8 +1693,12 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; - INFOPLIST_FILE = "RetroArch copy-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; + INFOPLIST_FILE = "$(SRCROOT)/OSX/Info.plist"; + INSTALL_PATH = "@rpath"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; PRODUCT_BUNDLE_IDENTIFIER = libretro.RetroArch; PRODUCT_NAME = "$(TARGET_NAME)";