| | #!/usr/bin/env bash
|
| |
|
| |
|
| | IOS_MIN_OS_VERSION=16.4
|
| | MACOS_MIN_OS_VERSION=13.3
|
| | VISIONOS_MIN_OS_VERSION=1.0
|
| | TVOS_MIN_OS_VERSION=16.4
|
| |
|
| | BUILD_SHARED_LIBS=OFF
|
| | LLAMA_BUILD_EXAMPLES=OFF
|
| | LLAMA_BUILD_TOOLS=OFF
|
| | LLAMA_BUILD_TESTS=OFF
|
| | LLAMA_BUILD_SERVER=OFF
|
| | GGML_METAL=ON
|
| | GGML_METAL_EMBED_LIBRARY=ON
|
| | GGML_BLAS_DEFAULT=ON
|
| | GGML_METAL_USE_BF16=ON
|
| | GGML_OPENMP=OFF
|
| |
|
| | COMMON_C_FLAGS="-Wno-macro-redefined -Wno-shorten-64-to-32 -Wno-unused-command-line-argument -g"
|
| | COMMON_CXX_FLAGS="-Wno-macro-redefined -Wno-shorten-64-to-32 -Wno-unused-command-line-argument -g"
|
| |
|
| |
|
| | COMMON_CMAKE_ARGS=(
|
| | -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=NO
|
| | -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY=""
|
| | -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO
|
| | -DCMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT="dwarf-with-dsym"
|
| | -DCMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS=YES
|
| | -DCMAKE_XCODE_ATTRIBUTE_COPY_PHASE_STRIP=NO
|
| | -DCMAKE_XCODE_ATTRIBUTE_STRIP_INSTALLED_PRODUCT=NO
|
| | -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml
|
| | -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
|
| | -DLLAMA_BUILD_EXAMPLES=${LLAMA_BUILD_EXAMPLES}
|
| | -DLLAMA_BUILD_TOOLS=${LLAMA_BUILD_TOOLS}
|
| | -DLLAMA_BUILD_TESTS=${LLAMA_BUILD_TESTS}
|
| | -DLLAMA_BUILD_SERVER=${LLAMA_BUILD_SERVER}
|
| | -DGGML_METAL_EMBED_LIBRARY=${GGML_METAL_EMBED_LIBRARY}
|
| | -DGGML_BLAS_DEFAULT=${GGML_BLAS_DEFAULT}
|
| | -DGGML_METAL=${GGML_METAL}
|
| | -DGGML_METAL_USE_BF16=${GGML_METAL_USE_BF16}
|
| | -DGGML_NATIVE=OFF
|
| | -DGGML_OPENMP=${GGML_OPENMP}
|
| | )
|
| |
|
| | check_required_tool() {
|
| | local tool=$1
|
| | local install_message=$2
|
| |
|
| | if ! command -v $tool &> /dev/null; then
|
| | echo "Error: $tool is required but not found."
|
| | echo "$install_message"
|
| | exit 1
|
| | fi
|
| | }
|
| | echo "Checking for required tools..."
|
| | check_required_tool "cmake" "Please install CMake 3.28.0 or later (brew install cmake)"
|
| | check_required_tool "xcrun" "Please install Xcode and Xcode Command Line Tools (xcode-select --install)"
|
| |
|
| | XCODE_VERSION=$(xcrun xcodebuild -version 2>/dev/null | head -n1 | awk '{ print $2 }')
|
| | MAJOR_VERSION=$(echo $XCODE_VERSION | cut -d. -f1)
|
| | MINOR_VERSION=$(echo $XCODE_VERSION | cut -d. -f2)
|
| | echo "Detected Xcode version: $XCODE_VERSION"
|
| |
|
| | set -e
|
| |
|
| |
|
| | rm -rf build-apple
|
| | rm -rf build-ios-sim
|
| | rm -rf build-ios-device
|
| | rm -rf build-macos
|
| | rm -rf build-visionos
|
| | rm -rf build-visionos-sim
|
| | rm -rf build-tvos-sim
|
| | rm -rf build-tvos-device
|
| |
|
| |
|
| | setup_framework_structure() {
|
| | local build_dir=$1
|
| | local min_os_version=$2
|
| | local platform=$3
|
| | local framework_name="llama"
|
| |
|
| | echo "Creating ${platform}-style framework structure for ${build_dir}"
|
| |
|
| | if [[ "$platform" == "macos" ]]; then
|
| |
|
| | mkdir -p ${build_dir}/framework/${framework_name}.framework/Versions/A/Headers
|
| | mkdir -p ${build_dir}/framework/${framework_name}.framework/Versions/A/Modules
|
| | mkdir -p ${build_dir}/framework/${framework_name}.framework/Versions/A/Resources
|
| |
|
| |
|
| | ln -sf A ${build_dir}/framework/${framework_name}.framework/Versions/Current
|
| | ln -sf Versions/Current/Headers ${build_dir}/framework/${framework_name}.framework/Headers
|
| | ln -sf Versions/Current/Modules ${build_dir}/framework/${framework_name}.framework/Modules
|
| | ln -sf Versions/Current/Resources ${build_dir}/framework/${framework_name}.framework/Resources
|
| | ln -sf Versions/Current/${framework_name} ${build_dir}/framework/${framework_name}.framework/${framework_name}
|
| |
|
| |
|
| | local header_path=${build_dir}/framework/${framework_name}.framework/Versions/A/Headers/
|
| | local module_path=${build_dir}/framework/${framework_name}.framework/Versions/A/Modules/
|
| | else
|
| |
|
| | mkdir -p ${build_dir}/framework/${framework_name}.framework/Headers
|
| | mkdir -p ${build_dir}/framework/${framework_name}.framework/Modules
|
| |
|
| |
|
| | rm -rf ${build_dir}/framework/${framework_name}.framework/Versions
|
| |
|
| |
|
| | local header_path=${build_dir}/framework/${framework_name}.framework/Headers/
|
| | local module_path=${build_dir}/framework/${framework_name}.framework/Modules/
|
| | fi
|
| |
|
| |
|
| | cp include/llama.h ${header_path}
|
| | cp ggml/include/ggml.h ${header_path}
|
| | cp ggml/include/ggml-opt.h ${header_path}
|
| | cp ggml/include/ggml-alloc.h ${header_path}
|
| | cp ggml/include/ggml-backend.h ${header_path}
|
| | cp ggml/include/ggml-metal.h ${header_path}
|
| | cp ggml/include/ggml-cpu.h ${header_path}
|
| | cp ggml/include/ggml-blas.h ${header_path}
|
| | cp ggml/include/gguf.h ${header_path}
|
| |
|
| |
|
| | cat > ${module_path}module.modulemap << EOF
|
| | framework module llama {
|
| | header "llama.h"
|
| | header "ggml.h"
|
| | header "ggml-alloc.h"
|
| | header "ggml-backend.h"
|
| | header "ggml-metal.h"
|
| | header "ggml-cpu.h"
|
| | header "ggml-blas.h"
|
| | header "gguf.h"
|
| |
|
| | link "c++"
|
| | link framework "Accelerate"
|
| | link framework "Metal"
|
| | link framework "Foundation"
|
| |
|
| | export *
|
| | }
|
| | EOF
|
| |
|
| |
|
| | local platform_name=""
|
| | local sdk_name=""
|
| | local supported_platform=""
|
| |
|
| | case "$platform" in
|
| | "ios")
|
| | platform_name="iphoneos"
|
| | sdk_name="iphoneos${min_os_version}"
|
| | supported_platform="iPhoneOS"
|
| | local plist_path="${build_dir}/framework/${framework_name}.framework/Info.plist"
|
| | local device_family=' <key>UIDeviceFamily</key>
|
| | <array>
|
| | <integer>1</integer>
|
| | <integer>2</integer>
|
| | </array>'
|
| | ;;
|
| | "macos")
|
| | platform_name="macosx"
|
| | sdk_name="macosx${min_os_version}"
|
| | supported_platform="MacOSX"
|
| | local plist_path="${build_dir}/framework/${framework_name}.framework/Versions/A/Resources/Info.plist"
|
| | local device_family=""
|
| | ;;
|
| | "visionos")
|
| | platform_name="xros"
|
| | sdk_name="xros${min_os_version}"
|
| | supported_platform="XRPlatform"
|
| | local plist_path="${build_dir}/framework/${framework_name}.framework/Info.plist"
|
| | local device_family=""
|
| | ;;
|
| | "tvos")
|
| | platform_name="appletvos"
|
| | sdk_name="appletvos${min_os_version}"
|
| | supported_platform="AppleTVOS"
|
| | local plist_path="${build_dir}/framework/${framework_name}.framework/Info.plist"
|
| | local device_family=' <key>UIDeviceFamily</key>
|
| | <array>
|
| | <integer>3</integer>
|
| | </array>'
|
| | ;;
|
| | esac
|
| |
|
| |
|
| | cat > ${plist_path} << EOF
|
| | <?xml version="1.0" encoding="UTF-8"?>
|
| | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
| | <plist version="1.0">
|
| | <dict>
|
| | <key>CFBundleDevelopmentRegion</key>
|
| | <string>en</string>
|
| | <key>CFBundleExecutable</key>
|
| | <string>llama</string>
|
| | <key>CFBundleIdentifier</key>
|
| | <string>org.ggml.llama</string>
|
| | <key>CFBundleInfoDictionaryVersion</key>
|
| | <string>6.0</string>
|
| | <key>CFBundleName</key>
|
| | <string>llama</string>
|
| | <key>CFBundlePackageType</key>
|
| | <string>FMWK</string>
|
| | <key>CFBundleShortVersionString</key>
|
| | <string>1.0</string>
|
| | <key>CFBundleVersion</key>
|
| | <string>1</string>
|
| | <key>MinimumOSVersion</key>
|
| | <string>${min_os_version}</string>
|
| | <key>CFBundleSupportedPlatforms</key>
|
| | <array>
|
| | <string>${supported_platform}</string>
|
| | </array>${device_family}
|
| | <key>DTPlatformName</key>
|
| | <string>${platform_name}</string>
|
| | <key>DTSDKName</key>
|
| | <string>${sdk_name}</string>
|
| | </dict>
|
| | </plist>
|
| | EOF
|
| | }
|
| |
|
| |
|
| | combine_static_libraries() {
|
| | local build_dir="$1"
|
| | local release_dir="$2"
|
| | local platform="$3"
|
| | local is_simulator="$4"
|
| | local base_dir="$(pwd)"
|
| | local framework_name="llama"
|
| |
|
| |
|
| | local output_lib=""
|
| | if [[ "$platform" == "macos" ]]; then
|
| |
|
| | output_lib="${build_dir}/framework/${framework_name}.framework/Versions/A/${framework_name}"
|
| | else
|
| |
|
| | output_lib="${build_dir}/framework/${framework_name}.framework/${framework_name}"
|
| | fi
|
| |
|
| | local libs=(
|
| | "${base_dir}/${build_dir}/src/${release_dir}/libllama.a"
|
| | "${base_dir}/${build_dir}/ggml/src/${release_dir}/libggml.a"
|
| | "${base_dir}/${build_dir}/ggml/src/${release_dir}/libggml-base.a"
|
| | "${base_dir}/${build_dir}/ggml/src/${release_dir}/libggml-cpu.a"
|
| | "${base_dir}/${build_dir}/ggml/src/ggml-metal/${release_dir}/libggml-metal.a"
|
| | "${base_dir}/${build_dir}/ggml/src/ggml-blas/${release_dir}/libggml-blas.a"
|
| | )
|
| |
|
| |
|
| | local temp_dir="${base_dir}/${build_dir}/temp"
|
| | mkdir -p "${temp_dir}"
|
| |
|
| |
|
| |
|
| | xcrun libtool -static -o "${temp_dir}/combined.a" "${libs[@]}" 2> /dev/null
|
| |
|
| |
|
| | local sdk=""
|
| | local archs=""
|
| | local min_version_flag=""
|
| | local install_name=""
|
| |
|
| | case "$platform" in
|
| | "ios")
|
| | if [[ "$is_simulator" == "true" ]]; then
|
| | sdk="iphonesimulator"
|
| | archs="arm64 x86_64"
|
| | min_version_flag="-mios-simulator-version-min=${IOS_MIN_OS_VERSION}"
|
| | else
|
| | sdk="iphoneos"
|
| | archs="arm64"
|
| | min_version_flag="-mios-version-min=${IOS_MIN_OS_VERSION}"
|
| | fi
|
| | install_name="@rpath/llama.framework/llama"
|
| | ;;
|
| | "macos")
|
| | sdk="macosx"
|
| | archs="arm64 x86_64"
|
| | min_version_flag="-mmacosx-version-min=${MACOS_MIN_OS_VERSION}"
|
| | install_name="@rpath/llama.framework/Versions/Current/llama"
|
| | ;;
|
| | "visionos")
|
| | if [[ "$is_simulator" == "true" ]]; then
|
| | sdk="xrsimulator"
|
| | archs="arm64 x86_64"
|
| | min_version_flag="-mtargetos=xros${VISIONOS_MIN_OS_VERSION}-simulator"
|
| | else
|
| | sdk="xros"
|
| | archs="arm64"
|
| | min_version_flag="-mtargetos=xros${VISIONOS_MIN_OS_VERSION}"
|
| | fi
|
| |
|
| | install_name="@rpath/llama.framework/llama"
|
| | ;;
|
| | "tvos")
|
| | if [[ "$is_simulator" == "true" ]]; then
|
| | sdk="appletvsimulator"
|
| | archs="arm64 x86_64"
|
| | min_version_flag="-mtvos-simulator-version-min=${TVOS_MIN_OS_VERSION}"
|
| | else
|
| | sdk="appletvos"
|
| | archs="arm64"
|
| | min_version_flag="-mtvos-version-min=${TVOS_MIN_OS_VERSION}"
|
| | fi
|
| | install_name="@rpath/llama.framework/llama"
|
| | ;;
|
| | esac
|
| |
|
| |
|
| | local arch_flags=""
|
| | for arch in $archs; do
|
| | arch_flags+=" -arch $arch"
|
| | done
|
| |
|
| |
|
| | echo "Creating dynamic library for ${platform}."
|
| | xcrun -sdk $sdk clang++ -dynamiclib \
|
| | -isysroot $(xcrun --sdk $sdk --show-sdk-path) \
|
| | $arch_flags \
|
| | $min_version_flag \
|
| | -Wl,-force_load,"${temp_dir}/combined.a" \
|
| | -framework Foundation -framework Metal -framework Accelerate \
|
| | -install_name "$install_name" \
|
| | -o "${base_dir}/${output_lib}"
|
| |
|
| |
|
| | if [[ "$is_simulator" == "false" ]]; then
|
| | if xcrun -f vtool &>/dev/null; then
|
| | case "$platform" in
|
| | "ios")
|
| | echo "Marking binary as a framework binary for iOS..."
|
| | xcrun vtool -set-build-version ios ${IOS_MIN_OS_VERSION} ${IOS_MIN_OS_VERSION} -replace \
|
| | -output "${base_dir}/${output_lib}" "${base_dir}/${output_lib}"
|
| | ;;
|
| | "visionos")
|
| | echo "Marking binary as a framework binary for visionOS..."
|
| | if [[ "$MAJOR_VERSION" -gt 16 ]] || [[ "$MAJOR_VERSION" -eq 16 && "$MINOR_VERSION" -gt 2 ]]; then
|
| | echo "Xcode version greater than 16.2, using visionOS."
|
| | VISION_OS_BUILD_VERSION="visionos"
|
| | else
|
| | echo "Xcode version less than or equal to 16.2, using xros."
|
| | VISION_OS_BUILD_VERSION="xros"
|
| | fi
|
| | xcrun vtool -set-build-version ${VISION_OS_BUILD_VERSION} ${VISIONOS_MIN_OS_VERSION} ${VISIONOS_MIN_OS_VERSION} -replace \
|
| | -output "${base_dir}/${output_lib}" "${base_dir}/${output_lib}"
|
| | ;;
|
| | "tvos")
|
| | echo "Marking binary as a framework binary for tvOS..."
|
| | xcrun vtool -set-build-version tvos ${TVOS_MIN_OS_VERSION} ${TVOS_MIN_OS_VERSION} -replace \
|
| | -output "${base_dir}/${output_lib}" "${base_dir}/${output_lib}"
|
| | ;;
|
| | esac
|
| | else
|
| | echo "Warning: vtool not found. Binary may not pass App Store validation."
|
| | fi
|
| | fi
|
| |
|
| | echo "Creating properly formatted dSYM..."
|
| |
|
| | mkdir -p "${base_dir}/${build_dir}/dSYMs"
|
| |
|
| |
|
| | if [[ "$platform" == "ios" || "$platform" == "visionos" || "$platform" == "tvos" ]]; then
|
| |
|
| | xcrun dsymutil "${base_dir}/${output_lib}" -o "${base_dir}/${build_dir}/dSYMs/llama.dSYM"
|
| |
|
| |
|
| | cp "${base_dir}/${output_lib}" "${temp_dir}/binary_to_strip"
|
| |
|
| |
|
| | xcrun strip -S "${temp_dir}/binary_to_strip" -o "${temp_dir}/stripped_lib"
|
| |
|
| |
|
| | mv "${temp_dir}/stripped_lib" "${base_dir}/${output_lib}"
|
| | else
|
| |
|
| |
|
| | xcrun strip -S "${base_dir}/${output_lib}" -o "${temp_dir}/stripped_lib"
|
| |
|
| |
|
| | xcrun dsymutil "${base_dir}/${output_lib}" -o "${base_dir}/${build_dir}/dSYMs/llama.dSYM"
|
| |
|
| |
|
| | mv "${temp_dir}/stripped_lib" "${base_dir}/${output_lib}"
|
| | fi
|
| |
|
| |
|
| |
|
| | if [ -d "${base_dir}/${output_lib}.dSYM" ]; then
|
| | echo "Removing generated dSYM file in framework structure: ${base_dir}/${output_lib}.dSYM"
|
| | rm -rf "${base_dir}/${output_lib}.dSYM"
|
| | fi
|
| |
|
| |
|
| | rm -rf "${temp_dir}"
|
| | }
|
| |
|
| | echo "Building for iOS simulator..."
|
| | cmake -B build-ios-sim -G Xcode \
|
| | "${COMMON_CMAKE_ARGS[@]}" \
|
| | -DCMAKE_OSX_DEPLOYMENT_TARGET=${IOS_MIN_OS_VERSION} \
|
| | -DIOS=ON \
|
| | -DCMAKE_SYSTEM_NAME=iOS \
|
| | -DCMAKE_OSX_SYSROOT=iphonesimulator \
|
| | -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
| | -DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=iphonesimulator \
|
| | -DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
| | -DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
| | -DLLAMA_OPENSSL=OFF \
|
| | -S .
|
| | cmake --build build-ios-sim --config Release -- -quiet
|
| |
|
| | echo "Building for iOS devices..."
|
| | cmake -B build-ios-device -G Xcode \
|
| | "${COMMON_CMAKE_ARGS[@]}" \
|
| | -DCMAKE_OSX_DEPLOYMENT_TARGET=${IOS_MIN_OS_VERSION} \
|
| | -DCMAKE_SYSTEM_NAME=iOS \
|
| | -DCMAKE_OSX_SYSROOT=iphoneos \
|
| | -DCMAKE_OSX_ARCHITECTURES="arm64" \
|
| | -DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=iphoneos \
|
| | -DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
| | -DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
| | -DLLAMA_OPENSSL=OFF \
|
| | -S .
|
| | cmake --build build-ios-device --config Release -- -quiet
|
| |
|
| | echo "Building for macOS..."
|
| | cmake -B build-macos -G Xcode \
|
| | "${COMMON_CMAKE_ARGS[@]}" \
|
| | -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOS_MIN_OS_VERSION} \
|
| | -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
| | -DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
| | -DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
| | -DLLAMA_OPENSSL=OFF \
|
| | -S .
|
| | cmake --build build-macos --config Release -- -quiet
|
| |
|
| | echo "Building for visionOS..."
|
| | cmake -B build-visionos -G Xcode \
|
| | "${COMMON_CMAKE_ARGS[@]}" \
|
| | -DCMAKE_OSX_DEPLOYMENT_TARGET=${VISIONOS_MIN_OS_VERSION} \
|
| | -DCMAKE_OSX_ARCHITECTURES="arm64" \
|
| | -DCMAKE_SYSTEM_NAME=visionOS \
|
| | -DCMAKE_OSX_SYSROOT=xros \
|
| | -DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=xros \
|
| | -DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
| | -DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
| | -DLLAMA_OPENSSL=OFF \
|
| | -DLLAMA_BUILD_SERVER=OFF \
|
| | -S .
|
| | cmake --build build-visionos --config Release -- -quiet
|
| |
|
| | echo "Building for visionOS simulator..."
|
| | cmake -B build-visionos-sim -G Xcode \
|
| | "${COMMON_CMAKE_ARGS[@]}" \
|
| | -DCMAKE_OSX_DEPLOYMENT_TARGET=${VISIONOS_MIN_OS_VERSION} \
|
| | -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
| | -DCMAKE_SYSTEM_NAME=visionOS \
|
| | -DCMAKE_OSX_SYSROOT=xrsimulator \
|
| | -DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=xrsimulator \
|
| | -DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
| | -DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
| | -DLLAMA_OPENSSL=OFF \
|
| | -DLLAMA_BUILD_SERVER=OFF \
|
| | -S .
|
| | cmake --build build-visionos-sim --config Release -- -quiet
|
| |
|
| |
|
| | echo "Building for tvOS simulator..."
|
| | cmake -B build-tvos-sim -G Xcode \
|
| | "${COMMON_CMAKE_ARGS[@]}" \
|
| | -DCMAKE_OSX_DEPLOYMENT_TARGET=${TVOS_MIN_OS_VERSION} \
|
| | -DCMAKE_SYSTEM_NAME=tvOS \
|
| | -DCMAKE_OSX_SYSROOT=appletvsimulator \
|
| | -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
| | -DGGML_METAL=ON \
|
| | -DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=appletvsimulator \
|
| | -DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
| | -DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
| | -DLLAMA_OPENSSL=OFF \
|
| | -S .
|
| | cmake --build build-tvos-sim --config Release -- -quiet
|
| |
|
| | echo "Building for tvOS devices..."
|
| | cmake -B build-tvos-device -G Xcode \
|
| | "${COMMON_CMAKE_ARGS[@]}" \
|
| | -DCMAKE_OSX_DEPLOYMENT_TARGET=${TVOS_MIN_OS_VERSION} \
|
| | -DCMAKE_SYSTEM_NAME=tvOS \
|
| | -DCMAKE_OSX_SYSROOT=appletvos \
|
| | -DCMAKE_OSX_ARCHITECTURES="arm64" \
|
| | -DGGML_METAL=ON \
|
| | -DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=appletvos \
|
| | -DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
| | -DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
| | -DLLAMA_OPENSSL=OFF \
|
| | -S .
|
| | cmake --build build-tvos-device --config Release -- -quiet
|
| |
|
| |
|
| | echo "Setting up framework structures..."
|
| | setup_framework_structure "build-ios-sim" ${IOS_MIN_OS_VERSION} "ios"
|
| | setup_framework_structure "build-ios-device" ${IOS_MIN_OS_VERSION} "ios"
|
| | setup_framework_structure "build-macos" ${MACOS_MIN_OS_VERSION} "macos"
|
| | setup_framework_structure "build-visionos" ${VISIONOS_MIN_OS_VERSION} "visionos"
|
| | setup_framework_structure "build-visionos-sim" ${VISIONOS_MIN_OS_VERSION} "visionos"
|
| | setup_framework_structure "build-tvos-sim" ${TVOS_MIN_OS_VERSION} "tvos"
|
| | setup_framework_structure "build-tvos-device" ${TVOS_MIN_OS_VERSION} "tvos"
|
| |
|
| |
|
| | echo "Creating dynamic libraries from static libraries..."
|
| | combine_static_libraries "build-ios-sim" "Release-iphonesimulator" "ios" "true"
|
| | combine_static_libraries "build-ios-device" "Release-iphoneos" "ios" "false"
|
| | combine_static_libraries "build-macos" "Release" "macos" "false"
|
| | combine_static_libraries "build-visionos" "Release-xros" "visionos" "false"
|
| | combine_static_libraries "build-visionos-sim" "Release-xrsimulator" "visionos" "true"
|
| | combine_static_libraries "build-tvos-sim" "Release-appletvsimulator" "tvos" "true"
|
| | combine_static_libraries "build-tvos-device" "Release-appletvos" "tvos" "false"
|
| |
|
| |
|
| | echo "Creating XCFramework..."
|
| | xcrun xcodebuild -create-xcframework \
|
| | -framework $(pwd)/build-ios-sim/framework/llama.framework \
|
| | -debug-symbols $(pwd)/build-ios-sim/dSYMs/llama.dSYM \
|
| | -framework $(pwd)/build-ios-device/framework/llama.framework \
|
| | -debug-symbols $(pwd)/build-ios-device/dSYMs/llama.dSYM \
|
| | -framework $(pwd)/build-macos/framework/llama.framework \
|
| | -debug-symbols $(pwd)/build-macos/dSYMs/llama.dSYM \
|
| | -framework $(pwd)/build-visionos/framework/llama.framework \
|
| | -debug-symbols $(pwd)/build-visionos/dSYMs/llama.dSYM \
|
| | -framework $(pwd)/build-visionos-sim/framework/llama.framework \
|
| | -debug-symbols $(pwd)/build-visionos-sim/dSYMs/llama.dSYM \
|
| | -framework $(pwd)/build-tvos-device/framework/llama.framework \
|
| | -debug-symbols $(pwd)/build-tvos-device/dSYMs/llama.dSYM \
|
| | -framework $(pwd)/build-tvos-sim/framework/llama.framework \
|
| | -debug-symbols $(pwd)/build-tvos-sim/dSYMs/llama.dSYM \
|
| | -output $(pwd)/build-apple/llama.xcframework
|
| |
|