소스 검색

feat: add option for creating XCFramework and configure minimum iOS target (#5648)

* feat: add option for creating XCFramework and configure minimum iOS target with a build parameter

* style: update indents for iOS bash script

---------

Co-authored-by: Kim Kulling <[email protected]>
Aliaksandr Kasmachou 11 달 전
부모
커밋
924106188e
3개의 변경된 파일84개의 추가작업 그리고 4개의 파일을 삭제
  1. 33 0
      include/assimp/module.modulemap
  2. 9 3
      port/iOS/README.md
  3. 42 1
      port/iOS/build.sh

+ 33 - 0
include/assimp/module.modulemap

@@ -0,0 +1,33 @@
+// Export headers for Swift (iOS)
+module libassimp {
+    header "ColladaMetaData.h"
+    header "GltfMaterial.h"
+    header "ObjMaterial.h"
+    header "anim.h"
+    header "camera.h"
+    header "cexport.h"
+    header "cfileio.h"
+    header "cimport.h"
+    header "color4.h"
+    header "commonMetaData.h"
+    header "config.h"
+    header "defs.h"
+    header "importerdesc.h"
+    header "light.h"
+    header "material.h"
+    header "matrix3x3.h"
+    header "matrix4x4.h"
+    header "mesh.h"
+    header "metadata.h"
+    header "pbrmaterial.h"
+    header "postprocess.h"
+    header "quaternion.h"
+    header "revision.h"
+    header "scene.h"
+    header "texture.h"
+    header "types.h"
+    header "vector2.h"
+    header "vector3.h"
+    header "version.h"
+    export *
+}

+ 9 - 3
port/iOS/README.md

@@ -1,7 +1,13 @@
 # assimp for iOS
 (deployment target 6.0+, 32/64bit)
 
-Builds assimp libraries for several iOS CPU architectures at once, and outputs a fat binary from the result.
+### Requirements 
+- cmake
+- pkg-config
+
+Note: all these packages can be installed with [brew](https://brew.sh)
+
+Builds assimp libraries for several iOS CPU architectures at once, and outputs a fat binary / XCFramework from the result.
 
 Run the **build.sh** script from the ```./port/iOS/``` directory. See **./build.sh --help** for information about command line options. 
 
@@ -15,11 +21,11 @@ shadeds-Mac:iOS arul$ ./build.sh --help
 Example:
 ```bash
 cd ./port/iOS/
-./build.sh --stdlib=libc++ --archs="armv7 arm64 i386"
+./build.sh --stdlib=libc++ --archs="arm64 x86_64" --no-fat --min-version="16.0"
 ```
 Supported architectures/devices:
 
-### Simulator
+### Simulator [CPU Architectures](https://docs.elementscompiler.com/Platforms/Cocoa/CpuArchitectures/)
 - i386
 - x86_64
  

+ 42 - 1
port/iOS/build.sh

@@ -76,7 +76,7 @@ build_arch()
 
     rm CMakeCache.txt
     
-    CMAKE_CLI_INPUT="-DCMAKE_C_COMPILER=$CMAKE_C_COMPILER -DCMAKE_CXX_COMPILER=$CMAKE_CXX_COMPILER -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_$(echo $1 | tr '[:lower:]' '[:upper:]')_TOOLCHAIN.cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS"
+    CMAKE_CLI_INPUT="-DCMAKE_C_COMPILER=$CMAKE_C_COMPILER -DCMAKE_CXX_COMPILER=$CMAKE_CXX_COMPILER -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_$(echo $1 | tr '[:lower:]' '[:upper:]')_TOOLCHAIN.cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS -DASSIMP_BUILD_ZLIB=ON"
     
     echo "[!] Running CMake with -G 'Unix Makefiles' $CMAKE_CLI_INPUT"
     
@@ -102,6 +102,7 @@ CPP_STD_LIB=${CPP_STD_LIB_LIST[0]}
 CPP_STD=${CPP_STD_LIST[0]}
 DEPLOY_ARCHS=${BUILD_ARCHS_ALL[*]}
 DEPLOY_FAT=1
+DEPLOY_XCFramework=1
 
 for i in "$@"; do
     case $i in
@@ -117,6 +118,11 @@ for i in "$@"; do
         DEPLOY_ARCHS=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
         echo "[!] Selecting architectures: $DEPLOY_ARCHS"
     ;;
+    --min-version=*)
+        MIN_IOS_VERSION=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
+        IOS_SDK_TARGET=$MIN_IOS_VERSION
+        echo "[!] Selecting minimum iOS version: $MIN_IOS_VERSION"
+    ;;
     --debug)
     	BUILD_TYPE=Debug        
         echo "[!] Selecting build type: Debug"
@@ -129,11 +135,17 @@ for i in "$@"; do
         DEPLOY_FAT=0
         echo "[!] Fat binary will not be created."
     ;;
+    --no-xcframework)
+        DEPLOY_XCFramework=0
+        echo "[!] XCFramework will not be created."
+    ;;
     -h|--help)
         echo " - don't build fat library (--no-fat)."
+        echo " - don't build XCFramework (--no-xcframework)."
         echo " - Include debug information and symbols, no compiler optimizations (--debug)."
         echo " - generate dynamic libraries rather than static ones (--shared-lib)."
         echo " - supported architectures (--archs):  $(echo $(join , ${BUILD_ARCHS_ALL[*]}) | sed 's/,/, /g')"
+        echo " - minimum iOS version (--min-version): 16.0"
         echo " - supported C++ STD libs (--stdlib): $(echo $(join , ${CPP_STD_LIB_LIST[*]}) | sed 's/,/, /g')"
         echo " - supported C++ standards (--std): $(echo $(join , ${CPP_STD_LIST[*]}) | sed 's/,/, /g')"
         exit
@@ -196,3 +208,32 @@ if [[ "$DEPLOY_FAT" -eq 1 ]]; then
     
     echo "[!] Done! The fat binaries can be found at $BUILD_DIR"
 fi
+
+make_xcframework()
+{
+    LIB_NAME=$1
+    FRAMEWORK_PATH=$BUILD_DIR/$LIB_NAME.xcframework   
+
+    ARGS = ""
+    for ARCH_TARGET in $DEPLOY_ARCHS; do
+        if [[ "$BUILD_SHARED_LIBS" =~ "ON" ]]; then
+            ARGS="$ARGS -library $BUILD_DIR/$ARCH_TARGET/$LIB_NAME.dylib -headers ./include "
+        else
+            ARGS="$ARGS -library $BUILD_DIR/$ARCH_TARGET/$LIB_NAME.a -headers ./include "
+        fi
+    done
+
+    xcodebuild -create-xcframework $ARGS -output $FRAMEWORK_PATH
+}
+
+if [[ "$DEPLOY_XCFramework" -eq 1 ]]; then
+    echo '[+] Creating XCFramework ...'
+
+    if [[ "$BUILD_TYPE" =~ "Debug" ]]; then
+        make_xcframework 'libassimpd'
+    else
+        make_xcframework 'libassimp'
+    fi
+
+    echo "[!] Done! The XCFramework can be found at $BUILD_DIR"
+fi