Skip to content

Commit 5000c85

Browse files
committed
better moltenvk bundle crap
1 parent 79c71f5 commit 5000c85

5 files changed

Lines changed: 42 additions & 20 deletions

File tree

Makefile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,11 @@ BUNDLE_BUILD ?= 44
404404
# If nothing matches (e.g. building with a custom toolchain), fall back to 10.13.
405405
BUNDLE_MIN_OS ?= $(or $(patsubst -mmacosx-version-min=%,%,$(filter -mmacosx-version-min=%,$(MINVERFLAGS))),10.13)
406406
INFO_PLIST_SRC := pkg/apple/OSX/Info_Metal.plist
407+
# Universal (arm64 + x86_64) MoltenVK.framework shipped in the repo.
408+
# Only copied when HAVE_VULKAN=1; on pre-Metal / non-Vulkan builds
409+
# (e.g. ppc 10.5, i386 10.6) the Vulkan code path isn't compiled in
410+
# and shipping MoltenVK would be dead weight that can't even load.
411+
MOLTENVK_FRAMEWORK := pkg/apple/Frameworks/MoltenVK.xcframework/macos-arm64_x86_64/MoltenVK.framework
407412

408413
bundle: $(TARGET) $(METALLIB)
409414
@echo "Assembling $(BUNDLE) (min macOS $(BUNDLE_MIN_OS))"
@@ -422,6 +427,10 @@ bundle: $(TARGET) $(METALLIB)
422427
$(BUNDLE)/Contents/Resources/filters/audio/ 2>/dev/null || true
423428
$(Q)cp gfx/video_filters/*.filt \
424429
$(BUNDLE)/Contents/Resources/filters/video/ 2>/dev/null || true
430+
$(Q)if [ "$(HAVE_VULKAN)" = "1" ] && [ -d $(MOLTENVK_FRAMEWORK) ]; then \
431+
mkdir -p $(BUNDLE)/Contents/Frameworks; \
432+
cp -R $(MOLTENVK_FRAMEWORK) $(BUNDLE)/Contents/Frameworks/; \
433+
fi
425434
$(Q)printf 'APPL????' > $(BUNDLE)/Contents/PkgInfo
426435
$(Q)sed \
427436
-e 's|$$(EXECUTABLE_NAME)|$(BUNDLE_EXECUTABLE)|g' \
@@ -431,6 +440,19 @@ bundle: $(TARGET) $(METALLIB)
431440
-e 's|$$(CURRENT_PROJECT_VERSION)|$(BUNDLE_BUILD)|g' \
432441
-e 's|$$(MACOSX_DEPLOYMENT_TARGET)|$(BUNDLE_MIN_OS)|g' \
433442
$(INFO_PLIST_SRC) > $(BUNDLE)/Contents/Info.plist
443+
@# Ad-hoc code signing. On Apple Silicon (and increasingly on Intel with
444+
@# hardened runtime enforcement), dyld refuses to load unsigned dylibs
445+
@# even for ad-hoc app-internal use — including the MoltenVK framework
446+
@# copied in above. `codesign --sign -` produces an ad-hoc signature
447+
@# that satisfies the loader without requiring a developer identity.
448+
@# Sign nested content first (frameworks), then the outer .app wrapper,
449+
@# so the app's seal covers all contents.
450+
$(Q)if [ -d $(BUNDLE)/Contents/Frameworks ]; then \
451+
for fw in $(BUNDLE)/Contents/Frameworks/*.framework; do \
452+
[ -d "$$fw" ] && codesign --force --sign - --timestamp=none "$$fw"; \
453+
done; \
454+
fi
455+
$(Q)codesign --force --sign - --timestamp=none $(BUNDLE)
434456
@echo "Done. Run with: open $(BUNDLE)"
435457

436458
.PHONY: bundle

Makefile.common

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,26 +133,26 @@ ifneq ($(findstring Darwin,$(OS)),)
133133
ARCHFLAGS=
134134
MINVERFLAGS=
135135
ifeq ($(shell uname -p),arm)
136-
MINVERFLAGS = -mmacosx-version-min=10.15 -stdlib=libc++ # macOS (Metal, ARM 64bit)
136+
MINVERFLAGS = -mmacosx-version-min=10.15 # macOS (Metal, ARM 64bit)
137137
else ifeq ($(HAVE_METAL),1)
138-
MINVERFLAGS = -mmacosx-version-min=10.13 -stdlib=libc++ # macOS (Metal, x86 64bit)
138+
MINVERFLAGS = -mmacosx-version-min=10.13 # macOS (Metal, x86 64bit)
139139
else ifeq ($(shell uname -p),powerpc)
140140
MINVERFLAGS = -mmacosx-version-min=10.5 # macOSX (PowerPC 32-bit)
141141
else ifeq ($(shell uname -m),i386)
142142
MINVERFLAGS = -mmacosx-version-min=10.6 # macOSX (OpenGL, x86 32bit)
143143
else
144-
MINVERFLAGS = -mmacosx-version-min=10.7 -stdlib=libc++ # macOSX (OpenGL, x86 64bit)
144+
MINVERFLAGS = -mmacosx-version-min=10.7 # macOSX (OpenGL, x86 64bit)
145145
endif
146146

147147
# Build for a specific architecture when ARCH is defined as a switch
148148
ifeq ($(ARCH),arm64)
149-
MINVERFLAGS = -mmacosx-version-min=10.15 -stdlib=libc++ # macOS (Metal, ARM 64bit)
149+
MINVERFLAGS = -mmacosx-version-min=10.15 # macOS (Metal, ARM 64bit)
150150
ARCHFLAGS = -arch arm64
151151
else ifeq ($(ARCH),x86_64)
152152
ifeq ($(HAVE_METAL),1)
153-
MINVERFLAGS = -mmacosx-version-min=10.13 -stdlib=libc++
153+
MINVERFLAGS = -mmacosx-version-min=10.13
154154
else
155-
MINVERFLAGS = -mmacosx-version-min=10.7 -stdlib=libc++
155+
MINVERFLAGS = -mmacosx-version-min=10.7
156156
endif
157157
ARCHFLAGS = -arch x86_64
158158
else ifeq ($(ARCH),x86)
@@ -1741,6 +1741,18 @@ ifeq ($(HAVE_VULKAN), 1)
17411741
NEED_CXX_LINKER = 1
17421742
DEFINES += -DHAVE_VULKAN
17431743
INCLUDE_DIRS += -Igfx/include
1744+
1745+
# On macOS, the Vulkan loader at gfx/common/vulkan_common.c dlopens
1746+
# "MoltenVK" by bare name. Embed rpath entries pointing at the Frameworks
1747+
# dir inside an .app bundle, so that `make bundle` (which copies
1748+
# pkg/apple/Frameworks/MoltenVK.xcframework/macos-arm64_x86_64/MoltenVK.framework
1749+
# into Contents/Frameworks) produces a self-contained bundle with no
1750+
# external MoltenVK dependency. Matches what Xcode's
1751+
# LD_RUNPATH_SEARCH_PATHS does for the .xcodeproj build.
1752+
ifneq ($(findstring Darwin,$(OS)),)
1753+
LDFLAGS += -Xlinker -rpath -Xlinker @executable_path/../Frameworks \
1754+
-Xlinker -rpath -Xlinker @executable_path/../Frameworks/MoltenVK.framework
1755+
endif
17441756
endif
17451757

17461758
ifeq ($(HAVE_OPENGL_CORE), 1)

pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1951,7 +1951,6 @@
19511951
LD_RUNPATH_SEARCH_PATHS = (
19521952
"$(inherited)",
19531953
"@executable_path/../Frameworks",
1954-
"@executable_path/../Frameworks/MoltenVK.framework",
19551954
);
19561955
LLVM_LTO = YES_THIN;
19571956
MACOSX_DEPLOYMENT_TARGET = 10.13;
@@ -2035,7 +2034,6 @@
20352034
LD_RUNPATH_SEARCH_PATHS = (
20362035
"$(inherited)",
20372036
"@executable_path/../Frameworks",
2038-
"@executable_path/../Frameworks/MoltenVK.framework",
20392037
);
20402038
LLVM_LTO = YES_THIN;
20412039
MACOSX_DEPLOYMENT_TARGET = 10.13;

pkg/apple/RetroArch_iOS13.xcodeproj/project.pbxproj

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,7 +1719,6 @@
17191719
LD_RUNPATH_SEARCH_PATHS = (
17201720
"$(inherited)",
17211721
"@executable_path/Frameworks",
1722-
"@executable_path/Frameworks/MoltenVK.framework",
17231722
);
17241723
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/iOS/modules";
17251724
PRODUCT_BUNDLE_IDENTIFIER = "$(IOS_BUNDLE_IDENTIFIER)";
@@ -1739,7 +1738,6 @@
17391738
LD_RUNPATH_SEARCH_PATHS = (
17401739
"$(inherited)",
17411740
"@executable_path/Frameworks",
1742-
"@executable_path/Frameworks/MoltenVK.framework",
17431741
);
17441742
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/iOS/modules";
17451743
PRODUCT_BUNDLE_IDENTIFIER = "$(IOS_BUNDLE_IDENTIFIER)";
@@ -1758,7 +1756,6 @@
17581756
LD_RUNPATH_SEARCH_PATHS = (
17591757
"$(inherited)",
17601758
"@executable_path/Frameworks",
1761-
"@executable_path/Frameworks/MoltenVK.framework",
17621759
);
17631760
PRODUCT_BUNDLE_IDENTIFIER = "$(TVOS_BUNDLE_IDENTIFIER)";
17641761
PRODUCT_NAME = RetroArchTV;
@@ -1778,7 +1775,6 @@
17781775
LD_RUNPATH_SEARCH_PATHS = (
17791776
"$(inherited)",
17801777
"@executable_path/Frameworks",
1781-
"@executable_path/Frameworks/MoltenVK.framework",
17821778
);
17831779
PRODUCT_BUNDLE_IDENTIFIER = "$(TVOS_BUNDLE_IDENTIFIER)";
17841780
PRODUCT_NAME = RetroArchTV;
@@ -1877,17 +1873,14 @@
18771873
GCC_WARN_UNINITIALIZED_AUTOS = YES;
18781874
GCC_WARN_UNUSED_FUNCTION = YES;
18791875
GCC_WARN_UNUSED_VARIABLE = YES;
1880-
HEADER_SEARCH_PATHS = "$(inherited)";
18811876
INFOPLIST_KEY_CFBundleDisplayName = RetroArch;
18821877
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
18831878
IOS_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11;
18841879
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
1885-
LIBRARY_SEARCH_PATHS = "";
18861880
LLVM_LTO = YES_THIN;
18871881
MARKETING_VERSION = 1.22.2;
18881882
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
18891883
MTL_FAST_MATH = YES;
1890-
OTHER_CFLAGS = "$(inherited)";
18911884
SDKROOT = iphoneos;
18921885
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
18931886
SWIFT_VERSION = 5.0;
@@ -1936,18 +1929,15 @@
19361929
GCC_WARN_UNINITIALIZED_AUTOS = YES;
19371930
GCC_WARN_UNUSED_FUNCTION = YES;
19381931
GCC_WARN_UNUSED_VARIABLE = YES;
1939-
HEADER_SEARCH_PATHS = "$(inherited)";
19401932
INFOPLIST_KEY_CFBundleDisplayName = RetroArch;
19411933
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
19421934
IOS_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11;
19431935
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
1944-
LIBRARY_SEARCH_PATHS = "";
19451936
LLVM_LTO = YES_THIN;
19461937
MARKETING_VERSION = 1.22.2;
19471938
MTL_ENABLE_DEBUG_INFO = NO;
19481939
MTL_FAST_MATH = YES;
19491940
MTL_IGNORE_WARNINGS = YES;
1950-
OTHER_CFLAGS = "$(inherited)";
19511941
SDKROOT = iphoneos;
19521942
SWIFT_VERSION = 5.0;
19531943
TARGETED_DEVICE_FAMILY = "1,2";

qb/config.params.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ HAVE_EGL=auto # EGL context support
111111
HAVE_VG=auto # OpenVG support
112112
HAVE_CG=auto # Cg shader support
113113
HAVE_HLSL=no # HLSL9 shader support (for Direct3D9)
114-
HAVE_BUILTINZLIB=auto # Bake in zlib
114+
HAVE_BUILTINZLIB=no # Bake in zlib
115115
HAVE_ZLIB=auto # zlib support (ZIP extract, PNG decoding/encoding)
116116
HAVE_ALSA=auto # ALSA support
117117
C89_ALSA=no
@@ -215,4 +215,4 @@ HAVE_GAME_AI=no
215215
HAVE_SMBCLIENT=auto # SMB client support
216216
HAVE_BUILTINSMBCLIENT=no # Use builtin libsmb2
217217
HAVE_COCOA=auto # Cocoa support (Darwin/Apple)
218-
HAVE_MFI=auto # GameController.framework joypad support (Apple)
218+
HAVE_MFI=auto # GameController.framework joypad support (Apple)

0 commit comments

Comments
 (0)