#!/bin/zsh
# Build THEM Open CASCADE DataExchange (STEP) cho iOS thanh thu vien RIENG libOCCTDE.a — KHONG dong vao libOCCT.a da co (khong doi ABI / khong build lai app).
# Can: ApplicationFramework (XCAF) + Visualization (TKService / TKV3d, khong OpenGL / FreeType) vi TKDESTEP phu thuoc TKXCAF.
#
#   Scripts/build-occt-de-ios.sh sim | device
#
# Ket qua: ThirdParty/occt-ios/<sim|device>/libOCCTDE.a (chi cac TK chua co trong libOCCT.a) + header moi gop vao .../inc.
set -euo pipefail
GOC=${0:A:h:h}
SRC=$GOC/ThirdParty/occt-src
OUT=$GOC/ThirdParty/occt-ios
IOS_MIN=17.0
JOBS=${JOBS:-$(sysctl -n hw.ncpu)}
TARGETS=(TKDE TKXSBase TKDESTEP TKDESTL TKXCAF TKCAF TKLCAF TKCDF TKVCAF TKService TKV3d TKBO TKShHealing)

build_mot() {
  local ten=$1 sdk=$2
  local bld=$GOC/ThirdParty/occt-build-de-$ten dst=$OUT/$ten
  local sysroot; sysroot=$(xcrun --sdk "$sdk" --show-sdk-path)
  rm -rf "$bld"; mkdir -p "$bld"
  cmake -S "$SRC" -B "$bld" -G "Unix Makefiles" \
    -D CMAKE_SYSTEM_NAME=iOS -D CMAKE_OSX_ARCHITECTURES=arm64 -D CMAKE_OSX_DEPLOYMENT_TARGET=$IOS_MIN -D CMAKE_OSX_SYSROOT="$sysroot" \
    -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS=OFF -D CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS=OFF \
    -D BUILD_LIBRARY_TYPE=Static \
    -D INSTALL_DIR="$bld/stage" -D INSTALL_DIR_INCLUDE=inc -D INSTALL_DIR_LIB=lib -D INSTALL_DIR_RESOURCE=src \
    -D BUILD_MODULE_FoundationClasses=ON -D BUILD_MODULE_ModelingData=ON -D BUILD_MODULE_ModelingAlgorithms=ON \
    -D BUILD_MODULE_Visualization=ON -D BUILD_MODULE_ApplicationFramework=ON -D BUILD_MODULE_DataExchange=ON \
    -D BUILD_MODULE_DETools=OFF -D BUILD_MODULE_Draw=OFF -D BUILD_DOC_Overview=OFF \
    -D USE_FREETYPE=OFF -D USE_FREEIMAGE=OFF -D USE_RAPIDJSON=OFF -D USE_DRACO=OFF \
    -D USE_TK=OFF -D USE_TCL=OFF -D USE_OPENGL=OFF -D USE_GLES2=OFF -D USE_VTK=OFF -D USE_TBB=OFF -D USE_XLIB=OFF \
    -D BUILD_USE_PCH=OFF
  cmake --build "$bld" --config Release -j "$JOBS" --target ${TARGETS[@]}
  # install cua cmake doi MOI target da build (ta chi build mot phan) -> lay thang lib trong thu muc build + header tu src
  local libs=()
  for t in ${TARGETS[@]}; do
    [[ $t == TKBO || $t == TKShHealing ]] && continue      # da co trong libOCCT.a
    local f; f=$(find "$bld" -name "lib$t.a" | head -1)
    [[ -n $f ]] && libs+=("$f")
  done
  libtool -static -o "$dst/libOCCTDE.a" $libs
  mkdir -p "$dst/inc"
  find "$SRC/src" -maxdepth 2 \( -name '*.hxx' -o -name '*.lxx' -o -name '*.gxx' -o -name '*.pxx' -o -name '*.h' \) -exec cp -n {} "$dst/inc/" \; 2>/dev/null
  rm -rf "$bld"
  echo "XONG $ten -> $dst/libOCCTDE.a ($(du -sh "$dst/libOCCTDE.a" | cut -f1))"
}
case ${1:-} in
  sim) build_mot sim iphonesimulator ;;
  device) build_mot device iphoneos ;;
  *) echo "dung: $0 sim|device"; exit 1 ;;
esac
