2018-09-07 11:46:58 -04:00
|
|
|
#!/bin/bash
|
|
|
|
|
2020-09-14 12:01:13 -04:00
|
|
|
# Allow dylib building to be skipped based on bulid setting.
|
|
|
|
# For example, skipping the build of a dylib for Simulator builds
|
|
|
|
# because Xcode cannot currently handle creating a Simulator dylib
|
|
|
|
# containing both x86_64 and arm64 (Apple Silicon) architectures.
|
|
|
|
if [ "${MVK_SKIP_DYLIB}" == "YES" ]; then
|
|
|
|
exit 0
|
|
|
|
fi
|
2018-09-07 11:46:58 -04:00
|
|
|
|
2020-06-19 09:53:43 -04:00
|
|
|
export MVK_BUILT_PROD_DIR="${BUILT_PRODUCTS_DIR}"
|
2018-10-30 23:16:12 -04:00
|
|
|
export MVK_DYLIB_NAME="lib${PRODUCT_NAME}.dylib"
|
2018-09-07 11:46:58 -04:00
|
|
|
export MVK_SYS_FWK_DIR="${SDK_DIR}/System/Library/Frameworks"
|
|
|
|
export MVK_USR_LIB_DIR="${SDK_DIR}/usr/lib"
|
|
|
|
|
2020-06-19 09:53:43 -04:00
|
|
|
mkdir -p "${MVK_BUILT_PROD_DIR}/dynamic"
|
2019-03-22 19:36:21 -04:00
|
|
|
|
2020-08-11 20:18:50 -04:00
|
|
|
export MVK_EMBED_BITCODE=""
|
|
|
|
if test x"${ENABLE_BITCODE}" == xYES; then
|
|
|
|
if test x"${BITCODE_GENERATION_MODE}" == xbitcode; then
|
|
|
|
MVK_EMBED_BITCODE="-fembed-bitcode"
|
|
|
|
else
|
|
|
|
MVK_EMBED_BITCODE="-fembed-bitcode-marker"
|
|
|
|
fi
|
2018-11-06 16:01:36 -05:00
|
|
|
fi
|
|
|
|
|
2018-09-27 11:21:13 -05:00
|
|
|
if test x"${ENABLE_THREAD_SANITIZER}" = xYES; then
|
2018-12-10 12:11:31 -06:00
|
|
|
MVK_SAN="-fsanitize=thread"
|
|
|
|
elif test x"${ENABLE_ADDRESS_SANITIZER}" = xYES; then
|
|
|
|
MVK_SAN="-fsanitize=address"
|
2018-09-27 11:21:13 -05:00
|
|
|
fi
|
2020-10-30 23:15:22 -05:00
|
|
|
if test x"${ENABLE_UNDEFINED_BEHAVIOR_SANITIZER}" = xYES; then
|
|
|
|
if test x"$MVK_SAN" = x; then
|
|
|
|
MVK_SAN="-fsanitize=undefined"
|
|
|
|
else
|
|
|
|
MVK_SAN="$MVK_SAN,undefined"
|
|
|
|
fi
|
|
|
|
fi
|
2018-09-27 11:21:13 -05:00
|
|
|
|
2019-04-18 15:08:39 -04:00
|
|
|
# Suppress visibility warning spam when linking in Release or Debug mode
|
|
|
|
# and external libraries built in the other mode.
|
|
|
|
MVK_LINK_WARN="-Xlinker -w"
|
|
|
|
|
2018-11-05 06:35:44 -06:00
|
|
|
clang++ \
|
2018-11-05 06:40:50 -06:00
|
|
|
-stdlib=${CLANG_CXX_LIBRARY} \
|
2018-11-06 16:01:36 -05:00
|
|
|
-dynamiclib \
|
|
|
|
$(printf -- "-arch %s " ${ARCHS}) \
|
2020-06-19 09:53:43 -04:00
|
|
|
-m${MVK_OS_CLANG}-version-min=${MVK_MIN_OS_VERSION} \
|
2018-09-07 11:46:58 -04:00
|
|
|
-compatibility_version 1.0.0 -current_version 1.0.0 \
|
|
|
|
-install_name "@rpath/${MVK_DYLIB_NAME}" \
|
|
|
|
-Wno-incompatible-sysroot \
|
2018-11-06 16:01:36 -05:00
|
|
|
${MVK_EMBED_BITCODE} \
|
2018-12-10 12:11:31 -06:00
|
|
|
${MVK_SAN} \
|
2019-04-02 12:25:49 -04:00
|
|
|
${MVK_LINK_WARN} \
|
2018-09-07 11:46:58 -04:00
|
|
|
-isysroot ${SDK_DIR} \
|
|
|
|
-iframework ${MVK_SYS_FWK_DIR} \
|
2020-06-09 14:30:46 -07:00
|
|
|
-framework Metal ${MVK_IOSURFACE_FWK} -framework ${MVK_UX_FWK} -framework QuartzCore -framework CoreGraphics ${MVK_IOKIT_FWK} -framework Foundation \
|
2018-09-07 11:46:58 -04:00
|
|
|
--library-directory ${MVK_USR_LIB_DIR} \
|
2020-06-19 09:53:43 -04:00
|
|
|
-o "${MVK_BUILT_PROD_DIR}/dynamic/${MVK_DYLIB_NAME}" \
|
|
|
|
-force_load "${MVK_BUILT_PROD_DIR}/lib${PRODUCT_NAME}.a"
|
2018-12-04 13:06:18 -06:00
|
|
|
|
|
|
|
if test "$CONFIGURATION" = Debug; then
|
2020-06-19 09:53:43 -04:00
|
|
|
mkdir -p "${MVK_BUILT_PROD_DIR}/dynamic"
|
|
|
|
dsymutil "${MVK_BUILT_PROD_DIR}/dynamic/${MVK_DYLIB_NAME}" \
|
|
|
|
-o "${MVK_BUILT_PROD_DIR}/dynamic/${MVK_DYLIB_NAME}.dSYM"
|
2018-12-04 13:06:18 -06:00
|
|
|
fi
|