Apple's iOS App Store does not permit an app to link to naked dylibs. Instead, these must be placed in frameworks, which are embedded in a dynamic version of MoltenVK.xcframework. - Use Xcode to directly generate a MoltenVK.framework for each platform, and remove create_dylib*.sh scripts. - Move static XCFramework, containing libMoltenVK.a static libraries, to Package/Latest/MoltenVK/static/MoltenVK.xcframework. - Generate dynamic XCFramework, containing MoltenVK.framework dynamic libraries, in Package/Latest/MoltenVK/dynamic/MoltenVK.xcframework. - Add macro MVK_VERSION_STRING to create version string at compile time, use it to validate the CURRENT_PROJECT_VERSION build setting at compile time, and use it at runtime instead of mvkGetMoltenVKVersionString() function. - Add -w to OTHER_LDFLAGS to dynamic framework builds to suppress spurious linker warnings of the type "ld: warning: no platform load command found in '...', assuming: iOS" issued from the new linker introduced in Xcode 15. - Add MoltenVK-MacCat Xcode target and MoltenVK Package (MacCat only) Xcode scheme to avoid building dynamic MoltenVK.framework for the Mac Catalyst platform, because Xcode does not support doing so. - Always run MoltenVK build scripts, to ensure all components are added to the XCFrameworks, and MoltenVK/Package is always refreshed, even if code compilation is not required. - Cube demo link to dynamic MoltenVK.framework through dynamic/MoltenVK.xcframework, instead of to naked libMoltenVK.dylib. - Update the version of Volk used by the Cube demo, to support loading MoltenVK from dynamic frameworks inside Volk. - Update README.md and MoltenVK_Runtime_UserGuide.md documents. - Update MVK_PRIVATE_API_VERSION to 40. - Fix make install to install /usr/local/lib/libMoltenVK.dylib on macOS (unrelated). - Remove unused MTLAttributeStrideStatic declaration prior to Xcode 15 (unrelated).
45 lines
1.4 KiB
Bash
Executable File
45 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Creates a universal XCFramework for a product from any libraries that can be found for the product.
|
|
#
|
|
# Takes 2 parameters:
|
|
# 1 - product_name
|
|
# 2 - lib_type (either "library" or "framework")
|
|
#
|
|
# Requires the variables MVK_XCFWK_STAGING_DIR and MVK_XCFWK_DEST_DIR.
|
|
|
|
function create_xcframework() {
|
|
prod_name=${1}
|
|
lib_type=${2}
|
|
has_content=""
|
|
|
|
prod_file="lib${prod_name}.a"
|
|
if [[ "${lib_type}" == "framework" ]]; then
|
|
prod_file="${prod_name}.framework"
|
|
fi
|
|
|
|
xcfwk_path="${MVK_XCFWK_DEST_DIR}/${prod_name}.xcframework"
|
|
hdr_path="${MVK_XCFWK_STAGING_DIR}/Headers/${prod_name}"
|
|
|
|
xcfwk_cmd="xcodebuild -quiet -create-xcframework -output \"${xcfwk_path}\""
|
|
|
|
# For each platform directory in the staging directory, add the library to the
|
|
# XCFramework if it exists, and for each library, add headers if they exist.
|
|
for prod_staging_dir in "${MVK_XCFWK_STAGING_DIR}/${CONFIGURATION}"/*; do
|
|
prod_lib_path="${prod_staging_dir}/${prod_file}"
|
|
if [[ -e "${prod_lib_path}" ]]; then
|
|
xcfwk_cmd+=" -${lib_type} \"${prod_lib_path}\""
|
|
# if [[ -e "${hdr_path}" ]]; then
|
|
# xcfwk_cmd+=" -headers \"${hdr_path}\"" # Headers currently break build due to Xcode 12 ProcessXCFramework bug: https://developer.apple.com/forums/thread/651043?answerId=628400022#628400022
|
|
# fi
|
|
has_content="Y"
|
|
fi
|
|
done
|
|
|
|
if [ "$has_content" != "" ]; then
|
|
mkdir -p "${MVK_XCFWK_DEST_DIR}"
|
|
rm -rf "${xcfwk_path}"
|
|
eval "${xcfwk_cmd}"
|
|
fi
|
|
}
|