changes to build CSDK for iOS, make .frameworks
authorCharlie Lenahan <charlie.lenahan@intel.com>
Fri, 27 Mar 2015 18:08:13 +0000 (14:08 -0400)
committerPatrick Lankswert <patrick.lankswert@intel.com>
Mon, 30 Mar 2015 20:29:05 +0000 (20:29 +0000)
iOS support for the CSDK is still experimental.

Change-Id: Ie5572d5246ffb2f1098437e78f332373eed4d8e9
Signed-off-by: Charlie Lenahan <charlie.lenahan@intel.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/596
Reviewed-by: Patrick Lankswert <patrick.lankswert@intel.com>
Tested-by: Patrick Lankswert <patrick.lankswert@intel.com>
SConstruct
build_common/darwin/SConscript
resource/csdk/SConscript
resource/csdk/stack/samples/linux/SimpleClientServer/SConscript
tools/darwin/build-ios.sh [new file with mode: 0755]
tools/darwin/mkfwk_ios.sh [new file with mode: 0755]
tools/darwin/mkfwk_osx.sh [new file with mode: 0755]

index fb1bef0..a4900f3 100644 (file)
@@ -6,7 +6,7 @@
 import os
 
 # List of targets that only support the IoTivity C SDK.
-targets_csdk_only = ['arduino','darwin']
+targets_csdk_only = ['arduino','darwin','ios']
 
 # Load common build config
 SConscript('build_common/SConscript', exports = 'targets_csdk_only')
index 7d57774..ca6b3eb 100644 (file)
@@ -19,10 +19,12 @@ if sys_version is None:
        print '''
 *********************************** Error *************************************
 *   MAC OSX/IOS version isn't set, please set it in command line as :         *
-*      # scons SYS_VERSION=<version> ...                                      *
+*      # scons TARGET_ARCH=<arch> TARGET_OS=<os> SYS_VERSION=<version> ...    *
 *   To get the version, please see:                                                              *
 * /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/   *
 * /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ *
+*   <arch> is 'armv7','armv7s','arm64','i386', 'x86_64'
+*   <os> is 'darwin','ios'
 *******************************************************************************
 '''
        Exit(1)
index 7456313..ad6c5c2 100755 (executable)
@@ -65,7 +65,7 @@ liboctbstack_src = [
        OCTBSTACK_SRC + 'ocsecurity.c',
     OCTBSTACK_SRC + 'oicgroup.c'
        ]
-if target_os in ['arduino','darwin'] :
+if target_os in ['arduino','darwin','ios'] :
        static_liboctbstack = liboctbstack_env.StaticLibrary('octbstack', liboctbstack_src)
        liboctbstack_env.InstallTarget(static_liboctbstack, 'liboctbstack')
 else:
index e22d396..65bd525 100644 (file)
@@ -1,6 +1,6 @@
 
 Import('env')
-
+target_os = env.get('TARGET_OS')
 samples_env = env.Clone()
 ######################################################################
 # Build flags
@@ -19,7 +19,10 @@ samples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread'])
 samples_env.AppendUnique(LIBS = ['-lpthread'])
 
 samples_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
-samples_env.PrependUnique(LIBS = ['oc', 'octbstack', 'coap', 'oc_logger', 'm'])
+if target_os in ['darwin','ios']:
+       samples_env.PrependUnique(LIBS = ['octbstack', 'coap', 'm'])
+else:
+       samples_env.PrependUnique(LIBS = ['oc', 'octbstack', 'coap', 'oc_logger', 'm'])
 
 samples_env.AppendUnique(CPPDEFINES = ['CA_INT', 'TB_LOG'])
 
diff --git a/tools/darwin/build-ios.sh b/tools/darwin/build-ios.sh
new file mode 100755 (executable)
index 0000000..edde6fe
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# change this to what version of Xcode you have installed
+SDKVER=8.2
+
+scons TARGET_OS=ios TARGET_ARCH=armv7 SYS_VERSION=$SDKVER RELEASE=false
+scons TARGET_OS=ios TARGET_ARCH=armv7s SYS_VERSION=$SDKVER RELEASE=false
+scons TARGET_OS=ios TARGET_ARCH=arm64 SYS_VERSION=$SDKVER RELEASE=false
+scons TARGET_OS=ios TARGET_ARCH=i386 SYS_VERSION=$SDKVER RELEASE=false
+scons TARGET_OS=ios TARGET_ARCH=x86_64 SYS_VERSION=$SDKVER RELEASE=false
diff --git a/tools/darwin/mkfwk_ios.sh b/tools/darwin/mkfwk_ios.sh
new file mode 100755 (executable)
index 0000000..0eb86b7
--- /dev/null
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+
+#VERSION_IOS="${MAJOR_VERSION}.${MINOR_VERSION}.${RELEASE_NUMBER}.${BUILD_NUMBER}"
+VERSION_IOS="0.9.0.1"
+
+
+OUTDIR=$PWD/out/ios
+BUILD=debug
+LIBCOAP=libcoap
+SDKLIB=liboctbstack
+LIPO="xcrun -sdk iphoneos lipo"
+
+
+VERSION_TYPE=Alpha
+FRAMEWORK_NAME=iotivity-csdk
+FRAMEWORK_VERSION=A
+FRAMEWORK_CURRENT_VERSION=${VERSION_IOS}
+FRAMEWORK_COMPATIBILITY_VERSION=${VERSION_IOS}
+FRAMEWORKDIR=out/ios
+
+FRAMEWORK_BUNDLE=$FRAMEWORKDIR/$FRAMEWORK_NAME.framework
+rm -rf $FRAMEWORK_BUNDLE
+
+echo "Framework: Setting up directories..."
+mkdir -p $FRAMEWORK_BUNDLE
+mkdir -p $FRAMEWORK_BUNDLE/Versions
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Resources
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Headers
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Documentation
+
+echo "Framework: Creating symlinks..."
+ln  -s $FRAMEWORK_VERSION               $FRAMEWORK_BUNDLE/Versions/Current
+ln  -s Versions/Current/Headers         $FRAMEWORK_BUNDLE/Headers
+ln  -s Versions/Current/Resources       $FRAMEWORK_BUNDLE/Resources
+ln  -s Versions/Current/Documentation   $FRAMEWORK_BUNDLE/Documentation
+ln  -s Versions/Current/$FRAMEWORK_NAME $FRAMEWORK_BUNDLE/$FRAMEWORK_NAME
+FRAMEWORK_INSTALL_NAME=$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/$FRAMEWORK_NAME
+
+lipolite()
+{
+   PREV="$PWD" 
+   cd "$1"
+   ar -x "$2"
+   cd "$PREV"
+}
+
+
+echo "Extracting libraries..."
+mkdir $OUTDIR/objs
+
+ARCHS="armv7 armv7s arm64 i386 x86_64"
+FATFILE=""
+
+for ARCH in $ARCHS
+do
+    echo "extracting $ARCH"
+       mkdir $OUTDIR/objs/$ARCH
+       lipolite $OUTDIR/objs/$ARCH "$OUTDIR/$ARCH/$BUILD/$LIBCOAP.a" 
+       lipolite $OUTDIR/objs/$ARCH "$OUTDIR/$ARCH/$BUILD/$SDKLIB.a" 
+       ar -r $OUTDIR/objs/$ARCH.a $OUTDIR/objs/$ARCH/*.o
+done
+
+
+echo "Lipoing library into $FRAMEWORK_INSTALL_NAME..."
+$LIPO \
+       -create \
+        -arch armv7 "$OUTDIR/objs/armv7.a" \
+        -arch armv7s "$OUTDIR/objs/armv7s.a" \
+        -arch arm64 "$OUTDIR/objs/arm64.a" \
+        -arch i386 "$OUTDIR/objs/i386.a" \
+        -arch x86_64  "$OUTDIR/objs/x86_64.a" \
+        -output "$FRAMEWORK_INSTALL_NAME" \
+    || abort "Lipo $1 failed"
+
+echo rm -rf objs
+find $OUTDIR/objs -name "*.o" | xargs rm 
+
+echo "Framework: Copying includes..."
+cp -r  resource/csdk/stack/include/*.h  $FRAMEWORK_BUNDLE/Headers
+cp -r  resource/csdk/ocsocket/include/*.h  $FRAMEWORK_BUNDLE/Headers
+cp -r  resource/csdk/ocrandom/include/*.h  $FRAMEWORK_BUNDLE/Headers
+cp -r  resource/csdk/ocmalloc/include/*.h  $FRAMEWORK_BUNDLE/Headers
+
+echo "Framework: Creating plist..."
+cat > $FRAMEWORK_BUNDLE/Resources/Info.plist <<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+        <key>CFBundleDevelopmentRegion</key>
+        <string>English</string>
+        <key>CFBundleExecutable</key>
+        <string>${FRAMEWORK_NAME}</string>
+        <key>CFBundleIdentifier</key>
+        <string>org.iotivity</string>
+        <key>CFBundleInfoDictionaryVersion</key>
+        <string>6.0</string>
+        <key>CFBundlePackageType</key>
+        <string>FMWK</string>
+        <key>CFBundleSignature</key>
+        <string>????</string>
+        <key>CFBundleVersion</key>
+        <string>${FRAMEWORK_CURRENT_VERSION}</string>
+</dict>
+</plist>
+EOF
+
+echo
+echo "    ================================================================="
+echo "    Done"
+echo
diff --git a/tools/darwin/mkfwk_osx.sh b/tools/darwin/mkfwk_osx.sh
new file mode 100755 (executable)
index 0000000..f0ede46
--- /dev/null
@@ -0,0 +1,115 @@
+#!/bin/sh
+
+
+#VERSION_IOS="${MAJOR_VERSION}.${MINOR_VERSION}.${RELEASE_NUMBER}.${BUILD_NUMBER}"
+VERSION_IOS="0.9.0.1"
+
+
+OUTDIR=$PWD/out/darwin
+BUILD=debug
+LIBCOAP=libcoap
+SDKLIB=liboctbstack
+LIPO="xcrun -sdk iphoneos lipo"
+
+
+VERSION_TYPE=Alpha
+FRAMEWORK_NAME=iotivity-csdk
+FRAMEWORK_VERSION=A
+FRAMEWORK_CURRENT_VERSION=${VERSION_IOS}
+FRAMEWORK_COMPATIBILITY_VERSION=${VERSION_IOS}
+FRAMEWORKDIR=out/darwin
+
+FRAMEWORK_BUNDLE=$FRAMEWORKDIR/$FRAMEWORK_NAME.framework
+rm -rf $FRAMEWORK_BUNDLE
+
+echo "Framework: Setting up directories..."
+mkdir -p $FRAMEWORK_BUNDLE
+mkdir -p $FRAMEWORK_BUNDLE/Versions
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Resources
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Headers
+mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Documentation
+
+echo "Framework: Creating symlinks..."
+ln  -s $FRAMEWORK_VERSION               $FRAMEWORK_BUNDLE/Versions/Current
+ln  -s Versions/Current/Headers         $FRAMEWORK_BUNDLE/Headers
+ln  -s Versions/Current/Resources       $FRAMEWORK_BUNDLE/Resources
+ln  -s Versions/Current/Documentation   $FRAMEWORK_BUNDLE/Documentation
+ln  -s Versions/Current/$FRAMEWORK_NAME $FRAMEWORK_BUNDLE/$FRAMEWORK_NAME
+FRAMEWORK_INSTALL_NAME=$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/$FRAMEWORK_NAME
+
+lipolite()
+{
+   PREV="$PWD" 
+   cd "$1"
+   ar -x "$2"
+   cd "$PREV"
+}
+
+
+echo "Extracting libraries..."
+mkdir $OUTDIR/objs
+
+ARCHS="x86_64"
+FATFILE=""
+
+for ARCH in $ARCHS
+do
+    echo "extracting $ARCH"
+       mkdir $OUTDIR/objs/$ARCH
+       lipolite $OUTDIR/objs/$ARCH "$OUTDIR/$ARCH/$BUILD/$LIBCOAP.a" 
+       lipolite $OUTDIR/objs/$ARCH "$OUTDIR/$ARCH/$BUILD/$SDKLIB.a" 
+       ar -r $OUTDIR/objs/$ARCH.a $OUTDIR/objs/$ARCH/*.o
+done
+
+
+echo "Lipoing library into $FRAMEWORK_INSTALL_NAME..."
+cp $OUTDIR/objs/x86_64.a "$FRAMEWORK_INSTALL_NAME"
+
+#$LIPO \
+#      -create \
+#        -arch armv7 "$OUTDIR/objs/armv7.a" \
+#        -arch armv7s "$OUTDIR/objs/armv7s.a" \
+#        -arch arm64 "$OUTDIR/objs/arm64.a" \
+#        -arch i386 "$OUTDIR/objs/i386.a" \
+#        -arch x86_64  "$OUTDIR/objs/x86_64.a" \
+#        -output "$FRAMEWORK_INSTALL_NAME" \
+#    || abort "Lipo $1 failed"
+
+echo rm -rf objs
+find $OUTDIR/objs -name "*.o" | xargs rm 
+
+echo "Framework: Copying includes..."
+cp -r  resource/csdk/stack/include/*.h  $FRAMEWORK_BUNDLE/Headers
+cp -r  resource/csdk/ocsocket/include/*.h  $FRAMEWORK_BUNDLE/Headers
+cp -r  resource/csdk/ocrandom/include/*.h  $FRAMEWORK_BUNDLE/Headers
+cp -r  resource/csdk/ocmalloc/include/*.h  $FRAMEWORK_BUNDLE/Headers
+
+echo "Framework: Creating plist..."
+cat > $FRAMEWORK_BUNDLE/Resources/Info.plist <<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+        <key>CFBundleDevelopmentRegion</key>
+        <string>English</string>
+        <key>CFBundleExecutable</key>
+        <string>${FRAMEWORK_NAME}</string>
+        <key>CFBundleIdentifier</key>
+        <string>org.iotivity</string>
+        <key>CFBundleInfoDictionaryVersion</key>
+        <string>6.0</string>
+        <key>CFBundlePackageType</key>
+        <string>FMWK</string>
+        <key>CFBundleSignature</key>
+        <string>????</string>
+        <key>CFBundleVersion</key>
+        <string>${FRAMEWORK_CURRENT_VERSION}</string>
+</dict>
+</plist>
+EOF
+
+echo
+echo "    ================================================================="
+echo "    Done"
+echo