diff --git a/build/make/configure.sh b/build/make/configure.sh index 7b471ca28..33f658e66 100644 --- a/build/make/configure.sh +++ b/build/make/configure.sh @@ -751,7 +751,13 @@ process_common_toolchain() { enabled shared && soft_enable pic # Minimum iOS version for all target platforms (darwin and iphonesimulator). - IOS_VERSION_MIN="6.0" + if enabled shared; then + IOS_VERSION_OPTIONS="--enable-shared" + else + IOS_VERSION_OPTIONS="" + fi + IOS_VERSION_MIN=$("${source_path}/build/make/ios-version.sh" \ + ${IOS_VERSION_OPTIONS}) # Handle darwin variants. Newer SDKs allow targeting older # platforms, so use the newest one available. diff --git a/build/make/ios-Info.plist b/build/make/ios-Info.plist new file mode 100644 index 000000000..8d1da32fd --- /dev/null +++ b/build/make/ios-Info.plist @@ -0,0 +1,35 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + VPX + CFBundleIdentifier + org.webmproject.VPX + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + VPX + CFBundlePackageType + FMWK + CFBundleShortVersionString + ${VERSION} + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + iPhoneOS + + CFBundleVersion + ${VERSION} + MinimumOSVersion + ${IOS_VERSION_MIN} + UIDeviceFamily + + 1 + 2 + + + diff --git a/build/make/ios-version.sh b/build/make/ios-version.sh new file mode 100755 index 000000000..7252eb4d6 --- /dev/null +++ b/build/make/ios-version.sh @@ -0,0 +1,17 @@ +#!/bin/sh +## +## Copyright (c) 2016 The WebM project authors. All Rights Reserved. +## +## Use of this source code is governed by a BSD-style license +## that can be found in the LICENSE file in the root of the source +## tree. An additional intellectual property rights grant can be found +## in the file PATENTS. All contributing project authors may +## be found in the AUTHORS file in the root of the source tree. +## + +if [ "$1" = "--enable-shared" ]; then + # Shared library framework builds are only possible on iOS 8 and later. + echo "8.0" +else + echo "6.0" +fi diff --git a/build/make/iosbuild.sh b/build/make/iosbuild.sh index 149cb27ab..21610745c 100755 --- a/build/make/iosbuild.sh +++ b/build/make/iosbuild.sh @@ -196,7 +196,12 @@ build_framework() { for target in ${targets}; do build_target "${target}" target_dist_dir="${BUILD_ROOT}/${target}/${DIST_DIR}" - lib_list="${lib_list} ${target_dist_dir}/lib/libvpx.a" + if [ "${ENABLE_SHARED}" = "yes" ]; then + local suffix="dylib" + else + local suffix="a" + fi + lib_list="${lib_list} ${target_dist_dir}/lib/libvpx.${suffix}" done cd "${ORIG_PWD}" @@ -215,6 +220,17 @@ build_framework() { # Copy in vpx_version.h. cp -p "${BUILD_ROOT}/${target}/vpx_version.h" "${HEADER_DIR}" + if [ "${ENABLE_SHARED}" = "yes" ]; then + # Adjust the dylib's name so dynamic linking in apps works as expected. + install_name_tool -id '@rpath/VPX.framework/VPX' ${FRAMEWORK_DIR}/VPX + + # Copy in Info.plist. + cat "${SCRIPT_DIR}/ios-Info.plist" \ + | sed "s/\${VERSION}/${VERSION}/g" \ + | sed "s/\${IOS_VERSION_MIN}/${IOS_VERSION_MIN}/g" \ + > "${FRAMEWORK_DIR}/Info.plist" + fi + # Confirm VPX.framework/VPX contains the targets requested. verify_framework_targets ${targets} @@ -252,6 +268,7 @@ iosbuild_usage() { cat << EOF Usage: ${0##*/} [arguments] --help: Display this message and exit. + --enable-shared: Build a dynamic framework for use on iOS 8 or later. --extra-configure-args : Extra args to pass when configuring libvpx. --macosx: Uses darwin15 targets instead of iphonesimulator targets for x86 and x86_64. Allows linking to framework when builds target MacOSX @@ -290,6 +307,9 @@ while [ -n "$1" ]; do iosbuild_usage exit ;; + --enable-shared) + ENABLE_SHARED=yes + ;; --preserve-build-output) PRESERVE_BUILD_OUTPUT=yes ;; @@ -317,6 +337,19 @@ while [ -n "$1" ]; do shift done +if [ "${ENABLE_SHARED}" = "yes" ]; then + CONFIGURE_ARGS="--enable-shared ${CONFIGURE_ARGS}" +fi + +VERSION=$("${SCRIPT_DIR}"/version.sh --bare "${LIBVPX_SOURCE_DIR}" \ + | sed -E 's/^v(.*)$/\1/') +if [ "$ENABLE_SHARED" = "yes" ]; then + IOS_VERSION_OPTIONS="--enable-shared" +else + IOS_VERSION_OPTIONS="" +fi +IOS_VERSION_MIN=$("${SCRIPT_DIR}/ios-version.sh" ${IOS_VERSION_OPTIONS}) + if [ "${VERBOSE}" = "yes" ]; then cat << EOF BUILD_ROOT=${BUILD_ROOT} @@ -332,8 +365,12 @@ cat << EOF ORIG_PWD=${ORIG_PWD} PRESERVE_BUILD_OUTPUT=${PRESERVE_BUILD_OUTPUT} TARGETS="$(print_list "" ${TARGETS})" + ENABLE_SHARED=${ENABLE_SHARED} OSX_TARGETS="${OSX_TARGETS}" SIM_TARGETS="${SIM_TARGETS}" + SCRIPT_DIR="${SCRIPT_DIR}" + VERSION="${VERSION}" + IOS_VERSION_MIN="${IOS_VERSION_MIN}" EOF fi diff --git a/configure b/configure index 91407d33c..04ea0f436 100755 --- a/configure +++ b/configure @@ -515,13 +515,18 @@ process_detect() { # Can only build shared libs on a subset of platforms. Doing this check # here rather than at option parse time because the target auto-detect # magic happens after the command line has been parsed. - if ! enabled linux && ! enabled os2; then + case "${tgt_os}" in + linux|os2|darwin*|iphonesimulator*) + # Supported platforms + ;; + *) if enabled gnu; then echo "--enable-shared is only supported on ELF; assuming this is OK" else - die "--enable-shared only supported on ELF and OS/2 for now" + die "--enable-shared only supported on ELF, OS/2, and Darwin for now" fi - fi + ;; + esac fi if [ -z "$CC" ] || enabled external_build; then echo "Bypassing toolchain for environment detection." diff --git a/libs.mk b/libs.mk index 54592abb1..f563bd32a 100644 --- a/libs.mk +++ b/libs.mk @@ -273,6 +273,12 @@ EXPORT_FILE := libvpx.syms LIBVPX_SO_SYMLINKS := $(addprefix $(LIBSUBDIR)/, \ libvpx.dylib ) else +ifeq ($(filter iphonesimulator%,$(TGT_OS)),$(TGT_OS)) +LIBVPX_SO := libvpx.$(SO_VERSION_MAJOR).dylib +SHARED_LIB_SUF := .dylib +EXPORT_FILE := libvpx.syms +LIBVPX_SO_SYMLINKS := $(addprefix $(LIBSUBDIR)/, libvpx.dylib) +else ifeq ($(filter os2%,$(TGT_OS)),$(TGT_OS)) LIBVPX_SO := libvpx$(SO_VERSION_MAJOR).dll SHARED_LIB_SUF := _dll.a @@ -288,6 +294,7 @@ LIBVPX_SO_SYMLINKS := $(addprefix $(LIBSUBDIR)/, \ libvpx.so.$(SO_VERSION_MAJOR).$(SO_VERSION_MINOR)) endif endif +endif LIBS-$(CONFIG_SHARED) += $(BUILD_PFX)$(LIBVPX_SO)\ $(notdir $(LIBVPX_SO_SYMLINKS)) \