Merge pull request #1478 from billhollings/strip-static-vulkan-symbols
Support building MoltenVK with static Vulkan linkage symbols hidden.
This commit is contained in:
commit
80256771f7
@ -98,7 +98,20 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/** Directive to identify public symbols. */
|
||||
#define MVK_PUBLIC_SYMBOL __attribute__((visibility("default")))
|
||||
#define MVK_PUBLIC_SYMBOL __attribute__((visibility("default")))
|
||||
|
||||
/**
|
||||
* Directives to hide public symbols from the Vulkan API, to avoid library linking
|
||||
* conflicts when bound to a Vulkan Loader that also exports identical symbols.
|
||||
*/
|
||||
#ifndef MVK_HIDE_VULKAN_SYMBOLS
|
||||
# define MVK_HIDE_VULKAN_SYMBOLS 0
|
||||
#endif
|
||||
#if MVK_HIDE_VULKAN_SYMBOLS
|
||||
# define MVK_PUBLIC_VULKAN_SYMBOL
|
||||
#else
|
||||
# define MVK_PUBLIC_VULKAN_SYMBOL MVK_PUBLIC_SYMBOL
|
||||
#endif
|
||||
|
||||
/** Directive to make a public alias of another symbol. */
|
||||
#define MVK_PUBLIC_ALIAS(ALIAS, TARGET) asm(".globl _" #ALIAS "\n\t_" #ALIAS " = _" #TARGET)
|
||||
|
@ -13,6 +13,15 @@ Copyright (c) 2015-2021 [The Brenwill Workshop Ltd.](http://www.brenwill.com)
|
||||
|
||||
|
||||
|
||||
MoltenVK 1.1.7
|
||||
--------------
|
||||
|
||||
Released TBD
|
||||
|
||||
- Support building MoltenVK with static Vulkan linkage symbols hidden.
|
||||
|
||||
|
||||
|
||||
MoltenVK 1.1.6
|
||||
--------------
|
||||
|
||||
|
31
Makefile
31
Makefile
@ -14,6 +14,13 @@ else
|
||||
OUTPUT_FMT_CMD = -quiet
|
||||
endif
|
||||
|
||||
# Use 'make MVK_HIDE_VULKAN_SYMBOLS=1' (or set it as env var) to hide Vulkan API symbols
|
||||
# in the resulting MoltenVK library, to avoid library linking conflicts when bound to a
|
||||
# Vulkan Loader that also exports identical symbols.
|
||||
ifndef MVK_HIDE_VULKAN_SYMBOLS
|
||||
MVK_HIDE_VULKAN_SYMBOLS=0
|
||||
endif
|
||||
|
||||
# Specify individually (not as dependencies) so the sub-targets don't run in parallel
|
||||
.PHONY: all
|
||||
all:
|
||||
@ -35,51 +42,51 @@ all-debug:
|
||||
|
||||
.PHONY: macos
|
||||
macos:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (macOS only)" -destination "generic/platform=macOS" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (macOS only)" -destination "generic/platform=macOS" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: macos-debug
|
||||
macos-debug:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (macOS only)" -destination "generic/platform=macOS" -configuration "Debug" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (macOS only)" -destination "generic/platform=macOS" -configuration "Debug" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: ios
|
||||
ios:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: ios-debug
|
||||
ios-debug:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS" -configuration "Debug" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS" -configuration "Debug" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: iossim
|
||||
iossim:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS Simulator" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS Simulator" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: iossim-debug
|
||||
iossim-debug:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS Simulator" -configuration "Debug" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=iOS Simulator" -configuration "Debug" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: maccat
|
||||
maccat:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=macOS,variant=Mac Catalyst" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=macOS,variant=Mac Catalyst" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: maccat-debug
|
||||
maccat-debug:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=macOS,variant=Mac Catalyst" -configuration "Debug" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (iOS only)" -destination "generic/platform=macOS,variant=Mac Catalyst" -configuration "Debug" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: tvos
|
||||
tvos:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: tvos-debug
|
||||
tvos-debug:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS" -configuration "Debug" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS" -configuration "Debug" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: tvossim
|
||||
tvossim:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS Simulator" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS Simulator" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: tvossim-debug
|
||||
tvossim-debug:
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS Simulator" -configuration "Debug" $(OUTPUT_FMT_CMD)
|
||||
$(XCODEBUILD) build -project "$(XC_PROJ)" -scheme "$(XC_SCHEME) (tvOS only)" -destination "generic/platform=tvOS Simulator" -configuration "Debug" MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS) $(OUTPUT_FMT_CMD)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
|
@ -1564,13 +1564,13 @@
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross",
|
||||
"MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
@ -1596,6 +1596,7 @@
|
||||
MACH_O_TYPE = staticlib;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
MVK_HIDE_VULKAN_SYMBOLS = 0;
|
||||
MVK_SKIP_DYLIB = "";
|
||||
"MVK_SKIP_DYLIB[sdk=appletvsimulator*]" = YES;
|
||||
"MVK_SKIP_DYLIB[sdk=iphonesimulator*]" = YES;
|
||||
@ -1641,6 +1642,7 @@
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"NDEBUG=1",
|
||||
"SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross",
|
||||
"MVK_HIDE_VULKAN_SYMBOLS=$(MVK_HIDE_VULKAN_SYMBOLS)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
@ -1666,6 +1668,7 @@
|
||||
MACH_O_TYPE = staticlib;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MVK_HIDE_VULKAN_SYMBOLS = 0;
|
||||
MVK_SKIP_DYLIB = "";
|
||||
"MVK_SKIP_DYLIB[sdk=appletvsimulator*]" = YES;
|
||||
"MVK_SKIP_DYLIB[sdk=iphonesimulator*]" = YES;
|
||||
|
@ -50,7 +50,7 @@ typedef unsigned long MTLLanguageVersion;
|
||||
*/
|
||||
#define MVK_VERSION_MAJOR 1
|
||||
#define MVK_VERSION_MINOR 1
|
||||
#define MVK_VERSION_PATCH 6
|
||||
#define MVK_VERSION_PATCH 7
|
||||
|
||||
#define MVK_MAKE_VERSION(major, minor, patch) (((major) * 10000) + ((minor) * 100) + (patch))
|
||||
#define MVK_VERSION MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
|
||||
|
File diff suppressed because it is too large
Load Diff
14
README.md
14
README.md
@ -241,6 +241,20 @@ Building from the command line creates the same `Package` folder structure descr
|
||||
building from within *Xcode*.
|
||||
|
||||
|
||||
### Hiding Vulkan API Symbols
|
||||
|
||||
You can optionally build MoltenVK with the Vulkan API static call symbols (`vk*`) hidden,
|
||||
to avoid library linking conflicts when bound to a Vulkan Loader that also exports identical symbols.
|
||||
|
||||
To do so, when building MoltenVK, set the build setting or environment varible `MVK_HIDE_VULKAN_SYMBOLS=1`.
|
||||
This build setting can be changed in the `MoltenVK.xcodeproj` *Xcode* project, or it can be included in
|
||||
any of the `make` build commands. For example:
|
||||
|
||||
make MVK_HIDE_VULKAN_SYMBOLS=1
|
||||
...
|
||||
make macos-debug MVK_HIDE_VULKAN_SYMBOLS=1
|
||||
...etc.
|
||||
|
||||
|
||||
<a name="demos"></a>
|
||||
Running **MoltenVK** Demo Applications
|
||||
|
Loading…
x
Reference in New Issue
Block a user