inherit common

# Performs an iOS-style build.
# $1 arch name for compiler, work_dir and install_dir.
# $2 platform (either iPhoneOS or iPhoneSimulator)
build_ios() {
    # Put the source in the working directory:
    top_work_dir=$work_dir
    work_dir=$work_dir/ios-$1_$2
    mkdir -p $work_dir
    unpack

    # Establish expected variables:
    target=ios-$1-$2
    install_dir=$build_dir/prefix/ios/$1_$2

    case $1 in
    arm*)   cross=arm-apple-darwin10 ;;
    i386)   cross=i386-apple-darwin10 ;;
    x86_64) cross=x86_64-apple-darwin10 ;;
    esac

    # Locate Xcode build tools:
    xcode_dir=$(xcode-select -print-path | sed -e 's@/$@@')
    platform_dir=$xcode_dir/Platforms/${2}.platform/Developer

    export AR="ar"
    export CC="clang"
    export CCLD="clang"
    export CPP="clang -E"
    export CXX="clang++"

    case $2 in
        iPhoneSimulator) version_flag='-mios-simulator-version-min=10.0' ;;
        *) version_flag='-miphoneos-version-min=10.0' ;;
    esac


    platform_sdk="$platform_dir/SDKs/${2}.sdk"
    sdk_flags="-arch $1 -isysroot $platform_sdk $version_flag -O2 -maes"
    export SDKROOT=$platform_sdk # https://cmake.org/cmake/help/latest/variable/CMAKE_OSX_SYSROOT.html
    export CFLAGS="$sdk_flags -isystem${install_dir}/include -Werror=partial-availability"
    export CXXFLAGS="$sdk_flags -isystem${install_dir}/include -Werror=partial-availability"
    export LDFLAGS="$sdk_flags -L${install_dir}/lib"

    export PATH=$xcode_dir/Toolchains/XcodeDefault.xctoolchain/usr/bin:$xcode_dir/usr/bin:$PATH
    export PKG_CONFIG_PATH=$install_dir/lib/pkgconfig

    cd $work_dir
    build

    unset SDKROOT

    # File lists:
    ([ -n "$lib" ] && (cd $install_dir; find $lib -type f) || true) > \
        $top_work_dir/lib-${target}.txt
    ([ -n "$include" ] && (cd $install_dir; find $include -type f) || true) > \
        $top_work_dir/include-${target}.txt
}
build_ios_armv7_iPhoneOS() {
    build_ios armv7 iPhoneOS
}
build_ios_armv7s_iPhoneOS() {
    build_ios armv7s iPhoneOS
}
build_ios_arm64_iPhoneOS() {
    build_ios arm64 iPhoneOS
}
build_ios_arm64_iPhoneSimulator() {
    build_ios arm64 iPhoneSimulator
}
build_ios_i386_iPhoneSimulator() {
    build_ios i386 iPhoneSimulator
}
build_ios_x86_64_iPhoneSimulator() {
    build_ios x86_64 iPhoneSimulator
}

architectures="i386 x86_64 arm64 armv7 armv7s"
platforms="iPhoneOS iPhoneSimulator"

simulatorTarges="arm64_iPhoneSimulator i386_iPhoneSimulator x86_64_iPhoneSimulator"
iosTargets="armv7_iPhoneOS armv7s_iPhoneOS arm64_iPhoneOS"
arches="$iosTargets $simulatorTarges"

for arch in $arches ; do
    deps="download"
    for dep in $depends; do
        deps="$deps $dep.build-ios-$arch"
    done
    task build-ios-$arch $deps
done

package_ios_universal() {
    package_dir=${recipe}-ios-universal
    rm -rf $package_dir
    mkdir $package_dir
    depends=$(cat depends)

    in_libs=$(echo $build_dir/prefix/ios/arm64_iPhoneOS/lib/*.a)
    for l in $in_libs; do
        filename=$(basename $l)
        rm -rf $package_dir/$filename.xcframework
        for platform in $platforms; do
            opts=""
            for arch in $architectures; do
                [[ -e $build_dir/prefix/ios/"$arch"_$platform/lib/$filename ]] && opts+="$build_dir/prefix/ios/"$arch"_$platform/lib/$filename "
            done
            mkdir -p $package_dir/$platform
            lipo -create $opts -output $package_dir/$platform/$filename
        done

        xcodebuildOpts=""
        for platform in $platforms; do
            xcodebuildOpts+="-library $package_dir/$platform/$filename "
        done

        xcodebuild -create-xcframework $xcodebuildOpts -output $package_dir/$filename.xcframework
    done

    # Gather headers:
    for f in $(cat include-ios-arm64-iPhoneOS.txt); do
        mkdir -p $(dirname $package_dir/$f)
        ln -vs $build_dir/prefix/ios/arm64_iPhoneOS/$f $package_dir/$f
    done

    # Make the archive:
    zip -r $recipe-ios-universal-$(date +%Y-%m-%d) $package_dir
}
task package-ios-universal write-deps $(for arch in $arches; do echo build-ios-$arch; done)

default=package-ios-universal
