From c761c2a0a1c016417fe66bca8de6bf68d61e6821 Mon Sep 17 00:00:00 2001 From: Charlie Lenahan Date: Fri, 27 Mar 2015 14:08:13 -0400 Subject: [PATCH] changes to build CSDK for iOS, make .frameworks iOS support for the CSDK is still experimental. Change-Id: Ie5572d5246ffb2f1098437e78f332373eed4d8e9 Signed-off-by: Charlie Lenahan Reviewed-on: https://gerrit.iotivity.org/gerrit/596 Reviewed-by: Patrick Lankswert Tested-by: Patrick Lankswert --- SConstruct | 2 +- build_common/darwin/SConscript | 4 +- resource/csdk/SConscript | 2 +- .../samples/linux/SimpleClientServer/SConscript | 7 +- tools/darwin/build-ios.sh | 10 ++ tools/darwin/mkfwk_ios.sh | 113 ++++++++++++++++++++ tools/darwin/mkfwk_osx.sh | 115 +++++++++++++++++++++ 7 files changed, 248 insertions(+), 5 deletions(-) create mode 100755 tools/darwin/build-ios.sh create mode 100755 tools/darwin/mkfwk_ios.sh create mode 100755 tools/darwin/mkfwk_osx.sh diff --git a/SConstruct b/SConstruct index fb1bef0..a4900f3 100644 --- a/SConstruct +++ b/SConstruct @@ -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') diff --git a/build_common/darwin/SConscript b/build_common/darwin/SConscript index 7d57774..ca6b3eb 100644 --- a/build_common/darwin/SConscript +++ b/build_common/darwin/SConscript @@ -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= ... * +* # scons TARGET_ARCH= TARGET_OS= SYS_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/ * +* is 'armv7','armv7s','arm64','i386', 'x86_64' +* is 'darwin','ios' ******************************************************************************* ''' Exit(1) diff --git a/resource/csdk/SConscript b/resource/csdk/SConscript index 7456313..ad6c5c2 100755 --- a/resource/csdk/SConscript +++ b/resource/csdk/SConscript @@ -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: diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/SConscript b/resource/csdk/stack/samples/linux/SimpleClientServer/SConscript index e22d396..65bd525 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/SConscript +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/SConscript @@ -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 index 0000000..edde6fe --- /dev/null +++ b/tools/darwin/build-ios.sh @@ -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 index 0000000..0eb86b7 --- /dev/null +++ b/tools/darwin/mkfwk_ios.sh @@ -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 < + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${FRAMEWORK_NAME} + CFBundleIdentifier + org.iotivity + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + ${FRAMEWORK_CURRENT_VERSION} + + +EOF + +echo +echo " =================================================================" +echo " Done" +echo diff --git a/tools/darwin/mkfwk_osx.sh b/tools/darwin/mkfwk_osx.sh new file mode 100755 index 0000000..f0ede46 --- /dev/null +++ b/tools/darwin/mkfwk_osx.sh @@ -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 < + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${FRAMEWORK_NAME} + CFBundleIdentifier + org.iotivity + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + ${FRAMEWORK_CURRENT_VERSION} + + +EOF + +echo +echo " =================================================================" +echo " Done" +echo -- 2.7.4