소스 검색

Merge remote-tracking branch 'official/master' into contrib

Léo Terziman 11 년 전
부모
커밋
1f3be52079

+ 13 - 28
code/FBXConverter.cpp

@@ -760,48 +760,33 @@ private:
 		aiMetadata* data = new aiMetadata();
 		data->mNumProperties = unparsedProperties.size() + numStaticMetaData;
 		data->mKeys = new aiString[data->mNumProperties]();
-		data->mValues = new aiString[data->mNumProperties]();
+		data->mValues = new aiMetadataEntry[data->mNumProperties]();
 		nd.mMetaData = data;
 		int index = 0;
 
 		// find user defined properties (3ds Max)
-		data->mKeys[index].Set("UserProperties");
-		data->mValues[index].Set(PropertyGet<std::string>(props, "UDP3DSMAX", ""));
-		++index;
-
+		data->Set(index++, "UserProperties", aiString(PropertyGet<std::string>(props, "UDP3DSMAX", "")));
 		// preserve the info that a node was marked as Null node in the original file.
-		data->mKeys[index].Set("IsNull");
-		data->mValues[index].Set(model.IsNull() ? "true" : "false");
-		++index;
+		data->Set(index++, "IsNull", model.IsNull() ? true : false);
 
 		// add unparsed properties to the node's metadata
 		BOOST_FOREACH(const DirectPropertyMap::value_type& prop, unparsedProperties) {
 
-			// all values are converted to strings using the following stringstream
-			std::stringstream ss;
-			bool parse_succeeded = false;
-
 			// Interpret the property as a concrete type
-			if (const TypedProperty<std::string>* interpreted = prop.second->As<TypedProperty<std::string> >())
-				ss << interpreted->Value();
-			else if (const TypedProperty<bool>* interpreted = prop.second->As<TypedProperty<bool> >())
-				ss << interpreted->Value();
+			if (const TypedProperty<bool>* interpreted = prop.second->As<TypedProperty<bool> >())
+				data->Set(index++, prop.first, interpreted->Value());
 			else if (const TypedProperty<int>* interpreted = prop.second->As<TypedProperty<int> >())
-				ss << interpreted->Value();
+				data->Set(index++, prop.first, interpreted->Value());
 			else if (const TypedProperty<uint64_t>* interpreted = prop.second->As<TypedProperty<uint64_t> >())
-				ss << interpreted->Value();
+				data->Set(index++, prop.first, interpreted->Value());
 			else if (const TypedProperty<float>* interpreted = prop.second->As<TypedProperty<float> >())
-				ss << interpreted->Value();
+				data->Set(index++, prop.first, interpreted->Value());
+			else if (const TypedProperty<aiString>* interpreted = prop.second->As<TypedProperty<aiString> >())
+				data->Set(index++, prop.first, interpreted->Value());
 			else if (const TypedProperty<aiVector3D>* interpreted = prop.second->As<TypedProperty<aiVector3D> >())
-			{
-				aiVector3D v = interpreted->Value();
-				ss << v.x << ";" << v.y << ";" << v.z;
-			}
-
-			// add property to meta data
-			data->mKeys[index].Set(prop.first);
-			data->mValues[index].Set(ss.str());
-			++index;
+				data->Set(index++, prop.first, interpreted->Value());
+			else
+				assert(false);
 		}
 	}
 

+ 6 - 10
code/IFCLoader.cpp

@@ -712,16 +712,12 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion
 			aiMetadata* data = new aiMetadata();
 			data->mNumProperties = properties.size();
 			data->mKeys = new aiString[data->mNumProperties]();
-			data->mValues = new aiString[data->mNumProperties]();
-
-			unsigned int i = 0;
-			BOOST_FOREACH(const Metadata::value_type& kv, properties) {
-				data->mKeys[i].Set(kv.first);
-				if (kv.second.length() > 0) {
-					data->mValues[i].Set(kv.second);
-				}				
-				++i;
-			}
+			data->mValues = new aiMetadataEntry[data->mNumProperties]();
+
+			unsigned int index = 0;
+			BOOST_FOREACH(const Metadata::value_type& kv, properties)
+				data->Set(index++, kv.first, aiString(kv.second));
+
 			nd->mMetaData = data;
 		}
 	}

+ 143 - 18
include/assimp/metadata.h

@@ -45,10 +45,69 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #ifndef __AI_METADATA_H_INC__
 #define __AI_METADATA_H_INC__
 
+#include <assert.h>
+#include <stdint.h>
+
+
+
+// -------------------------------------------------------------------------------
+/**
+  * Enum used to distinguish data types
+  */
+ // -------------------------------------------------------------------------------
+enum aiMetadataType
+{
+	AI_BOOL = 0, 
+	AI_INT = 1, 
+	AI_UINT64 = 2, 
+	AI_FLOAT = 3, 
+	AI_AISTRING = 4,
+	AI_AIVECTOR3D = 5,
+
+	FORCE_32BIT = INT_MAX
+};
+
+
+
+// -------------------------------------------------------------------------------
+/**
+  * Metadata entry
+  *
+  * The type field uniquely identifies the underlying type of the data field
+  */
+ // -------------------------------------------------------------------------------
+struct aiMetadataEntry
+{
+	aiMetadataType mType;
+	void* mData;
+};
+
+
+
 #ifdef __cplusplus
-extern "C" {
+
+#include <string>
+
+
+
+// -------------------------------------------------------------------------------
+/**
+  * Helper functions to get the aiType enum entry for a type
+  */
+ // -------------------------------------------------------------------------------
+inline aiMetadataType GetAiType( bool ) { return AI_BOOL; }
+inline aiMetadataType GetAiType( int ) { return AI_INT; }
+inline aiMetadataType GetAiType( uint64_t ) { return AI_UINT64; }
+inline aiMetadataType GetAiType( float ) { return AI_FLOAT; }
+inline aiMetadataType GetAiType( aiString ) { return AI_AISTRING; }
+inline aiMetadataType GetAiType( aiVector3D ) { return AI_AIVECTOR3D; }
+
+
+
 #endif
 
+
+
 // -------------------------------------------------------------------------------
 /**
   * Container for holding metadata.
@@ -66,18 +125,17 @@ struct aiMetadata
 
 	/** Arrays of values, may not be NULL. Entries in this array may be NULL if the
 	  * corresponding property key has no assigned value. */
-	C_STRUCT aiString* mValues;
+	C_STRUCT aiMetadataEntry* mValues;
 
 #ifdef __cplusplus
 
 	/** Constructor */
 	aiMetadata()
-	{
 		// set all members to zero by default
-		mKeys = NULL;
-		mValues = NULL;
-		mNumProperties = 0;
-	}
+		: mNumProperties(0)
+		, mKeys(NULL)
+		, mValues(NULL)
+	{}
 
 
 	/** Destructor */
@@ -86,27 +144,94 @@ struct aiMetadata
 		if (mKeys)
 			delete [] mKeys;
 		if (mValues)
+		{
+			// Delete each metadata entry
+			for (unsigned i=0; i<mNumProperties; ++i)
+			{
+				void* data = mValues[i].mData;
+				switch (mValues[i].mType) 
+				{
+				case AI_BOOL:
+					delete static_cast<bool*>(data);
+					break;
+				case AI_INT:
+					delete static_cast<int*>(data);
+					break;
+				case AI_UINT64:
+					delete static_cast<uint64_t*>(data);
+					break;
+				case AI_FLOAT:
+					delete static_cast<float*>(data);
+					break;
+				case AI_AISTRING:
+					delete static_cast<aiString*>(data);
+					break;
+				case AI_AIVECTOR3D:
+					delete static_cast<aiVector3D*>(data);
+					break;
+				default:
+					assert(false);
+					break;
+				}
+			}
+
+			// Delete the metadata array
 			delete [] mValues;
+		}
+		
 	}
 
 
-	inline bool Get(const aiString& key, aiString& value)
+
+	template<typename T>
+	inline void Set( unsigned index, const std::string& key, const T& value )
 	{
-		for (unsigned i=0; i<mNumProperties; ++i) {
-			if (mKeys[i]==key) {
-				value=mValues[i];
-				return true;
-			}
-		}
+		// In range assertion
+		assert(index < mNumProperties);
+
+		// Set metadata key
+		mKeys[index] = key;
+
+		// Set metadata type
+		mValues[index].mType = GetAiType(value);
+		// Copy the given value to the dynamic storage
+		mValues[index].mData = new T(value);
+	}
+
+	template<typename T>
+	inline bool Get( unsigned index, T& value )
+	{
+		// In range assertion
+		assert(index < mNumProperties);
+
+		// Return false if the output data type does 
+		// not match the found value's data type
+		if (GetAiType(value) != mValues[index].mType)
+			return false;
+
+		// Otherwise, output the found value and 
+		// return true
+		value = *static_cast<T*>(mValues[index].mData);
+		return true;
+	}
+
+	template<typename T>
+	inline bool Get( const aiString& key, T& value )
+	{
+		// Search for the given key
+		for (unsigned i=0; i<mNumProperties; ++i)
+			if (mKeys[i]==key)
+				return Get(i, value);
 		return false;
 	}
+
+	template<typename T>
+	inline bool Get( const std::string& key, T& value )
+	{ return Get(aiString(key), value); }
+
 #endif // __cplusplus
 };
 
-#ifdef __cplusplus
-} //extern "C" {
-#endif
-
 #endif // __AI_METADATA_H_INC__
 
 

+ 4 - 4
port/iOS/IPHONEOS_ARM6_TOOLCHAIN.cmake → port/iOS/IPHONEOS_ARM64_TOOLCHAIN.cmake

@@ -2,11 +2,11 @@ INCLUDE(CMakeForceCompiler)
 
 SET (CMAKE_CROSSCOMPILING   TRUE)
 SET (CMAKE_SYSTEM_NAME      "Darwin")
-SET (CMAKE_SYSTEM_PROCESSOR "armv6")
+SET (CMAKE_SYSTEM_PROCESSOR "arm64”)
 
-SET (SDKVER     "5.0")
-SET (DEVROOT    "/Developer/Platforms/iPhoneOS.platform/Developer")
-SET (SDKROOT    "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
+SET (SDKVER     “7.1”)
+SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
+SET (SDKROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
 SET (CC         "${DEVROOT}/usr/bin/llvm-gcc")
 SET (CXX        "${DEVROOT}/usr/bin/llvm-g++")
 

+ 19 - 0
port/iOS/IPHONEOS_ARMV6_TOOLCHAIN.cmake

@@ -0,0 +1,19 @@
+INCLUDE(CMakeForceCompiler)
+
+SET (CMAKE_CROSSCOMPILING   TRUE)
+SET (CMAKE_SYSTEM_NAME      "Darwin")
+SET (CMAKE_SYSTEM_PROCESSOR "armv6")
+
+SET (SDKVER     “7.1”)
+SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
+SET (SDKROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
+SET (CC         "${DEVROOT}/usr/bin/clang”)
+SET (CXX        "${DEVROOT}/usr/bin/clang++")
+
+CMAKE_FORCE_C_COMPILER          (${CC} LLVM)
+CMAKE_FORCE_CXX_COMPILER        (${CXX} LLVM)
+
+SET (CMAKE_FIND_ROOT_PATH               "${SDKROOT}" "${DEVROOT}")
+SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM  NEVER)
+SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY  ONLY)
+SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE  ONLY)

+ 19 - 0
port/iOS/IPHONEOS_ARMV7S_TOOLCHAIN.cmake

@@ -0,0 +1,19 @@
+INCLUDE(CMakeForceCompiler)
+
+SET (CMAKE_CROSSCOMPILING   TRUE)
+SET (CMAKE_SYSTEM_NAME      "Darwin")
+SET (CMAKE_SYSTEM_PROCESSOR "armv7s”)
+
+SET (SDKVER     “7.1”)
+SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
+SET (SDKROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
+SET (CC         "${DEVROOT}/usr/bin/clang”)
+SET (CXX        "${DEVROOT}/usr/bin/clang++")
+
+CMAKE_FORCE_C_COMPILER          (${CC} LLVM)
+CMAKE_FORCE_CXX_COMPILER        (${CXX} LLVM)
+
+SET (CMAKE_FIND_ROOT_PATH               "${SDKROOT}" "${DEVROOT}")
+SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM  NEVER)
+SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY  ONLY)
+SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE  ONLY)

+ 5 - 5
port/iOS/IPHONEOS_ARM7_TOOLCHAIN.cmake → port/iOS/IPHONEOS_ARMV7_TOOLCHAIN.cmake

@@ -4,11 +4,11 @@ SET (CMAKE_CROSSCOMPILING   TRUE)
 SET (CMAKE_SYSTEM_NAME      "Darwin")
 SET (CMAKE_SYSTEM_PROCESSOR "armv7")
 
-SET (SDKVER     "5.0")
-SET (DEVROOT    "/Developer/Platforms/iPhoneOS.platform/Developer")
-SET (SDKROOT    "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
-SET (CC         "${DEVROOT}/usr/bin/llvm-gcc")
-SET (CXX        "${DEVROOT}/usr/bin/llvm-g++")
+SET (SDKVER     “7.1”)
+SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
+SET (SDKROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
+SET (CC         "${DEVROOT}/usr/bin/clang”)
+SET (CXX        "${DEVROOT}/usr/bin/clang++")
 
 CMAKE_FORCE_C_COMPILER          (${CC} LLVM)
 CMAKE_FORCE_CXX_COMPILER        (${CXX} LLVM)

+ 20 - 0
port/iOS/IPHONEOS_I386_TOOLCHAIN.cmake

@@ -0,0 +1,20 @@
+INCLUDE(CMakeForceCompiler)
+
+SET (CMAKE_CROSSCOMPILING   TRUE)
+SET (CMAKE_SYSTEM_NAME      "Darwin")
+SET (CMAKE_SYSTEM_PROCESSOR “i386”)
+
+SET (SDKVER     “7.1”)
+
+SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
+SET (SDKROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDKVER}.sdk")
+SET (CC         "${DEVROOT}/usr/bin/clang”)
+SET (CXX        "${DEVROOT}/usr/bin/clang++")
+
+CMAKE_FORCE_C_COMPILER          (${CC} LLVM)
+CMAKE_FORCE_CXX_COMPILER        (${CXX} LLVM)
+
+SET (CMAKE_FIND_ROOT_PATH               "${SDKROOT}" "${DEVROOT}")
+SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM  NEVER)
+SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY  ONLY)
+SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE  ONLY)

+ 20 - 0
port/iOS/IPHONEOS_X86_64_TOOLCHAIN.cmake

@@ -0,0 +1,20 @@
+INCLUDE(CMakeForceCompiler)
+
+SET (CMAKE_CROSSCOMPILING   TRUE)
+SET (CMAKE_SYSTEM_NAME      "Darwin")
+SET (CMAKE_SYSTEM_PROCESSOR “x86_64”)
+
+SET (SDKVER     “7.1”)
+
+SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
+SET (SDKROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDKVER}.sdk")
+SET (CC         "${DEVROOT}/usr/bin/clang”)
+SET (CXX        "${DEVROOT}/usr/bin/clang++")
+
+CMAKE_FORCE_C_COMPILER          (${CC} LLVM)
+CMAKE_FORCE_CXX_COMPILER        (${CXX} LLVM)
+
+SET (CMAKE_FIND_ROOT_PATH               "${SDKROOT}" "${DEVROOT}")
+SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM  NEVER)
+SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY  ONLY)
+SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE  ONLY)

+ 0 - 19
port/iOS/IPHONEOS_i386_TOOLCHAIN.cmake

@@ -1,19 +0,0 @@
-INCLUDE(CMakeForceCompiler)
-
-SET (CMAKE_CROSSCOMPILING   TRUE)
-SET (CMAKE_SYSTEM_NAME      "Darwin")
-SET (CMAKE_SYSTEM_PROCESSOR "i386")
-
-SET (SDKVER     "5.0")
-SET (DEVROOT    "/Developer/Platforms/iPhoneOS.platform/Developer")
-SET (SDKROOT    "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
-SET (CC         "${DEVROOT}/usr/bin/llvm-gcc")
-SET (CXX        "${DEVROOT}/usr/bin/llvm-g++")
-
-CMAKE_FORCE_C_COMPILER          (${CC} LLVM)
-CMAKE_FORCE_CXX_COMPILER        (${CXX} LLVM)
-
-SET (CMAKE_FIND_ROOT_PATH               "${SDKROOT}" "${DEVROOT}")
-SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM  NEVER)
-SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY  ONLY)
-SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE  ONLY)

+ 30 - 0
port/iOS/README.md

@@ -0,0 +1,30 @@
+# assimp for iOS-SDK 7.1 
+(deployment target 6.0+, 32/64bit)
+
+Builds assimp libraries for several iOS CPU architectures at once, and outputs a fat binary from the result.
+
+Run the **build.sh** script from the ```./port/iOS/``` directory. See **./build.sh --help** for information about command line options. 
+
+```bash
+shadeds-Mac:iOS arul$ ./build.sh --help
+[!] ./build.sh - assimp iOS build script
+ - don't build fat library (--no-fat)
+ - supported architectures(--archs): armv7, armv7s, arm64, i386, x86_64
+ - supported C++ STD libs.(--stdlib): libc++, libstdc++
+```
+Example:
+```bash
+cd ./port/iOS/
+./build.sh --stdlib=libc++ --archs="armv7 arm64 i386"
+```
+Supported architectures/devices:
+
+### Simulator
+- i386
+- x86_64
+ 
+### Device
+- ~~ARMv6 (dropped after iOS 6.0)~~
+- ARMv7
+- ARMv7-s
+- ARM64

+ 0 - 13
port/iOS/README.txt

@@ -1,13 +0,0 @@
-To build for iOS simply execute "./build_ios.sh" from this folder. Currently this script requires the latest SDK (5.0) from Apple in order to build properly. In the future I will add support for specifying the SDK version on the command line. 
-
-Once the build is completed you will see a "ios" folder under /lib. This folder has sub folders for each of the following architectures:
-
-* armv6 (Older Devices)
-* armv7 (New Devices)
-* i386 (Simulator)
-
-Each of these folders contains a single static library for that architecture. In addition the libassimp.a file in the root of this folder is a combined archive (fat binary) library for all of the above architectures.
-
-This port is being maintained by Matt Mathias <[email protected]> please contact him with any questions or comments.
-
-

+ 115 - 0
port/iOS/build.sh

@@ -0,0 +1,115 @@
+#!/bin/bash
+
+#
+# Written and maintained by [email protected] (2014)
+#
+
+BUILD_DIR="./lib/iOS"
+
+IOS_SDK_VERSION=7.1
+IOS_SDK_TARGET=6.0
+#(iPhoneOS iPhoneSimulator) -- determined from arch
+IOS_SDK_DEVICE=
+
+XCODE_ROOT_DIR=/Applications/Xcode.app/Contents
+TOOLCHAIN=$XCODE_ROOT_DIR//Developer/Toolchains/XcodeDefault.xctoolchain
+
+BUILD_ARCHS_DEVICE="armv7 armv7s arm64"
+BUILD_ARCHS_SIMULATOR="i386 x86_64"
+BUILD_ARCHS_ALL=(armv7 armv7s arm64 i386 x86_64)
+
+CPP_DEV_TARGET_LIST=(miphoneos-version-min mios-simulator-version-min)
+CPP_DEV_TARGET=
+CPP_STD_LIB_LIST=(libc++ libstdc++)
+CPP_STD_LIB=
+
+function join { local IFS="$1"; shift; echo "$*"; }
+
+build_arch()
+{
+    IOS_SDK_DEVICE=iPhoneOS
+    CPP_DEV_TARGET=${CPP_DEV_TARGET_LIST[0]}
+
+    if [[ "$BUILD_ARCHS_SIMULATOR" =~ "$1" ]]
+    then
+        echo '[!] Target SDK set to SIMULATOR.'
+        IOS_SDK_DEVICE=iPhoneSimulator
+        CPP_DEV_TARGET=${CPP_DEV_TARGET_LIST[1]}
+    else
+        echo '[!] Target SDK set to DEVICE.'
+    fi
+
+    unset DEVROOT SDKROOT CFLAGS LDFLAGS CPPFLAGS CXXFLAGS
+
+    export DEVROOT=$XCODE_ROOT_DIR/Developer/Platforms/$IOS_SDK_DEVICE.platform/Developer
+    export SDKROOT=$DEVROOT/SDKs/$IOS_SDK_DEVICE$IOS_SDK_VERSION.sdk
+    export CFLAGS="-arch $1 -pipe -no-cpp-precomp -stdlib=$CPP_STD_LIB -isysroot $SDKROOT -$CPP_DEV_TARGET=$IOS_SDK_TARGET -I$SDKROOT/usr/include/"
+    export LDFLAGS="-L$SDKROOT/usr/lib/"
+    export CPPFLAGS=$CFLAGS
+    export CXXFLAGS=$CFLAGS
+
+    rm CMakeCache.txt
+
+    cmake  -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_$(echo $1 | tr '[:lower:]' '[:upper:]')_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DASSIMP_BUILD_STATIC_LIB=ON
+
+    echo "[!] Building $1 library"
+
+    $XCODE_ROOT_DIR/Developer/usr/bin/make clean
+    $XCODE_ROOT_DIR/Developer/usr/bin/make assimp -j 8 -l
+
+    echo "[!] Moving built library into: $BUILD_DIR/$1/"
+
+    mv ./lib/libassimp.a $BUILD_DIR/$1/
+}
+
+echo "[!] $0 - assimp iOS build script"
+
+CPP_STD_LIB=${CPP_STD_LIB_LIST[0]}
+DEPLOY_ARCHS=${BUILD_ARCHS_ALL[*]}
+DEPLOY_FAT=1
+
+for i in "$@"; do
+    case $i in
+    -l=*|--stdlib=*)
+        CPP_STD_LIB=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
+        echo "[!] Selecting c++ std lib: $CPP_STD_LIB"
+    ;;
+    -a=*|--archs=*)
+        DEPLOY_ARCHS=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
+        echo "[!] Selecting architectures: $DEPLOY_ARCHS"
+    ;;
+    -n|--no-fat)
+        DEPLOY_FAT=0
+        echo "[!] Fat binary will not be created."
+    ;;
+    -h|--help)
+        echo " - don't build fat library (--no-fat)."
+        echo " - supported architectures (--archs):  $(echo $(join , ${BUILD_ARCHS_ALL[*]}) | sed 's/,/, /g')"
+        echo " - supported C++ STD libs. (--stdlib): $(echo $(join , ${CPP_STD_LIB_LIST[*]}) | sed 's/,/, /g')"
+        exit
+    ;;
+    *)
+    ;;
+    esac
+done
+
+cd ../../
+rm -rf $BUILD_DIR
+
+for ARCH_TARGET in $DEPLOY_ARCHS; do
+    mkdir -p $BUILD_DIR/$ARCH_TARGET
+    build_arch $ARCH_TARGET
+    #rm ./lib/libassimp.a
+done
+
+if [[ "$DEPLOY_FAT" -eq 1 ]]; then
+    echo '[+] Creating fat binary ...'
+    for ARCH_TARGET in $DEPLOY_ARCHS; do
+        LIPO_ARGS="$LIPO_ARGS-arch $ARCH_TARGET $BUILD_DIR/$ARCH_TARGET/libassimp.a "
+    done
+    LIPO_ARGS="$LIPO_ARGS-create -output $BUILD_DIR/libassimp-fat.a"
+    lipo $LIPO_ARGS
+    echo "[!] Done! The fat binary can be found at $BUILD_DIR"
+fi
+
+

+ 0 - 104
port/iOS/build_ios.sh

@@ -1,104 +0,0 @@
-#!/bin/sh
-# build.sh
-
-#######################
-# BUILD ASSIMP for iOS and iOS Simulator
-#######################
-
-BUILD_DIR="./lib/ios"
-
-IOS_BASE_SDK="5.0"
-IOS_DEPLOY_TGT="3.2"
-
-setenv_all()
-{
-	# Add internal libs
-	export CFLAGS="$CFLAGS"
-	export CPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
-	export CXX="$DEVROOT/usr/bin/llvm-g++-4.2"
-	export CXXCPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
-	export CC="$DEVROOT/usr/bin/llvm-gcc-4.2"
-	export LD=$DEVROOT/usr/bin/ld
-	export AR=$DEVROOT/usr/bin/ar
-	export AS=$DEVROOT/usr/bin/as
-	export NM=$DEVROOT/usr/bin/nm
-	export RANLIB=$DEVROOT/usr/bin/ranlib
-	export LDFLAGS="-L$SDKROOT/usr/lib/"
-	
-	export CPPFLAGS=$CFLAGS
-	export CXXFLAGS=$CFLAGS
-}
-
-setenv_arm6()
-{
-	unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
-	export DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
-	export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk
-	export CFLAGS="-arch armv6 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"
-	setenv_all
-	rm CMakeCache.txt
-	cmake  -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_ARM6_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON
-}
-
-setenv_arm7()
-{
-	unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
-	export DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
-	export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk
-	export CFLAGS="-arch armv7 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"
-	setenv_all
-	rm CMakeCache.txt
-	cmake  -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_ARM7_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON
-}
-
-setenv_i386()
-{
-	unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
-	export DEVROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer
-	export SDKROOT=$DEVROOT/SDKs/iPhoneSimulator$IOS_BASE_SDK.sdk
-	export CFLAGS="-arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT"
-	setenv_all
-	rm CMakeCache.txt
-	cmake  -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_i386_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON
-}
-
-create_outdir()
-{
-	for lib_i386 in `find $BUILD_DIR/i386 -name "lib*\.a"`; do
-		lib_arm6=`echo $lib_i386 | sed "s/i386/arm6/g"`
-		lib_arm7=`echo $lib_i386 | sed "s/i386/arm7/g"`
-		lib=`echo $lib_i386 | sed "s/i386\///g"`
-		echo 'Creating fat binary...'
-		lipo -arch armv6 $lib_arm6 -arch armv7 $lib_arm7 -arch i386 $lib_i386 -create -output $lib
-	done
-	echo 'Done! You will find the libaries and fat binary library in /lib/ios'
-}
-cd ../../
-
-rm -rf $BUILD_DIR
-mkdir -p $BUILD_DIR/arm6 $BUILD_DIR/arm7 $BUILD_DIR/i386
-
-setenv_arm6
-echo 'Building armv6 library'
-make clean
-make assimp -j 8 -l
-cp ./lib/libassimp.a $BUILD_DIR/arm6/
-
-setenv_arm7
-echo 'Building armv7 library'
-make clean
-make assimp -j 8 -l
-cp ./lib/libassimp.a $BUILD_DIR/arm7/
-
-
-setenv_i386
-echo 'Building i386 library'
-make clean
-make assimp -j 8 -l
-cp ./lib/libassimp.a $BUILD_DIR/i386/
-
-rm ./lib/libassimp.a
-
-create_outdir
-
-