Initial support for visionOS

pull/1083/head
Pedro Diaz 6 months ago
parent 17ea9e386f
commit 23c72e1eae
  1. 9
      apple.sh
  2. 57
      scripts/function-apple.sh
  3. 533
      scripts/function-xros.sh
  4. 71
      scripts/function.sh
  5. 246
      scripts/main-xros.sh
  6. 8
      scripts/variable.sh
  7. 285
      xros.sh

@ -6,6 +6,8 @@ enable_default_architecture_variants() {
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_MAC_CATALYST]=1 ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_MAC_CATALYST]=1
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_APPLETVOS]=1 ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_APPLETVOS]=1
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_APPLETVSIMULATOR]=1 ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_APPLETVSIMULATOR]=1
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_XROS]=1
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_XRSIMULATOR]=1
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_MACOS]=1 ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_MACOS]=1
} }
@ -98,6 +100,12 @@ disable_arch_variant() {
appletvsimulator) appletvsimulator)
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_APPLETVSIMULATOR]=0 ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_APPLETVSIMULATOR]=0
;; ;;
xros)
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_XROS]=0
;;
xrsimulator)
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_XRSIMULATOR]=0
;;
macosx) macosx)
ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_MACOS]=0 ENABLED_ARCHITECTURE_VARIANTS[ARCH_VAR_MACOS]=0
;; ;;
@ -136,6 +144,7 @@ fi
# DETECT SDK VERSIONS # DETECT SDK VERSIONS
DETECTED_IOS_SDK_VERSION="$(xcrun --sdk iphoneos --show-sdk-version 2>>"${BASEDIR}"/build.log)" DETECTED_IOS_SDK_VERSION="$(xcrun --sdk iphoneos --show-sdk-version 2>>"${BASEDIR}"/build.log)"
DETECTED_TVOS_SDK_VERSION="$(xcrun --sdk appletvos --show-sdk-version 2>>"${BASEDIR}"/build.log)" DETECTED_TVOS_SDK_VERSION="$(xcrun --sdk appletvos --show-sdk-version 2>>"${BASEDIR}"/build.log)"
DETECTED_XROS_SDK_VERSION="$(xcrun --sdk xros --show-sdk-version 2>>"${BASEDIR}"/build.log)"
DETECTED_MACOS_SDK_VERSION="$(xcrun --sdk macosx --show-sdk-version 2>>"${BASEDIR}"/build.log)" DETECTED_MACOS_SDK_VERSION="$(xcrun --sdk macosx --show-sdk-version 2>>"${BASEDIR}"/build.log)"
echo -e "INFO: Using iOS SDK: ${DETECTED_IOS_SDK_VERSION}, tvOS SDK: ${DETECTED_TVOS_SDK_VERSION}, macOS SDK: ${DETECTED_MACOS_SDK_VERSION} by Xcode provided at $(xcode-select -p)\n" 1>>"${BASEDIR}"/build.log 2>&1 echo -e "INFO: Using iOS SDK: ${DETECTED_IOS_SDK_VERSION}, tvOS SDK: ${DETECTED_TVOS_SDK_VERSION}, macOS SDK: ${DETECTED_MACOS_SDK_VERSION} by Xcode provided at $(xcode-select -p)\n" 1>>"${BASEDIR}"/build.log 2>&1
echo -e "INFO: Build options: $*\n" 1>>"${BASEDIR}"/build.log 2>&1 echo -e "INFO: Build options: $*\n" 1>>"${BASEDIR}"/build.log 2>&1

@ -114,6 +114,27 @@ disable_tvos_architecture_not_supported_on_detected_sdk_version() {
fi fi
} }
#
# 1. architecture index
#
disable_xros_architecture_not_supported_on_detected_sdk_version() {
local ARCH_NAME=$(get_arch_name $1)
# No need to disable for any architecture at the moment, left as placeholder for the future
case ${ARCH_NAME} in
*)
local SUPPORTED=1
;;
esac
if [[ ${SUPPORTED} -ne 1 ]]; then
if [[ -z ${BUILD_FORCE} ]]; then
echo -e "INFO: Disabled ${ARCH_NAME} architecture which is not supported on visionOS SDK $DETECTED_XROS_SDK_VERSION\n" 1>>"${BASEDIR}"/build.log 2>&1
disable_arch "${ARCH_NAME}"
fi
fi
}
# #
# 1. architecture index # 1. architecture index
# #
@ -160,6 +181,8 @@ build_apple_architecture_variant_strings() {
export ALL_TVOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_TVOS}")" export ALL_TVOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_TVOS}")"
export APPLETVOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_APPLETVOS}")" export APPLETVOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_APPLETVOS}")"
export APPLETV_SIMULATOR_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_APPLETVSIMULATOR}")" export APPLETV_SIMULATOR_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_APPLETVSIMULATOR}")"
export XROS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_XROS}")"
export XR_SIMULATOR_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_XRSIMULATOR}")"
export MACOSX_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_MACOS}")" export MACOSX_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_MACOS}")"
} }
@ -647,6 +670,12 @@ get_framework_directory() {
"${ARCH_VAR_TVOS}") "${ARCH_VAR_TVOS}")
echo "bundle-apple-framework-tvos${LTS_POSTFIX}" echo "bundle-apple-framework-tvos${LTS_POSTFIX}"
;; ;;
"${ARCH_VAR_XROS}")
echo "bundle-apple-framework-xros${LTS_POSTFIX}"
;;
"${ARCH_VAR_XRSIMULATOR}")
echo "bundle-apple-framework-xrsimulator${LTS_POSTFIX}"
;;
"${ARCH_VAR_APPLETVOS}") "${ARCH_VAR_APPLETVOS}")
echo "bundle-apple-framework-appletvos${LTS_POSTFIX}" echo "bundle-apple-framework-appletvos${LTS_POSTFIX}"
;; ;;
@ -709,6 +738,12 @@ get_universal_library_directory() {
"${ARCH_VAR_APPLETVSIMULATOR}") "${ARCH_VAR_APPLETVSIMULATOR}")
echo "bundle-apple-universal-appletvsimulator${LTS_POSTFIX}" echo "bundle-apple-universal-appletvsimulator${LTS_POSTFIX}"
;; ;;
"${ARCH_VAR_XROS}")
echo "bundle-apple-universal-xros${LTS_POSTFIX}"
;;
"${ARCH_VAR_XRSIMULATOR}")
echo "bundle-apple-universal-xrsimulator${LTS_POSTFIX}"
;;
"${ARCH_VAR_MACOS}") "${ARCH_VAR_MACOS}")
echo "bundle-apple-universal-macos${LTS_POSTFIX}" echo "bundle-apple-universal-macos${LTS_POSTFIX}"
;; ;;
@ -797,6 +832,16 @@ get_apple_architectures_for_variant() {
ARCHITECTURES+=" $(get_full_arch_name "${index}") " ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done done
;; ;;
"${ARCH_VAR_XROS}")
for index in ${ARCH_ARM64} ${ARCH_ARM64_SIMULATOR}; do
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
"${ARCH_VAR_XRSIMULATOR}")
for index in ${ARCH_ARM64_SIMULATOR}; do
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
"${ARCH_VAR_MACOS}") "${ARCH_VAR_MACOS}")
for index in ${ARCH_ARM64} ${ARCH_X86_64}; do for index in ${ARCH_ARM64} ${ARCH_X86_64}; do
ARCHITECTURES+=" $(get_full_arch_name "${index}") " ARCHITECTURES+=" $(get_full_arch_name "${index}") "
@ -977,6 +1022,9 @@ get_default_sdk_name() {
tvos) tvos)
echo "appletvos" echo "appletvos"
;; ;;
xros)
echo "xros"
;;
macos) macos)
echo "macosx" echo "macosx"
;; ;;
@ -996,6 +1044,9 @@ get_sdk_name() {
tvos) tvos)
echo "appletvos" echo "appletvos"
;; ;;
xros)
echo "xros"
;;
macos) macos)
echo "macosx" echo "macosx"
;; ;;
@ -1025,6 +1076,9 @@ get_sdk_name() {
tvos) tvos)
echo "appletvsimulator" echo "appletvsimulator"
;; ;;
xros)
echo "xrsimulator"
;;
esac esac
;; ;;
*-mac-catalyst) *-mac-catalyst)
@ -1096,6 +1150,9 @@ get_min_sdk_version() {
tvos) tvos)
echo "${TVOS_MIN_VERSION}" echo "${TVOS_MIN_VERSION}"
;; ;;
xros)
echo "${XROS_MIN_VERSION}"
;;
macos) macos)
echo "${MACOS_MIN_VERSION}" echo "${MACOS_MIN_VERSION}"
;; ;;

@ -0,0 +1,533 @@
#!/bin/bash
source "${BASEDIR}/scripts/function-apple.sh"
prepare_inline_sed
enable_default_xros_architectures() {
ENABLED_ARCHITECTURES[ARCH_ARM64]=1
ENABLED_ARCHITECTURES[ARCH_ARM64_SIMULATOR]=1
}
display_help() {
COMMAND=$(echo "$0" | sed -e 's/\.\///g')
echo -e "\n'$COMMAND' builds FFmpegKit for visionOS platform. By default three architectures (arm64, arm64-simulator) are enabled without any external libraries. Options can be used to disable architectures and/or enable \
external libraries. Please note that GPL libraries (external libraries with GPL license) need --enable-gpl flag to be \
set explicitly. When compilation ends, libraries are created under the prebuilt folder.\n"
echo -e "Usage: ./$COMMAND [OPTION]...\n"
echo -e "Specify environment variables as VARIABLE=VALUE to override default build options.\n"
display_help_options " -x, --xcframework\t\tbuild xcframework bundles instead of framework bundles" " -l, --lts build lts packages to support sdk 1.0+ devices" " --target=xros sdk version\toverride minimum deployment target [1.0]"
display_help_licensing
echo -e "Architectures:"
echo -e " --disable-arm64\t\tdo not build arm64 architecture [yes]"
echo -e " --disable-arm64-simulator\tdo not build arm64-simulator architecture [yes]"
echo -e "Libraries:"
echo -e " --full\t\t\tenables all non-GPL external libraries"
echo -e " --enable-xros-audiotoolbox\tbuild with built-in Apple AudioToolbox support [no]"
echo -e " --enable-xros-bzip2\t\tbuild with built-in bzip2 support [no]"
if [[ -z ${FFMPEG_KIT_LTS_BUILD} ]]; then
echo -e " --enable-xros-videotoolbox\tbuild with built-in Apple VideoToolbox support [no]"
fi
echo -e " --enable-xros-zlib\t\tbuild with built-in zlib [no]"
echo -e " --enable-xros-libiconv\tbuild with built-in libiconv [no]"
display_help_common_libraries
display_help_gpl_libraries
display_help_custom_libraries
if [[ -n ${FFMPEG_KIT_XCF_BUILD} ]]; then
display_help_advanced_options " --no-framework\t\tdo not build xcframework bundles [no]" " --no-bitcode\t\t\tdo not enable bitcode in bundles [no]"
else
display_help_advanced_options " --no-framework\t\tdo not build framework bundles [no]" " --no-bitcode\t\t\tdo not enable bitcode in bundles [no]"
fi
}
enable_main_build() {
if [[ $(compare_versions "$DETECTED_XROS_SDK_VERSION" "1.0") -le 0 ]]; then
export XROS_MIN_VERSION=$DETECTED_XROS_SDK_VERSION
else
export XROS_MIN_VERSION=1.0
fi
}
enable_lts_build() {
export FFMPEG_KIT_LTS_BUILD="1"
if [[ $(compare_versions "$DETECTED_XROS_SDK_VERSION" "1.0") -le 0 ]]; then
export XROS_MIN_VERSION=$DETECTED_XROS_SDK_VERSION
else
export XROS_MIN_VERSION=1.0
fi
}
get_common_includes() {
echo "-I${SDK_PATH}/usr/include"
}
get_common_cflags() {
if [[ -n ${FFMPEG_KIT_LTS_BUILD} ]]; then
local LTS_BUILD_FLAG="-DFFMPEG_KIT_LTS "
fi
local BUILD_DATE="-DFFMPEG_KIT_BUILD_DATE=$(date +%Y%m%d 2>>"${BASEDIR}"/build.log)"
if [ -z $NO_BITCODE ]; then
local BITCODE_FLAGS="-fembed-bitcode"
fi
case ${ARCH} in
arm64)
echo "-fstrict-aliasing ${BITCODE_FLAGS} -DXROS ${LTS_BUILD_FLAG}${BUILD_DATE} -isysroot ${SDK_PATH}"
;;
arm64-simulator)
echo "-fstrict-aliasing -DXROS ${LTS_BUILD_FLAG}${BUILD_DATE} -isysroot ${SDK_PATH}"
;;
esac
}
get_arch_specific_cflags() {
case ${ARCH} in
arm64)
echo "-arch arm64 -target $(get_target) -march=armv8-a+crc+crypto -mcpu=generic -DFFMPEG_KIT_ARM64"
;;
arm64-simulator)
echo "-arch arm64 -target $(get_target) -march=armv8-a+crc+crypto -mcpu=generic -DFFMPEG_KIT_ARM64_SIMULATOR"
;;
esac
}
get_size_optimization_cflags() {
local ARCH_OPTIMIZATION=""
case ${ARCH} in
arm64)
case $1 in
x264 | x265)
ARCH_OPTIMIZATION="-Oz -Wno-ignored-optimization-argument"
;;
ffmpeg | ffmpeg-kit)
ARCH_OPTIMIZATION="-Oz -Wno-ignored-optimization-argument"
;;
*)
ARCH_OPTIMIZATION="-Oz -Wno-ignored-optimization-argument"
;;
esac
;;
arm64-simulator)
case $1 in
x264 | ffmpeg)
ARCH_OPTIMIZATION="-O2 -Wno-ignored-optimization-argument"
;;
x265)
ARCH_OPTIMIZATION="-O2 -Wno-ignored-optimization-argument"
;;
*)
ARCH_OPTIMIZATION="-O2 -Wno-ignored-optimization-argument"
;;
esac
;;
esac
echo "${ARCH_OPTIMIZATION}"
}
get_size_optimization_asm_cflags() {
local ARCH_OPTIMIZATION=""
case $1 in
jpeg | ffmpeg)
case ${ARCH} in
arm64)
ARCH_OPTIMIZATION="-Oz"
;;
arm64-simulator)
ARCH_OPTIMIZATION="-O2"
;;
esac
;;
*)
ARCH_OPTIMIZATION=$(get_size_optimization_cflags "$1")
;;
esac
echo "${ARCH_OPTIMIZATION}"
}
get_app_specific_cflags() {
local APP_FLAGS=""
case $1 in
fontconfig)
case ${ARCH} in
arm64)
APP_FLAGS="-std=c99 -Wno-unused-function -D__IPHONE_OS_MIN_REQUIRED -D__IPHONE_VERSION_MIN_REQUIRED=30000"
;;
*)
APP_FLAGS="-std=c99 -Wno-unused-function"
;;
esac
;;
ffmpeg)
APP_FLAGS="-Wno-unused-function -Wno-deprecated-declarations"
;;
gnutls)
APP_FLAGS="-std=c99 -Wno-unused-function -D_GL_USE_STDLIB_ALLOC=1"
;;
jpeg)
APP_FLAGS="-Wno-nullability-completeness"
;;
kvazaar)
APP_FLAGS="-std=gnu99 -Wno-unused-function"
;;
leptonica)
APP_FLAGS="-std=c99 -Wno-unused-function -DOS_IOS"
;;
libwebp | xvidcore)
APP_FLAGS="-fno-common -DPIC"
;;
ffmpeg-kit)
APP_FLAGS="-std=c99 -Wno-unused-function -Wall -Wno-deprecated-declarations -Wno-pointer-sign -Wno-switch -Wno-unused-result -Wno-unused-variable -DPIC -fobjc-arc"
;;
sdl)
APP_FLAGS="-DPIC -Wno-unused-function -D__XROS__"
;;
shine)
APP_FLAGS="-Wno-unused-function"
;;
soxr | snappy)
APP_FLAGS="-std=gnu99 -Wno-unused-function -DPIC"
;;
openh264 | x265)
APP_FLAGS="-Wno-unused-function"
;;
*)
APP_FLAGS="-std=c99 -Wno-unused-function"
;;
esac
echo "${APP_FLAGS}"
}
get_cflags() {
local ARCH_FLAGS=$(get_arch_specific_cflags)
local APP_FLAGS=$(get_app_specific_cflags "$1")
local COMMON_FLAGS=$(get_common_cflags)
if [[ -z ${FFMPEG_KIT_DEBUG} ]]; then
local OPTIMIZATION_FLAGS=$(get_size_optimization_cflags "$1")
else
local OPTIMIZATION_FLAGS="${FFMPEG_KIT_DEBUG}"
fi
local MIN_VERSION_FLAGS=$(get_min_version_cflags "$1")
local COMMON_INCLUDES=$(get_common_includes)
echo "${ARCH_FLAGS} ${APP_FLAGS} ${COMMON_FLAGS} ${OPTIMIZATION_FLAGS} ${MIN_VERSION_FLAGS} ${COMMON_INCLUDES}"
}
get_asmflags() {
local ARCH_FLAGS=$(get_arch_specific_cflags)
local APP_FLAGS=$(get_app_specific_cflags "$1")
local COMMON_FLAGS=$(get_common_cflags)
if [[ -z ${FFMPEG_KIT_DEBUG} ]]; then
local OPTIMIZATION_FLAGS=$(get_size_optimization_asm_cflags "$1")
else
local OPTIMIZATION_FLAGS="${FFMPEG_KIT_DEBUG}"
fi
local MIN_VERSION_FLAGS=$(get_min_version_cflags "$1")
local COMMON_INCLUDES=$(get_common_includes)
echo "${ARCH_FLAGS} ${APP_FLAGS} ${COMMON_FLAGS} ${OPTIMIZATION_FLAGS} ${MIN_VERSION_FLAGS} ${COMMON_INCLUDES}"
}
get_cxxflags() {
local COMMON_CFLAGS="$(get_common_cflags "$1") $(get_common_includes "$1") $(get_arch_specific_cflags) $(get_min_version_cflags "$1")"
if [[ -z ${FFMPEG_KIT_DEBUG} ]]; then
local OPTIMIZATION_FLAGS="-Oz"
else
local OPTIMIZATION_FLAGS="${FFMPEG_KIT_DEBUG}"
fi
local BITCODE_FLAGS=""
case ${ARCH} in
arm64)
if [ -z $NO_BITCODE ]; then
local BITCODE_FLAGS="-fembed-bitcode"
fi
;;
esac
case $1 in
x265)
echo "-std=c++11 -fno-exceptions ${BITCODE_FLAGS} ${COMMON_CFLAGS}"
;;
gnutls)
echo "-std=c++11 -fno-rtti ${BITCODE_FLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
libaom)
echo "-std=c++11 -fno-exceptions ${BITCODE_FLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
libilbc)
echo "-std=c++14 -fno-exceptions ${BITCODE_FLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
libwebp | xvidcore)
echo "-std=c++11 -fno-exceptions -fno-rtti ${BITCODE_FLAGS} -fno-common -DPIC ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
opencore-amr)
echo "-fno-rtti ${BITCODE_FLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
rubberband)
echo "-fno-rtti ${BITCODE_FLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
srt | tesseract | zimg)
echo "-std=c++11 ${BITCODE_FLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
*)
echo "-std=c++11 -fno-exceptions -fno-rtti ${BITCODE_FLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_FLAGS}"
;;
esac
}
get_common_linked_libraries() {
echo "-L${SDK_PATH}/usr/lib -lc++"
}
get_common_ldflags() {
echo "-isysroot ${SDK_PATH} $(get_min_version_cflags)"
}
get_size_optimization_ldflags() {
case ${ARCH} in
arm64)
case $1 in
ffmpeg | ffmpeg-kit)
echo "-Oz -dead_strip"
;;
*)
echo "-Oz -dead_strip"
;;
esac
;;
*)
case $1 in
ffmpeg)
echo "-O2"
;;
*)
echo "-O2"
;;
esac
;;
esac
}
get_arch_specific_ldflags() {
if [ -z $NO_BITCODE ]; then
local BITCODE_FLAGS="-fembed-bitcode"
fi
case ${ARCH} in
arm64)
echo "-arch arm64 -march=armv8-a+crc+crypto ${BITCODE_FLAGS}"
;;
arm64-simulator)
echo "-arch arm64 -march=armv8-a+crc+crypto"
;;
esac
}
get_ldflags() {
local ARCH_FLAGS=$(get_arch_specific_ldflags)
local LINKED_LIBRARIES=$(get_common_linked_libraries)
if [[ -z ${FFMPEG_KIT_DEBUG} ]]; then
local OPTIMIZATION_FLAGS="$(get_size_optimization_ldflags "$1")"
else
local OPTIMIZATION_FLAGS="${FFMPEG_KIT_DEBUG}"
fi
local COMMON_FLAGS=$(get_common_ldflags)
if [ -z $NO_BITCODE ]; then
local BITCODE_FLAGS="-fembed-bitcode -Wc,-fembed-bitcode"
fi
case $1 in
ffmpeg-kit)
case ${ARCH} in
arm64)
echo "${ARCH_FLAGS} ${LINKED_LIBRARIES} ${COMMON_FLAGS} ${BITCODE_FLAGS} ${OPTIMIZATION_FLAGS}"
;;
*)
echo "${ARCH_FLAGS} ${LINKED_LIBRARIES} ${COMMON_FLAGS} ${OPTIMIZATION_FLAGS}"
;;
esac
;;
*)
# NOTE THAT ffmpeg ALSO NEEDS BITCODE, IT IS ENABLED IN ffmpeg.sh
echo "${ARCH_FLAGS} ${LINKED_LIBRARIES} ${COMMON_FLAGS} ${OPTIMIZATION_FLAGS}"
;;
esac
}
set_toolchain_paths() {
if [ ! -f "${FFMPEG_KIT_TMPDIR}/gas-preprocessor.pl" ]; then
DOWNLOAD_RESULT=$(download "https://github.com/arthenica/gas-preprocessor/raw/v20210917/gas-preprocessor.pl" "gas-preprocessor.pl" "exit")
if [[ ${DOWNLOAD_RESULT} -ne 0 ]]; then
exit 1
fi
(chmod +x "${FFMPEG_KIT_TMPDIR}"/gas-preprocessor.pl 1>>"${BASEDIR}"/build.log 2>&1) || return 1
# patch gas-preprocessor.pl against the following warning
# Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/(?:ld|st)\d\s+({ <-- HERE \s*v(\d+)\.(\d[bhsdBHSD])\s*-\s*v(\d+)\.(\d[bhsdBHSD])\s*})/ at /Users/taner/Projects/ffmpeg-kit/.tmp/gas-preprocessor.pl line 1065.
sed -i .tmp "s/s\+({/s\+(\\\\{/g;s/s\*})/s\*\\\\})/g" "${FFMPEG_KIT_TMPDIR}"/gas-preprocessor.pl
fi
LOCAL_GAS_PREPROCESSOR="${FFMPEG_KIT_TMPDIR}/gas-preprocessor.pl"
if [ "$1" == "x264" ]; then
LOCAL_GAS_PREPROCESSOR="${BASEDIR}/src/x264/tools/gas-preprocessor.pl"
fi
HOST=$(get_host)
export AR="$(xcrun --sdk "$(get_sdk_name)" -f ar 2>>"${BASEDIR}"/build.log)"
export CC="clang"
export OBJC="$(xcrun --sdk "$(get_sdk_name)" -f clang 2>>"${BASEDIR}"/build.log)"
export CXX="clang++"
LOCAL_ASMFLAGS="$(get_asmflags "$1")"
case ${ARCH} in
arm64*)
if [ "$1" == "x265" ] || [ "$1" == "libilbc" ]; then
export AS="${LOCAL_GAS_PREPROCESSOR}"
export AS_ARGUMENTS="-arch aarch64"
export ASM_FLAGS="${LOCAL_ASMFLAGS}"
else
export AS="${LOCAL_GAS_PREPROCESSOR} -arch aarch64 -- ${CC} ${LOCAL_ASMFLAGS}"
fi
;;
*)
export AS="${CC} ${LOCAL_ASMFLAGS}"
;;
esac
export LD="$(xcrun --sdk "$(get_sdk_name)" -f ld 2>>"${BASEDIR}"/build.log)"
export RANLIB="$(xcrun --sdk "$(get_sdk_name)" -f ranlib 2>>"${BASEDIR}"/build.log)"
export STRIP="$(xcrun --sdk "$(get_sdk_name)" -f strip 2>>"${BASEDIR}"/build.log)"
export NM="$(xcrun --sdk "$(get_sdk_name)" -f nm 2>>"${BASEDIR}"/build.log)"
export INSTALL_PKG_CONFIG_DIR="${BASEDIR}/prebuilt/$(get_build_directory)/pkgconfig"
export ZLIB_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/zlib.pc"
export BZIP2_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/bzip2.pc"
export LIB_ICONV_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/libiconv.pc"
export LIB_UUID_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/uuid.pc"
if [ ! -d "${INSTALL_PKG_CONFIG_DIR}" ]; then
mkdir -p "${INSTALL_PKG_CONFIG_DIR}"
fi
if [ ! -f "${ZLIB_PACKAGE_CONFIG_PATH}" ]; then
create_zlib_system_package_config
fi
if [ ! -f "${LIB_ICONV_PACKAGE_CONFIG_PATH}" ]; then
create_libiconv_system_package_config
fi
if [ ! -f "${BZIP2_PACKAGE_CONFIG_PATH}" ]; then
create_bzip2_system_package_config
fi
if [ ! -f "${LIB_UUID_PACKAGE_CONFIG_PATH}" ]; then
create_libuuid_system_package_config
fi
}
initialize_prebuilt_xros_folders() {
if [[ -n ${FFMPEG_KIT_XCF_BUILD} ]]; then
echo -e "DEBUG: Initializing universal directories and frameworks for xcf builds\n" 1>>"${BASEDIR}"/build.log 2>&1
if [[ $(is_apple_architecture_variant_supported "${ARCH_VAR_XROS}") -eq 1 ]]; then
initialize_folder "${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCH_VAR_XROS}")"
initialize_folder "${BASEDIR}/prebuilt/$(get_framework_directory "${ARCH_VAR_XROS}")"
fi
if [[ $(is_apple_architecture_variant_supported "${ARCH_VAR_XRSIMULATOR}") -eq 1 ]]; then
initialize_folder "${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCH_VAR_XRSIMULATOR}")"
initialize_folder "${BASEDIR}/prebuilt/$(get_framework_directory "${ARCH_VAR_XRSIMULATOR}")"
fi
echo -e "DEBUG: Initializing xcframework directory at ${BASEDIR}/prebuilt/$(get_xcframework_directory)\n" 1>>"${BASEDIR}"/build.log 2>&1
# XCF BUILDS GENERATE XCFFRAMEWORKS
initialize_folder "${BASEDIR}/prebuilt/$(get_xcframework_directory)"
else
echo -e "DEBUG: Initializing default universal directory at ${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCH_VAR_XROS}")\n" 1>>"${BASEDIR}"/build.log 2>&1
# DEFAULT BUILDS GENERATE UNIVERSAL LIBRARIES AND FRAMEWORKS
initialize_folder "${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCH_VAR_XROS}")"
echo -e "DEBUG: Initializing framework directory at ${BASEDIR}/prebuilt/$(get_framework_directory "${ARCH_VAR_XROS}")\n" 1>>"${BASEDIR}"/build.log 2>&1
initialize_folder "${BASEDIR}/prebuilt/$(get_framework_directory "${ARCH_VAR_XROS}")"
fi
}
#
# DEPENDS TARGET_ARCH_LIST VARIABLE
#
create_universal_libraries_for_xros_default_frameworks() {
local ROOT_UNIVERSAL_DIRECTORY_PATH="${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCH_VAR_XROS}")"
echo -e "INFO: Building universal libraries in ${ROOT_UNIVERSAL_DIRECTORY_PATH} for default frameworks using ${TARGET_ARCH_LIST[@]}\n" 1>>"${BASEDIR}"/build.log 2>&1
create_ffmpeg_universal_library "${ARCH_VAR_XROS}"
create_ffmpeg_kit_universal_library "${ARCH_VAR_XROS}"
echo -e "INFO: Universal libraries for default frameworks built successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
create_xros_default_frameworks() {
echo -e "INFO: Building default frameworks\n" 1>>"${BASEDIR}"/build.log 2>&1
create_ffmpeg_framework "${ARCH_VAR_XROS}"
create_ffmpeg_kit_framework "${ARCH_VAR_XROS}"
echo -e "INFO: Default frameworks built successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
create_universal_libraries_for_xros_xcframeworks() {
echo -e "INFO: Building universal libraries for xcframeworks using ${TARGET_ARCH_LIST[@]}\n" 1>>"${BASEDIR}"/build.log 2>&1
create_ffmpeg_universal_library "${ARCH_VAR_XROS}"
create_ffmpeg_universal_library "${ARCH_VAR_XRSIMULATOR}"
create_ffmpeg_kit_universal_library "${ARCH_VAR_XROS}"
create_ffmpeg_kit_universal_library "${ARCH_VAR_XRSIMULATOR}"
echo -e "INFO: Universal libraries for xcframeworks built successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
create_frameworks_for_xros_xcframeworks() {
echo -e "INFO: Building frameworks for xcframeworks\n" 1>>"${BASEDIR}"/build.log 2>&1
create_ffmpeg_framework "${ARCH_VAR_XROS}"
create_ffmpeg_framework "${ARCH_VAR_XRSIMULATOR}"
create_ffmpeg_kit_framework "${ARCH_VAR_XROS}"
create_ffmpeg_kit_framework "${ARCH_VAR_XRSIMULATOR}"
echo -e "INFO: Frameworks for xcframeworks built successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
create_xros_xcframeworks() {
export ARCHITECTURE_VARIANT_ARRAY=("${ARCH_VAR_XROS}" "${ARCH_VAR_XRSIMULATOR}")
echo -e "INFO: Building xcframeworks\n" 1>>"${BASEDIR}"/build.log 2>&1
create_ffmpeg_xcframework
create_ffmpeg_kit_xcframework
echo -e "INFO: xcframeworks built successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}

@ -9,14 +9,14 @@ get_arch_name() {
2) echo "armv7" ;; # ios 2) echo "armv7" ;; # ios
3) echo "armv7s" ;; # ios 3) echo "armv7s" ;; # ios
4) echo "arm64-v8a" ;; # android 4) echo "arm64-v8a" ;; # android
5) echo "arm64" ;; # ios, tvos, macos 5) echo "arm64" ;; # ios, tvos, macos, and xros
6) echo "arm64e" ;; # ios 6) echo "arm64e" ;; # ios
7) echo "i386" ;; # ios 7) echo "i386" ;; # ios
8) echo "x86" ;; # android 8) echo "x86" ;; # android
9) echo "x86-64" ;; # android, ios, linux, macos, tvos 9) echo "x86-64" ;; # android, ios, linux, macos, tvos
10) echo "x86-64-mac-catalyst" ;; # ios 10) echo "x86-64-mac-catalyst" ;; # ios
11) echo "arm64-mac-catalyst" ;; # ios 11) echo "arm64-mac-catalyst" ;; # ios
12) echo "arm64-simulator" ;; # ios, tvos 12) echo "arm64-simulator" ;; # ios, tvos and xros
esac esac
} }
@ -35,14 +35,14 @@ from_arch_name() {
armv7) echo 2 ;; # ios armv7) echo 2 ;; # ios
armv7s) echo 3 ;; # ios armv7s) echo 3 ;; # ios
arm64-v8a) echo 4 ;; # android arm64-v8a) echo 4 ;; # android
arm64) echo 5 ;; # ios, tvos, macos arm64) echo 5 ;; # ios, tvos, macos and xros
arm64e) echo 6 ;; # ios arm64e) echo 6 ;; # ios
i386) echo 7 ;; # ios i386) echo 7 ;; # ios
x86) echo 8 ;; # android x86) echo 8 ;; # android
x86-64) echo 9 ;; # android, ios, linux, macos, tvos x86-64) echo 9 ;; # android, ios, linux, macos, tvos
x86-64-mac-catalyst) echo 10 ;; # ios x86-64-mac-catalyst) echo 10 ;; # ios
arm64-mac-catalyst) echo 11 ;; # ios arm64-mac-catalyst) echo 11 ;; # ios
arm64-simulator) echo 12 ;; # ios arm64-simulator) echo 12 ;; # ios and xros
esac esac
} }
@ -109,6 +109,8 @@ get_library_name() {
echo "macos-zlib" echo "macos-zlib"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "tvos-zlib" echo "tvos-zlib"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "xros-zlib"
fi fi
;; ;;
51) echo "linux-alsa" ;; 51) echo "linux-alsa" ;;
@ -120,6 +122,8 @@ get_library_name() {
echo "macos-audiotoolbox" echo "macos-audiotoolbox"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "tvos-audiotoolbox" echo "tvos-audiotoolbox"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "xros-audiotoolbox"
fi fi
;; ;;
54) 54)
@ -129,6 +133,8 @@ get_library_name() {
echo "macos-bzip2" echo "macos-bzip2"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "tvos-bzip2" echo "tvos-bzip2"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "xros-bzip2"
fi fi
;; ;;
55) 55)
@ -138,6 +144,8 @@ get_library_name() {
echo "macos-videotoolbox" echo "macos-videotoolbox"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "tvos-videotoolbox" echo "tvos-videotoolbox"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "xros-videotoolbox"
fi fi
;; ;;
56) 56)
@ -154,6 +162,8 @@ get_library_name() {
echo "macos-libiconv" echo "macos-libiconv"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "tvos-libiconv" echo "tvos-libiconv"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "xros-libiconv"
fi fi
;; ;;
58) 58)
@ -163,6 +173,8 @@ get_library_name() {
echo "macos-libuuid" echo "macos-libuuid"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "tvos-libuuid" echo "tvos-libuuid"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "xros-libuuid"
fi fi
;; ;;
59) 59)
@ -265,15 +277,15 @@ from_library_name() {
libsamplerate) echo 47 ;; libsamplerate) echo 47 ;;
harfbuzz) echo 48 ;; harfbuzz) echo 48 ;;
cpu-features) echo 49 ;; cpu-features) echo 49 ;;
android-zlib | ios-zlib | linux-zlib | macos-zlib | tvos-zlib) echo 50 ;; android-zlib | ios-zlib | linux-zlib | macos-zlib | tvos-zlib | xros-zlib) echo 50 ;;
linux-alsa) echo 51 ;; linux-alsa) echo 51 ;;
android-media-codec) echo 52 ;; android-media-codec) echo 52 ;;
ios-audiotoolbox | macos-audiotoolbox | tvos-audiotoolbox) echo 53 ;; ios-audiotoolbox | macos-audiotoolbox | tvos-audiotoolbox | xros-audiotoolbox) echo 53 ;;
ios-bzip2 | macos-bzip2 | tvos-bzip2) echo 54 ;; ios-bzip2 | macos-bzip2 | tvos-bzip2 | xros-bzip2) echo 54 ;;
ios-videotoolbox | macos-videotoolbox | tvos-videotoolbox) echo 55 ;; ios-videotoolbox | macos-videotoolbox | tvos-videotoolbox | xros-videotoolbox) echo 55 ;;
ios-avfoundation | macos-avfoundation) echo 56 ;; ios-avfoundation | macos-avfoundation) echo 56 ;;
ios-libiconv | macos-libiconv | tvos-libiconv) echo 57 ;; ios-libiconv | macos-libiconv | tvos-libiconv | xros-libiconv) echo 57 ;;
ios-libuuid | macos-libuuid | tvos-libuuid) echo 58 ;; ios-libuuid | macos-libuuid | tvos-libuuid | xros-libuuid) echo 58 ;;
macos-coreimage) echo 59 ;; macos-coreimage) echo 59 ;;
macos-opencl) echo 60 ;; macos-opencl) echo 60 ;;
macos-opengl) echo 61 ;; macos-opengl) echo 61 ;;
@ -359,9 +371,9 @@ is_library_supported_on_platform() {
fi fi
;; ;;
# IOS, MACOS AND TVOS # IOS, MACOS, TVOS AND XROS
53 | 54 | 55 | 57 | 58) 53 | 54 | 55 | 57 | 58)
if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]]; then if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]]; then
echo "0" echo "0"
else else
echo "1" echo "1"
@ -419,18 +431,18 @@ is_arch_supported_on_platform() {
fi fi
;; ;;
# IOS OR TVOS # IOS, TVOS OR XROS
$ARCH_ARM64_SIMULATOR) $ARCH_ARM64_SIMULATOR)
if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo 1 echo 1
else else
echo 0 echo 0
fi fi
;; ;;
# IOS, MACOS OR TVOS # IOS, MACOS, TVOS OR XROS
$ARCH_ARM64) $ARCH_ARM64)
if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo 1 echo 1
else else
echo 0 echo 0
@ -515,6 +527,8 @@ get_target() {
echo "$(get_target_cpu)-apple-macos$(get_min_sdk_version)" echo "$(get_target_cpu)-apple-macos$(get_min_sdk_version)"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "$(get_target_cpu)-apple-tvos$(get_min_sdk_version)" echo "$(get_target_cpu)-apple-tvos$(get_min_sdk_version)"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "$(get_target_cpu)-apple-xros$(get_min_sdk_version)"
fi fi
;; ;;
arm64-simulator) arm64-simulator)
@ -522,6 +536,8 @@ get_target() {
echo "$(get_target_cpu)-apple-ios$(get_min_sdk_version)-simulator" echo "$(get_target_cpu)-apple-ios$(get_min_sdk_version)-simulator"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "$(get_target_cpu)-apple-tvos$(get_min_sdk_version)-simulator" echo "$(get_target_cpu)-apple-tvos$(get_min_sdk_version)-simulator"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "$(get_target_cpu)-apple-xros$(get_min_sdk_version)-simulator"
fi fi
;; ;;
x86-64) x86-64)
@ -556,6 +572,8 @@ get_host() {
echo "$(get_target_cpu)-ios-darwin" echo "$(get_target_cpu)-ios-darwin"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "$(get_target_cpu)-tvos-darwin" echo "$(get_target_cpu)-tvos-darwin"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "$(get_target_cpu)-xros-darwin"
fi fi
;; ;;
arm64-v8a) arm64-v8a)
@ -568,6 +586,8 @@ get_host() {
echo "$(get_target_cpu)-apple-darwin" echo "$(get_target_cpu)-apple-darwin"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]]; then
echo "$(get_target_cpu)-tvos-darwin" echo "$(get_target_cpu)-tvos-darwin"
elif [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]]; then
echo "$(get_target_cpu)-xros-darwin"
fi fi
;; ;;
x86) x86)
@ -1046,7 +1066,7 @@ set_library() {
fi fi
case $1 in case $1 in
android-zlib | ios-zlib | linux-zlib | macos-zlib | tvos-zlib) android-zlib | ios-zlib | linux-zlib | macos-zlib | tvos-zlib | xros-zlib)
ENABLED_LIBRARIES[LIBRARY_SYSTEM_ZLIB]=$2 ENABLED_LIBRARIES[LIBRARY_SYSTEM_ZLIB]=$2
;; ;;
linux-alsa) linux-alsa)
@ -1055,22 +1075,22 @@ set_library() {
android-media-codec) android-media-codec)
ENABLED_LIBRARIES[LIBRARY_ANDROID_MEDIA_CODEC]=$2 ENABLED_LIBRARIES[LIBRARY_ANDROID_MEDIA_CODEC]=$2
;; ;;
ios-audiotoolbox | macos-audiotoolbox | tvos-audiotoolbox) ios-audiotoolbox | macos-audiotoolbox | tvos-audiotoolbox | xros-audiotoolbox)
ENABLED_LIBRARIES[LIBRARY_APPLE_AUDIOTOOLBOX]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_AUDIOTOOLBOX]=$2
;; ;;
ios-bzip2 | macos-bzip2 | tvos-bzip2) ios-bzip2 | macos-bzip2 | tvos-bzip2 | xros-bzip2)
ENABLED_LIBRARIES[LIBRARY_APPLE_BZIP2]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_BZIP2]=$2
;; ;;
ios-videotoolbox | macos-videotoolbox | tvos-videotoolbox) ios-videotoolbox | macos-videotoolbox | tvos-videotoolbox | xros-videotoolbox)
ENABLED_LIBRARIES[LIBRARY_APPLE_VIDEOTOOLBOX]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_VIDEOTOOLBOX]=$2
;; ;;
ios-avfoundation | macos-avfoundation) ios-avfoundation | macos-avfoundation)
ENABLED_LIBRARIES[LIBRARY_APPLE_AVFOUNDATION]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_AVFOUNDATION]=$2
;; ;;
ios-libiconv | macos-libiconv | tvos-libiconv) ios-libiconv | macos-libiconv | tvos-libiconv | xros-libiconv)
ENABLED_LIBRARIES[LIBRARY_APPLE_LIBICONV]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_LIBICONV]=$2
;; ;;
ios-libuuid | macos-libuuid | tvos-libuuid) ios-libuuid | macos-libuuid | tvos-libuuid | xros-libuuid)
ENABLED_LIBRARIES[LIBRARY_APPLE_LIBUUID]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_LIBUUID]=$2
;; ;;
macos-coreimage) macos-coreimage)
@ -1379,14 +1399,14 @@ set_library() {
set_virtual_library() { set_virtual_library() {
case $1 in case $1 in
libiconv) libiconv)
if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "apple" ]]; then if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "apple" ]]; then
ENABLED_LIBRARIES[LIBRARY_APPLE_LIBICONV]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_LIBICONV]=$2
else else
ENABLED_LIBRARIES[LIBRARY_LIBICONV]=$2 ENABLED_LIBRARIES[LIBRARY_LIBICONV]=$2
fi fi
;; ;;
libuuid) libuuid)
if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "apple" ]]; then if [[ ${FFMPEG_KIT_BUILD_TYPE} == "ios" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "tvos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "xros" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "macos" ]] || [[ ${FFMPEG_KIT_BUILD_TYPE} == "apple" ]]; then
ENABLED_LIBRARIES[LIBRARY_APPLE_LIBUUID]=$2 ENABLED_LIBRARIES[LIBRARY_APPLE_LIBUUID]=$2
else else
ENABLED_LIBRARIES[LIBRARY_LIBUUID]=$2 ENABLED_LIBRARIES[LIBRARY_LIBUUID]=$2
@ -1831,6 +1851,9 @@ get_apple_cmake_system_name() {
tvos) tvos)
echo "tvOS" echo "tvOS"
;; ;;
xros)
echo "visionOS"
;;
*) *)
case ${ARCH} in case ${ARCH} in
*-mac-catalyst) *-mac-catalyst)

@ -0,0 +1,246 @@
#!/bin/bash
if [[ -z ${ARCH} ]]; then
echo -e "\n(*) ARCH not defined\n"
exit 1
fi
if [[ -z ${XROS_MIN_VERSION} ]]; then
echo -e "\n(*) XROS_MIN_VERSION not defined\n"
exit 1
fi
if [[ -z ${BASEDIR} ]]; then
echo -e "\n(*) BASEDIR not defined\n"
exit 1
fi
if [[ -z ${SDK_PATH} ]]; then
echo -e "\n(*) SDK_PATH not defined\n"
exit 1
fi
echo -e "\nBuilding ${ARCH} platform targeting visionOS SDK ${XROS_MIN_VERSION}\n"
echo -e "\nINFO: Starting new build for ${ARCH} targeting visionOS SDK ${XROS_MIN_VERSION} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1
# SET BASE INSTALLATION DIRECTORY FOR THIS ARCHITECTURE
export LIB_INSTALL_BASE="${BASEDIR}/prebuilt/$(get_build_directory)"
# CREATE PACKAGE CONFIG DIRECTORY FOR THIS ARCHITECTURE
PKG_CONFIG_DIRECTORY="${LIB_INSTALL_BASE}/pkgconfig"
if [ ! -d "${PKG_CONFIG_DIRECTORY}" ]; then
mkdir -p "${PKG_CONFIG_DIRECTORY}" || return 1
fi
# FILTER WHICH EXTERNAL LIBRARIES WILL BE BUILT
# NOTE THAT BUILT-IN LIBRARIES ARE FORWARDED TO FFMPEG SCRIPT WITHOUT ANY PROCESSING
enabled_library_list=()
for library in {1..50}; do
if [[ ${!library} -eq 1 ]]; then
ENABLED_LIBRARY=$(get_library_name $((library - 1)))
enabled_library_list+=(${ENABLED_LIBRARY})
echo -e "INFO: Enabled library ${ENABLED_LIBRARY} will be built\n" 1>>"${BASEDIR}"/build.log 2>&1
fi
done
# BUILD ENABLED LIBRARIES AND THEIR DEPENDENCIES
let completed=0
while [ ${#enabled_library_list[@]} -gt $completed ]; do
for library in "${enabled_library_list[@]}"; do
let run=0
case $library in
fontconfig)
if [[ $OK_expat -eq 1 ]] && [[ $OK_freetype -eq 1 ]]; then
run=1
fi
;;
freetype)
if [[ $OK_libpng -eq 1 ]]; then
run=1
fi
;;
gnutls)
if [[ $OK_nettle -eq 1 ]] && [[ $OK_gmp -eq 1 ]]; then
run=1
fi
;;
harfbuzz)
if [[ $OK_fontconfig -eq 1 ]] && [[ $OK_freetype -eq 1 ]]; then
run=1
fi
;;
leptonica)
if [[ $OK_giflib -eq 1 ]] && [[ $OK_jpeg -eq 1 ]] && [[ $OK_libpng -eq 1 ]] && [[ $OK_tiff -eq 1 ]] && [[ $OK_libwebp -eq 1 ]]; then
run=1
fi
;;
libass)
if [[ $OK_expat -eq 1 ]] && [[ $OK_freetype -eq 1 ]] && [[ $OK_fribidi -eq 1 ]] && [[ $OK_fontconfig -eq 1 ]] && [[ $OK_libpng -eq 1 ]] && [[ $OK_harfbuzz -eq 1 ]]; then
run=1
fi
;;
libtheora)
if [[ $OK_libvorbis -eq 1 ]] && [[ $OK_libogg -eq 1 ]]; then
run=1
fi
;;
libvorbis)
if [[ $OK_libogg -eq 1 ]]; then
run=1
fi
;;
libwebp)
if [[ $OK_giflib -eq 1 ]] && [[ $OK_jpeg -eq 1 ]] && [[ $OK_libpng -eq 1 ]] && [[ $OK_tiff -eq 1 ]]; then
run=1
fi
;;
nettle)
if [[ $OK_gmp -eq 1 ]]; then
run=1
fi
;;
rubberband)
if [[ $OK_libsndfile -eq 1 ]] && [[ $OK_libsamplerate -eq 1 ]]; then
run=1
fi
;;
srt)
if [[ $OK_openssl -eq 1 ]]; then
run=1
fi
;;
tesseract)
if [[ $OK_leptonica -eq 1 ]]; then
run=1
fi
;;
tiff)
if [[ $OK_jpeg -eq 1 ]]; then
run=1
fi
;;
twolame)
if [[ $OK_libsndfile -eq 1 ]]; then
run=1
fi
;;
*)
run=1
;;
esac
BUILD_COMPLETED_FLAG=$(echo "OK_${library}" | sed "s/\-/\_/g")
REBUILD_FLAG=$(echo "REBUILD_${library}" | sed "s/\-/\_/g")
DEPENDENCY_REBUILT_FLAG=$(echo "DEPENDENCY_REBUILT_${library}" | sed "s/\-/\_/g")
if [[ $run -eq 1 ]] && [[ "${!BUILD_COMPLETED_FLAG}" != "1" ]]; then
LIBRARY_IS_INSTALLED=$(library_is_installed "${LIB_INSTALL_BASE}" "${library}")
echo -e "INFO: Flags detected for ${library}: already installed=${LIBRARY_IS_INSTALLED}, rebuild requested by user=${!REBUILD_FLAG}, will be rebuilt due to dependency update=${!DEPENDENCY_REBUILT_FLAG}\n" 1>>"${BASEDIR}"/build.log 2>&1
# CHECK IF BUILD IS NECESSARY OR NOT
if [[ ${LIBRARY_IS_INSTALLED} -ne 1 ]] || [[ ${!REBUILD_FLAG} -eq 1 ]] || [[ ${!DEPENDENCY_REBUILT_FLAG} -eq 1 ]]; then
echo -n "${library}: "
"${BASEDIR}"/scripts/run-apple.sh "${library}" 1>>"${BASEDIR}"/build.log 2>&1
RC=$?
# SET SOME FLAGS AFTER THE BUILD
if [ $RC -eq 0 ]; then
((completed += 1))
declare "$BUILD_COMPLETED_FLAG=1"
check_if_dependency_rebuilt "${library}"
echo "ok"
elif [ $RC -eq 200 ]; then
echo -e "not supported\n\nSee build.log for details\n"
exit 1
else
echo -e "failed\n\nSee build.log for details\n"
exit 1
fi
else
((completed += 1))
declare "$BUILD_COMPLETED_FLAG=1"
echo "${library}: already built"
fi
else
echo -e "INFO: Skipping $library, dependencies built=$run, already built=${!BUILD_COMPLETED_FLAG}\n" 1>>"${BASEDIR}"/build.log 2>&1
fi
done
done
# BUILD CUSTOM LIBRARIES
for custom_library_index in "${CUSTOM_LIBRARIES[@]}"; do
library_name="CUSTOM_LIBRARY_${custom_library_index}_NAME"
echo -e "\nDEBUG: Custom library ${!library_name} will be built\n" 1>>"${BASEDIR}"/build.log 2>&1
# DEFINE SOME FLAGS TO REBUILD OPTIONS
REBUILD_FLAG=$(echo "REBUILD_${!library_name}" | sed "s/\-/\_/g")
LIBRARY_IS_INSTALLED=$(library_is_installed "${LIB_INSTALL_BASE}" "${!library_name}")
echo -e "INFO: Flags detected for custom library ${!library_name}: already installed=${LIBRARY_IS_INSTALLED}, rebuild requested by user=${!REBUILD_FLAG}\n" 1>>"${BASEDIR}"/build.log 2>&1
if [[ ${LIBRARY_IS_INSTALLED} -ne 1 ]] || [[ ${!REBUILD_FLAG} -eq 1 ]]; then
echo -n "${!library_name}: "
"${BASEDIR}"/scripts/run-apple.sh "${!library_name}" 1>>"${BASEDIR}"/build.log 2>&1
RC=$?
# SET SOME FLAGS AFTER THE BUILD
if [ $RC -eq 0 ]; then
echo "ok"
elif [ $RC -eq 200 ]; then
echo -e "not supported\n\nSee build.log for details\n"
exit 1
else
echo -e "failed\n\nSee build.log for details\n"
exit 1
fi
else
echo "${!library_name}: already built"
fi
done
# SKIP TO SPEED UP THE BUILD
if [[ ${SKIP_ffmpeg} -ne 1 ]]; then
# PREPARE PATHS & DEFINE ${INSTALL_PKG_CONFIG_DIR}
LIB_NAME="ffmpeg"
set_toolchain_paths "${LIB_NAME}"
# SET BUILD FLAGS
HOST=$(get_host)
export CFLAGS=$(get_cflags "${LIB_NAME}")
export CXXFLAGS=$(get_cxxflags "${LIB_NAME}")
export LDFLAGS=$(get_ldflags "${LIB_NAME}")
export PKG_CONFIG_LIBDIR="${INSTALL_PKG_CONFIG_DIR}"
cd "${BASEDIR}"/src/"${LIB_NAME}" 1>>"${BASEDIR}"/build.log 2>&1 || return 1
LIB_INSTALL_PREFIX="${LIB_INSTALL_BASE}/${LIB_NAME}"
# BUILD FFMPEG
source "${BASEDIR}"/scripts/apple/ffmpeg.sh
if [[ $? -ne 0 ]]; then
exit 1
fi
else
echo -e "\nffmpeg: skipped"
fi
# SKIP TO SPEED UP THE BUILD
if [[ ${SKIP_ffmpeg_kit} -ne 1 ]]; then
# BUILD FFMPEG
. "${BASEDIR}"/scripts/apple/ffmpeg-kit.sh "$@" || return 1
else
echo -e "\nffmpeg-kit: skipped"
fi
echo -e "\nINFO: Completed build for ${ARCH} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1

@ -7,7 +7,7 @@ export FFMPEG_KIT_TMPDIR="${BASEDIR}/.tmp"
ENABLED_ARCHITECTURES=(0 0 0 0 0 0 0 0 0 0 0 0 0) ENABLED_ARCHITECTURES=(0 0 0 0 0 0 0 0 0 0 0 0 0)
# ARRAY OF ENABLED ARCHITECTURE VARIANTS # ARRAY OF ENABLED ARCHITECTURE VARIANTS
ENABLED_ARCHITECTURE_VARIANTS=(0 0 0 0 0 0 0 0) ENABLED_ARCHITECTURE_VARIANTS=(0 0 0 0 0 0 0 0 0 0)
# ARRAY OF ENABLED LIBRARIES # ARRAY OF ENABLED LIBRARIES
ENABLED_LIBRARIES=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) ENABLED_LIBRARIES=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
@ -30,14 +30,14 @@ ARCH_ARM_V7A_NEON=1 # android
ARCH_ARMV7=2 # ios ARCH_ARMV7=2 # ios
ARCH_ARMV7S=3 # ios ARCH_ARMV7S=3 # ios
ARCH_ARM64_V8A=4 # android ARCH_ARM64_V8A=4 # android
ARCH_ARM64=5 # ios, tvos, macos ARCH_ARM64=5 # ios, tvos, xros, macos
ARCH_ARM64E=6 # ios ARCH_ARM64E=6 # ios
ARCH_I386=7 # ios ARCH_I386=7 # ios
ARCH_X86=8 # android ARCH_X86=8 # android
ARCH_X86_64=9 # android, ios, linux, macos, tvos ARCH_X86_64=9 # android, ios, linux, macos, tvos
ARCH_X86_64_MAC_CATALYST=10 # ios ARCH_X86_64_MAC_CATALYST=10 # ios
ARCH_ARM64_MAC_CATALYST=11 # ios ARCH_ARM64_MAC_CATALYST=11 # ios
ARCH_ARM64_SIMULATOR=12 # ios ARCH_ARM64_SIMULATOR=12 # ios, xros
# ARCH VARIANT INDEXES # ARCH VARIANT INDEXES
ARCH_VAR_IOS=1 # ios ARCH_VAR_IOS=1 # ios
@ -48,6 +48,8 @@ ARCH_VAR_TVOS=5 # tvos
ARCH_VAR_APPLETVOS=6 # tvos ARCH_VAR_APPLETVOS=6 # tvos
ARCH_VAR_APPLETVSIMULATOR=7 # tvos ARCH_VAR_APPLETVSIMULATOR=7 # tvos
ARCH_VAR_MACOS=8 # macos ARCH_VAR_MACOS=8 # macos
ARCH_VAR_XROS=9 # xros
ARCH_VAR_XRSIMULATOR=10 # xros
# LIBRARY INDEXES # LIBRARY INDEXES
LIBRARY_FONTCONFIG=0 LIBRARY_FONTCONFIG=0

@ -0,0 +1,285 @@
#!/bin/bash
# CHECK IF XCODE IS INSTALLED
if [ ! -x "$(command -v xcrun)" ]; then
echo -e "\n(*) xcrun command not found. Please check your Xcode installation\n"
exit 1
fi
if [ ! -x "$(command -v xcodebuild)" ]; then
echo -e "\n(*) xcodebuild command not found. Please check your Xcode installation\n"
exit 1
fi
# LOAD INITIAL SETTINGS
export BASEDIR="$(pwd)"
export FFMPEG_KIT_BUILD_TYPE="xros"
source "${BASEDIR}"/scripts/variable.sh
source "${BASEDIR}"/scripts/function-${FFMPEG_KIT_BUILD_TYPE}.sh
disabled_libraries=()
# SET DEFAULTS SETTINGS
enable_default_xros_architectures
# SELECT XCODE VERSION USED FOR BUILDING
XCODE_FOR_FFMPEG_KIT=$(ls ~/.xcode.for.ffmpeg.kit.sh 2>>"${BASEDIR}"/build.log)
if [[ -f ${XCODE_FOR_FFMPEG_KIT} ]]; then
source "${XCODE_FOR_FFMPEG_KIT}" 1>>"${BASEDIR}"/build.log 2>&1
fi
# DETECT XROS SDK VERSION
export DETECTED_XROS_SDK_VERSION="$(xcrun --sdk xros --show-sdk-version 2>>${BASEDIR}/build.log)"
echo -e "\nINFO: Using SDK ${DETECTED_XROS_SDK_VERSION} by Xcode provided at $(xcode-select -p)\n" 1>>"${BASEDIR}"/build.log 2>&1
echo -e "\nINFO: Build options: $*\n" 1>>"${BASEDIR}"/build.log 2>&1
# SET DEFAULT BUILD OPTIONS
export GPL_ENABLED="no"
DISPLAY_HELP=""
BUILD_TYPE_ID=""
BUILD_FULL=""
FFMPEG_KIT_XCF_BUILD=""
BUILD_FORCE=""
BUILD_VERSION=$(git describe --tags --always 2>>"${BASEDIR}"/build.log)
if [[ -z ${BUILD_VERSION} ]]; then
echo -e "\n(*): Can not run git commands in this folder. See build.log.\n"
exit 1
fi
# MAIN BUILDS ENABLED BY DEFAULT
enable_main_build
# PROCESS LTS BUILD OPTION FIRST AND SET BUILD TYPE: MAIN OR LTS
for argument in "$@"; do
if [[ "$argument" == "-l" ]] || [[ "$argument" == "--lts" ]]; then
enable_lts_build
BUILD_TYPE_ID+="LTS "
fi
done
# PROCESS BUILD OPTIONS
while [ ! $# -eq 0 ]; do
case $1 in
-h | --help)
DISPLAY_HELP="1"
;;
-v | --version)
display_version
exit 0
;;
--skip-*)
SKIP_LIBRARY=$(echo "$1" | sed -e 's/^--[A-Za-z]*-//g')
skip_library "${SKIP_LIBRARY}"
;;
--no-bitcode)
export NO_BITCODE="1"
;;
--no-framework)
NO_FRAMEWORK="1"
;;
--no-output-redirection)
no_output_redirection
;;
--no-workspace-cleanup-*)
NO_WORKSPACE_CLEANUP_LIBRARY=$(echo $1 | sed -e 's/^--[A-Za-z]*-[A-Za-z]*-[A-Za-z]*-//g')
no_workspace_cleanup_library "${NO_WORKSPACE_CLEANUP_LIBRARY}"
;;
-d | --debug)
enable_debug
;;
-s | --speed)
optimize_for_speed
;;
-l | --lts) ;;
-x | --xcframework)
FFMPEG_KIT_XCF_BUILD="1"
;;
-f | --force)
export BUILD_FORCE="1"
;;
--reconf-*)
CONF_LIBRARY=$(echo $1 | sed -e 's/^--[A-Za-z]*-//g')
reconf_library "${CONF_LIBRARY}"
;;
--rebuild-*)
BUILD_LIBRARY=$(echo $1 | sed -e 's/^--[A-Za-z]*-//g')
rebuild_library "${BUILD_LIBRARY}"
;;
--redownload-*)
DOWNLOAD_LIBRARY=$(echo $1 | sed -e 's/^--[A-Za-z]*-//g')
redownload_library "${DOWNLOAD_LIBRARY}"
;;
--full)
BUILD_FULL="1"
;;
--enable-gpl)
export GPL_ENABLED="yes"
;;
--enable-custom-library-*)
CUSTOM_LIBRARY_OPTION_KEY=$(echo $1 | sed -e 's/^--enable-custom-//g;s/=.*$//g')
CUSTOM_LIBRARY_OPTION_VALUE=$(echo $1 | sed -e 's/^--enable-custom-.*=//g')
echo -e "INFO: Custom library options detected: ${CUSTOM_LIBRARY_OPTION_KEY} ${CUSTOM_LIBRARY_OPTION_VALUE}\n" 1>>"${BASEDIR}"/build.log 2>&1
generate_custom_library_environment_variables "${CUSTOM_LIBRARY_OPTION_KEY}" "${CUSTOM_LIBRARY_OPTION_VALUE}"
;;
--enable-*)
ENABLED_LIBRARY=$(echo $1 | sed -e 's/^--[A-Za-z]*-//g')
enable_library "${ENABLED_LIBRARY}"
;;
--disable-lib-*)
DISABLED_LIB=$(echo $1 | sed -e 's/^--[A-Za-z]*-[A-Za-z]*-//g')
disabled_libraries+=("${DISABLED_LIB}")
;;
--disable-*)
DISABLED_ARCH=$(echo $1 | sed -e 's/^--[A-Za-z]*-//g')
disable_arch "${DISABLED_ARCH}"
;;
--target=*)
TARGET=$(echo $1 | sed -e 's/^--[A-Za-z]*=//g')
export XROS_MIN_VERSION=${TARGET}
;;
*)
print_unknown_option "$1"
;;
esac
shift
done
# PROCESS FULL OPTION AS LAST OPTION
if [[ -n ${BUILD_FULL} ]]; then
for library in {0..61}; do
if [ ${GPL_ENABLED} == "yes" ]; then
enable_library "$(get_library_name "$library")" 1
else
if [[ $(is_gpl_licensed "$library") -eq 1 ]]; then
enable_library "$(get_library_name "$library")" 1
fi
fi
done
fi
# DISABLE SPECIFIED LIBRARIES
for disabled_library in ${disabled_libraries[@]}; do
set_library "${disabled_library}" 0
done
# IF HELP DISPLAYED EXIT
if [[ -n ${DISPLAY_HELP} ]]; then
display_help
exit 0
fi
# DISABLE NOT SUPPORTED ARCHITECTURES
disable_xros_architecture_not_supported_on_detected_sdk_version "${ARCH_ARM64_SIMULATOR}"
# CHECK SOME RULES FOR .framework BUNDLES
# 1. DISABLE arm64-simulator WHEN arm64 IS ENABLED IN framework BUNDLES
if [[ ${NO_FRAMEWORK} -ne 1 ]] && [[ -z ${FFMPEG_KIT_XCF_BUILD} ]] && [[ ${ENABLED_ARCHITECTURES[${ARCH_ARM64}]} -eq 1 ]] && [[ ${ENABLED_ARCHITECTURES[${ARCH_ARM64_SIMULATOR}]} -eq 1 ]]; then
echo -e "INFO: Disabled arm64-simulator architecture which cannot co-exist with arm64 in the same framework bundle.\n" 1>>"${BASEDIR}"/build.log 2>&1
disable_arch "arm64-simulator"
fi
echo -e "\nBuilding ffmpeg-kit ${BUILD_TYPE_ID}shared library for visionOS\n"
echo -e -n "INFO: Building ffmpeg-kit ${BUILD_VERSION} ${BUILD_TYPE_ID}for visionOS: " 1>>"${BASEDIR}"/build.log 2>&1
echo -e "$(date)\n" 1>>"${BASEDIR}"/build.log 2>&1
# PRINT BUILD SUMMARY
print_enabled_architectures
print_enabled_libraries
print_reconfigure_requested_libraries
print_rebuild_requested_libraries
print_redownload_requested_libraries
print_custom_libraries
# VALIDATE GPL FLAGS
for gpl_library in {$LIBRARY_X264,$LIBRARY_XVIDCORE,$LIBRARY_X265,$LIBRARY_LIBVIDSTAB,$LIBRARY_RUBBERBAND}; do
if [[ ${ENABLED_LIBRARIES[$gpl_library]} -eq 1 ]]; then
library_name=$(get_library_name "${gpl_library}")
if [ ${GPL_ENABLED} != "yes" ]; then
echo -e "\n(*) Invalid configuration detected. GPL library ${library_name} enabled without --enable-gpl flag.\n"
echo -e "\n(*) Invalid configuration detected. GPL library ${library_name} enabled without --enable-gpl flag.\n" 1>>"${BASEDIR}"/build.log 2>&1
exit 1
fi
fi
done
echo -n -e "\nDownloading sources: "
echo -e "INFO: Downloading the source code of ffmpeg and external libraries.\n" 1>>"${BASEDIR}"/build.log 2>&1
# DOWNLOAD GNU CONFIG
download_gnu_config
# DOWNLOAD LIBRARY SOURCES
downloaded_library_sources "${ENABLED_LIBRARIES[@]}"
# THIS WILL SAVE ARCHITECTURES TO BUILD
TARGET_ARCH_LIST=()
# BUILD ENABLED LIBRARIES ON ENABLED ARCHITECTURES
for run_arch in {0..12}; do
if [[ ${ENABLED_ARCHITECTURES[$run_arch]} -eq 1 ]]; then
export ARCH=$(get_arch_name "$run_arch")
export FULL_ARCH=$(get_full_arch_name "$run_arch")
export SDK_PATH=$(get_sdk_path)
export SDK_NAME=$(get_sdk_name)
# EXECUTE MAIN BUILD SCRIPT
. "${BASEDIR}"/scripts/main-xros.sh "${ENABLED_LIBRARIES[@]}"
TARGET_ARCH_LIST+=("${FULL_ARCH}")
# CLEAR FLAGS
for library in {0..61}; do
library_name=$(get_library_name "${library}")
unset "$(echo "OK_${library_name}" | sed "s/\-/\_/g")"
unset "$(echo "DEPENDENCY_REBUILT_${library_name}" | sed "s/\-/\_/g")"
done
fi
done
echo -e -n "\n"
# DO NOT BUILD FRAMEWORKS
if [[ ${NO_FRAMEWORK} -ne 1 ]]; then
# BUILD FFMPEG-KIT
if [[ -n ${TARGET_ARCH_LIST[0]} ]]; then
# INITIALIZE TARGET FOLDERS
initialize_prebuilt_xros_folders
# PREPARE PLATFORM ARCHITECTURE STRINGS
build_apple_architecture_variant_strings
if [[ -n ${FFMPEG_KIT_XCF_BUILD} ]]; then
echo -e -n "\nCreating xcframeworks under prebuilt: "
create_universal_libraries_for_xros_xcframeworks
create_frameworks_for_xros_xcframeworks
create_xros_xcframeworks
else
echo -e -n "\nCreating frameworks under prebuilt: "
create_universal_libraries_for_xros_default_frameworks
create_xros_default_frameworks
fi
echo -e "ok\n"
fi
else
echo -e "INFO: Skipped creating visionOS frameworks.\n" 1>>"${BASEDIR}"/build.log 2>&1
fi
Loading…
Cancel
Save