#!/bin/bash # Reusable function to handle 'install' directory operations move_install_files() { local root_dir="$1" local install_dir="$root_dir/install" # Step 1: Check if the 'install' directory exists if [ ! -d "$install_dir" ]; then echo "Error: 'install' directory does not exist in $root_dir" exit 1 fi # Step 2: Delete all other files/folders except 'install' find "$root_dir" -mindepth 1 -maxdepth 1 -not -name "install" -exec rm -rf {} + # Step 3: Move all files from 'install' to the root directory mv "$install_dir"/* "$root_dir" 2>/dev/null # Step 4: Remove the empty 'install' directory rmdir "$install_dir" echo "Files from 'install' moved to $root_dir, and 'install' directory deleted." } # Define download URLs MNN_IOS_URL="https://github.com/alibaba/MNN/releases/download/2.8.1/mnn_2.8.1_ios_armv82_cpu_metal_coreml.zip" # Set the cache directory MACOS_CACHE="$PWD/.macos_cache/" # Create the directory if it does not exist mkdir -p "${MACOS_CACHE}" # Function to download and unzip a file if the required framework does not exist download_and_unzip() { local url=$1 local dir=$2 local framework_name=$3 # Name of the framework directory to check # Check if the framework already exists if [ ! -d "${dir}${framework_name}" ]; then local file_name=$(basename "$url") local full_path="${dir}${file_name}" # Check if the zip file already exists if [ ! -f "$full_path" ]; then echo "Downloading ${file_name}..." # Download the file curl -sL "$url" -o "$full_path" else echo "${file_name} already downloaded. Proceeding to unzip." fi # Unzip the file to a temporary directory echo "Unzipping ${file_name}..." unzip -q "$full_path" -d "${dir}" rm "$full_path" # Move the framework if it's in a subdirectory specific to the iOS build if [ "${framework_name}" == "MNN.framework" ]; then mv "${dir}ios_build/Release-iphoneos/${framework_name}" "${dir}" rm -rf "${dir}ios_build" # Clean up the subdirectory fi echo "${framework_name} has been set up." else echo "${framework_name} already exists in ${dir}. Skipping download and unzip." fi } # Download and unzip MNN iOS package download_and_unzip "$MNN_IOS_URL" "$MACOS_CACHE" "MNN.framework" # Download and unzip OpenCV iOS package if [ -n "$VERSION" ]; then TAG="-$VERSION" else TAG="" fi TOOLCHAIN="$PWD/toolchain/ios.toolchain.cmake" BUILD_DIR="build/inspireface-ios$TAG" mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" cmake \ -DIOS_3RDPARTY="${MACOS_CACHE}" \ -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} \ -DCMAKE_OSX_ARCHITECTURES=arm64 \ -DENABLE_BITCODE=0 \ -DIOS_DEPLOYMENT_TARGET=11.0 \ -DISF_BUILD_WITH_SAMPLE=OFF \ -DISF_BUILD_WITH_TEST=OFF \ -DISF_BUILD_SHARED_LIBS=OFF \ ../.. make -j8 make install move_install_files "$(pwd)" # Set the framework name FRAMEWORK_NAME=InspireFace # Specify the version of the framework FRAMEWORK_VERSION=1.0.0 # Root build directory BUILD_DIR="$(pwd)" BUILD_LIB_DIR="$BUILD_DIR/InspireFace" # Create the framework structure FRAMEWORK_DIR=$BUILD_DIR/$FRAMEWORK_NAME.framework mkdir -p $FRAMEWORK_DIR mkdir -p $FRAMEWORK_DIR/Headers mkdir -p $FRAMEWORK_DIR/Resources # Copy the static library to the framework directory cp $BUILD_LIB_DIR/lib/libInspireFace.a $FRAMEWORK_DIR/$FRAMEWORK_NAME # Copy header files to the framework's Headers directory cp $BUILD_LIB_DIR/include/*.h $FRAMEWORK_DIR/Headers/ # Create Info.plist cat <$FRAMEWORK_DIR/Resources/Info.plist CFBundleExecutable $FRAMEWORK_NAME CFBundleIdentifier com.example.$FRAMEWORK_NAME CFBundleName $FRAMEWORK_NAME CFBundleVersion $FRAMEWORK_VERSION CFBundleShortVersionString $FRAMEWORK_VERSION CFBundlePackageType FMWK EOF echo "Framework $FRAMEWORK_NAME.framework has been created at $FRAMEWORK_DIR" cp -r $MACOS_CACHE/MNN.framework $BUILD_DIR/