quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

package-ios.sh (4387B)


      1 #!/bin/bash
      2 set -eE
      3 shopt -s nullglob
      4 
      5 handle_error() {
      6     echo "$(tput bold)(!) An error has ocurred, please check the log files for more information.$(tput sgr0)"
      7     exit -1
      8 }
      9 
     10 trap handle_error ERR
     11 
     12 # Inspiration: https://github.com/stasel/WebRTC/blob/latest/scripts/build.sh
     13 
     14 targets=(
     15     iphoneos-arm64
     16     iphonesimulator-arm64
     17     iphonesimulator-x86_64
     18     # macosx-arm64
     19     # macosx-x86_64
     20 )
     21 
     22 contains_element() {
     23   local e match="$1"
     24   shift
     25   for e; do [[ "$e" == "$match" ]] && return 0; done
     26   return 1
     27 }
     28 
     29 build_static_monolith() {
     30     local folder="$1"
     31     local output="$2"
     32     rm -rf "${folder}/${output}"
     33     # exclude libraries that were compiled for the build machine or not necessary
     34     static_files=($(find "${folder}/" -name "*.[ao]" | grep -Ev 'native|qjsc'))
     35     libtool -static -o "${folder}/${output}" \
     36             "${static_files[@]}" > /dev/null 2>&1
     37 }
     38 
     39 base_build_folder="build-ios"
     40 build_folders=()
     41 
     42 # Build all targets
     43 build_targets() {
     44     mkdir -p "${base_build_folder}"
     45 
     46     for target in "${targets[@]}"; do
     47         sdk="${target%-*}"
     48         arch="${target#*-}"
     49         build_folder="${base_build_folder}/${sdk}-${arch}"
     50         build_folders+=("${build_folder}")
     51         log_file="${base_build_folder}/package-ios-${sdk}-${arch}.log"
     52         echo "$(tput bold)(!) Now building for $sdk $arch... (logs written to ${log_file})$(tput sgr0)"
     53         ./cross/build-ios.sh $sdk $arch > "${log_file}" 2>&1
     54         build_pids+=("$!")
     55     done
     56 }
     57 
     58 include_dir="${base_build_folder}/include"
     59 
     60 # Copy headers
     61 copy_headers() {
     62     [ -d "${include_dir}" ] && rm -r "${include_dir}"
     63     mkdir -p "${include_dir}"
     64     mkdir -p "${include_dir}/quickjs"
     65     cp -r "taler_wallet_core_lib.h" "${include_dir}"
     66     cp -r "quickjs/quickjs.h" "${include_dir}/quickjs"
     67     cp -r "quickjs/quickjs-http.h" "${include_dir}/quickjs"
     68     cp -r xcode/*.h "${include_dir}"
     69     cp -r "xcode/module.modulemap" "${include_dir}"
     70 }
     71 
     72 library="FTalerWalletcore.a"
     73 library_name="FTalerWalletcore"
     74 
     75 # Package all libraries into .xcframework
     76 package_frameworks() {
     77     echo "$(tput bold)(!) Now generating ${library_name}.xcframework...$(tput sgr0)"
     78 
     79     xcodebuild_flags=()
     80     xcframework_dir="${base_build_folder}/${library_name}.xcframework"
     81     rm -rf "${xcframework_dir}"
     82 
     83     headers_flag=(-headers "${include_dir}")
     84 
     85     # iphoneos
     86     if contains_element "iphoneos-arm64" "${targets[@]}"; then
     87         build_static_monolith "${base_build_folder}/iphoneos-arm64" "${library}"
     88         xcodebuild_flags+=(
     89             -library "${base_build_folder}/iphoneos-arm64/${library}"
     90             "${headers_flag[@]}")
     91     fi
     92 
     93     # iphonesimulator
     94     if contains_element "iphonesimulator-x86_64" "${targets[@]}" &&
     95             contains_element "iphonesimulator-arm64" "${targets[@]}"; then
     96         build_static_monolith "${base_build_folder}/iphonesimulator-x86_64" "${library}"
     97         build_static_monolith "${base_build_folder}/iphonesimulator-arm64" "${library}"
     98         universal_output="${base_build_folder}/iphonesimulator-universal"
     99         mkdir -p "${universal_output}"
    100         lipo "${base_build_folder}/iphonesimulator-x86_64/${library}" \
    101              "${base_build_folder}/iphonesimulator-arm64/${library}" \
    102              -output "${universal_output}/${library}" -create
    103         xcodebuild_flags+=(
    104             -library "${universal_output}/${library}"
    105             "${headers_flag[@]}")
    106     fi
    107 
    108     # macosx
    109     if contains_element "macosx-x86_64" "${targets[@]}" &&
    110             contains_element "macosx-arm64" "${targets[@]}"; then
    111         build_static_monolith "${base_build_folder}/macosx-x86_64" "${library}"
    112         build_static_monolith "${base_build_folder}/macosx-arm64" "${library}"
    113         universal_output="${base_build_dir}/macosx-universal"
    114         mkdir -p "${universal_output}"
    115         lipo "${base_build_folder}/macosx-x86_64/${library}" \
    116              "${base_build_folder}/macosx-arm64/${library}" \
    117              -output "${universal_output}/${library}" -create
    118         xcodebuild_flags+=(
    119             -library "${universal_output}/${library}"
    120             "${headers_flag[@]}")
    121     fi
    122 
    123     xcodebuild -create-xcframework \
    124                "${xcodebuild_flags[@]}" \
    125                -output "${xcframework_dir}"
    126 
    127     echo "$(tput bold)(!) File ${xcframework_dir} has been generated successfully!$(tput sgr0)"
    128 }
    129 
    130 build_targets
    131 copy_headers
    132 package_frameworks