[IOT-2034] Fix for Tizen Enrollee sample build issue.
authorJay Sharma <jay.sharma@samsung.com>
Thu, 13 Apr 2017 14:59:43 +0000 (20:29 +0530)
committerUze Choi <uzchoi@samsung.com>
Fri, 14 Apr 2017 01:56:47 +0000 (01:56 +0000)
Change-Id: I40f6e2ee5ffa91fdc4b746a94ecd35d07e5fa6d9
Signed-off-by: Jay Sharma <jay.sharma@samsung.com>
Signed-off-by: Harish Kumar Marappa <h.marappa@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/18925
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Jihun Ha <jihun.ha@samsung.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/SConscript
service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/build/tizen/gbsbuild.sh
service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/packaging/com.oic.es.sample.spec
service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/scons/SConscript

index b478ff6..0a28e4d 100644 (file)
 import os
 import platform
 
-print "Inside the Config SConscript"
+project_version = '1.3.0'
+
 # Map of host os and allowed target os (host: allowed target os)
 host_target_map = {
-        'linux': ['linux', 'android', 'arduino', 'yocto', 'tizen'],
-        'windows': ['windows', 'android', 'arduino', 'tizen'],
-        'darwin': ['darwin', 'ios', 'android', 'arduino'],
-        }
+    'linux': ['linux', 'android', 'arduino', 'yocto', 'tizen'],
+    'windows': ['windows', 'android', 'arduino'],
+    'darwin': ['darwin', 'ios', 'android', 'arduino'],
+    'msys_nt' :['msys_nt'],
+}
 
 # Map of os and allowed archs (os: allowed archs)
 os_arch_map = {
-        'linux': ['x86', 'x86_64', 'arm', 'arm64'],
-        'android': ['x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'armeabi-v7a-hard', 'arm64-v8a'],
-        'windows': ['x86', 'amd64', 'arm'],
-        'darwin': ['i386', 'x86_64'],
-        'ios': ['i386', 'x86_64', 'armv7', 'armv7s', 'arm64'],
-        'arduino': ['avr', 'arm'],
-                'yocto': ['x86', 'x86_64'],
-        'tizen': ['armv7'],
-        }
+    'linux': ['x86', 'x86_64', 'arm', 'arm-v7a', 'armeabi-v7a', 'arm64', 'mips', 'mipsel', 'mips64', 'mips64el', 'i386', 'powerpc', 'sparc', 'aarch64'],
+    'tizen': ['x86', 'x86_64', 'arm', 'arm-v7a', 'armeabi-v7a', 'arm64'],
+    'android': ['x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'armeabi-v7a-hard', 'arm64-v8a'],
+    'windows': ['x86', 'amd64', 'arm'],
+    'msys_nt':['x86', 'x86_64'],
+    'darwin': ['i386', 'x86_64'],
+    'ios': ['i386', 'x86_64', 'armv7', 'armv7s', 'arm64'],
+    'arduino': ['avr', 'arm'],
+    'yocto': ['i586', 'i686', 'x86_64', 'arm', 'aarch64', 'powerpc', 'powerpc64', 'mips', 'mipsel'],
+}
 
 host = platform.system().lower()
 
+# the host string contains version of windows. 6.3, 6.4, 10.0 which is 8.0, 8.1, and 10 respectively.
+# Let's canonicalize the msys_nt-XX.X system name by stripping version off.
+if 'msys_nt' in host:
+    host = 'msys_nt'
+
 if host not in host_target_map:
     print "\nError: Current system (%s) isn't supported\n" % host
     Exit(1)
@@ -60,27 +68,110 @@ if target_os not in host_target_map[host]:
     print "\nError: Unknown target os: %s (Allow values: %s)\n" % (target_os, host_target_map[host])
     Exit(1)
 
-default_arch = platform.machine()
-if default_arch not in os_arch_map[target_os]:
-    default_arch = os_arch_map[target_os][0].lower()
+if target_os == 'android':
+    default_arch = 'x86'
+else:
+    default_arch = platform.machine()
+    if target_os == 'windows':
+        default_arch = default_arch.lower()
 
 target_arch = ARGUMENTS.get('TARGET_ARCH', default_arch) # target arch
 
+# True if binary needs to be installed on board. (Might need root permissions)
+# set to 'no', 'false' or 0 for only compilation
+require_upload = ARGUMENTS.get('UPLOAD', False)
+
+# Get the device name. This name can be used as network display name wherever possible
+device_name = ARGUMENTS.get('DEVICE_NAME', "OIC-DEVICE")
+
+default_with_upstream_libcoap = 0
+
+if ARGUMENTS.get('TEST'):
+    logging_default = False
+else:
+    release_mode = False
+    if ARGUMENTS.get('RELEASE', True) in ['y', 'yes', 'true', 't', '1', 'on', 'all', True]:
+        release_mode = True
+    logging_default = (release_mode == False)
+
+# targets that do not support the DTLS build (SECURED=1 build option)
+targets_without_dtls_support = ['arduino'];
+if ARGUMENTS.get('SECURED') == '1' and target_os in targets_without_dtls_support:
+       print "\nError: DTLS not supported on target os: %s MUST build with SECURED=0\n" % (target_os)
+       Exit(1)
+
 ######################################################################
 # Common build options (release, target os, target arch)
 ######################################################################
+targets_disallow_multitransport = ['arduino']
+
 help_vars = Variables()
+
+help_vars.Add('PROJECT_VERSION', 'The version of IoTivity', project_version)
+
+help_vars.Add(BoolVariable('VERBOSE', 'Show compilation', False))
 help_vars.Add(BoolVariable('RELEASE', 'Build for release?', True)) # set to 'no', 'false' or 0 for debug
 help_vars.Add(EnumVariable('TARGET_OS', 'Target platform', host, host_target_map[host]))
-help_vars.Add(ListVariable('TARGET_TRANSPORT', 'Target transport', 'ALL', ['ALL', 'IP', 'BT', 'BLE']))
+
+
+help_vars.Add(BoolVariable('WITH_RA', 'Build with Remote Access module', False))
+help_vars.Add(BoolVariable('WITH_TCP', 'Build with TCP adapter', False))
+help_vars.Add(BoolVariable('WITH_PROXY', 'Build with CoAP-HTTP Proxy', False))
+help_vars.Add(ListVariable('WITH_MQ', 'Build with MQ publisher/broker', 'OFF', ['OFF', 'SUB', 'PUB', 'BROKER']))
+help_vars.Add(BoolVariable('WITH_CLOUD', 'Build including AccountManager class and Cloud Client sample', False))
+help_vars.Add(ListVariable('RD_MODE', 'Resource Directory build mode', 'CLIENT', ['CLIENT', 'SERVER']))
+
+help_vars.Add(BoolVariable('SIMULATOR', 'Build with simulator module', False))
+
+help_vars.Add(BoolVariable('WITH_RA_IBB', 'Build with Remote Access module(workssys)', False))
+
+
+if target_os in targets_disallow_multitransport:
+    help_vars.Add(ListVariable('TARGET_TRANSPORT', 'Target transport', 'IP', ['BT', 'BLE', 'IP', 'NFC']))
+else:
+    help_vars.Add(ListVariable('TARGET_TRANSPORT', 'Target transport', 'ALL', ['ALL', 'BT', 'BLE', 'IP', 'NFC']))
+
 help_vars.Add(EnumVariable('TARGET_ARCH', 'Target architecture', default_arch, os_arch_map[target_os]))
-help_vars.Add(EnumVariable('SECURED', 'Build with DTLS', '1', allowed_values=('0', '1')))
+if target_os in targets_without_dtls_support:
+    help_vars.Add(EnumVariable('SECURED', 'Build with DTLS', '0', allowed_values=('0', '1')))
+else:
+    help_vars.Add(EnumVariable('SECURED', 'Build with DTLS', '1', allowed_values=('0', '1')))
+help_vars.Add(EnumVariable('MULTIPLE_OWNER', 'Enable multiple owner', '0', allowed_values=('0', '1')))
+help_vars.Add(EnumVariable('EXC_PROV_SUPPORT', 'Except OCPMAPI library(libocpmapi.so)', '0', allowed_values=('0', '1')))
+help_vars.Add(EnumVariable('TEST', 'Run unit tests', '0', allowed_values=('0', '1')))
+help_vars.Add(BoolVariable('LOGGING', 'Enable stack logging', logging_default))
+help_vars.Add(EnumVariable('LOG_LEVEL', 'Enable stack logging level', 'DEBUG', allowed_values=('DEBUG', 'INFO', 'ERROR', 'WARNING', 'FATAL')))
+help_vars.Add(BoolVariable('UPLOAD', 'Upload binary ? (For Arduino)', require_upload))
 help_vars.Add(EnumVariable('ROUTING', 'Enable routing', 'EP', allowed_values=('GW', 'EP')))
+help_vars.Add(EnumVariable('BUILD_SAMPLE', 'Build with sample', 'ON', allowed_values=('ON', 'OFF')))
+help_vars.AddVariables(('DEVICE_NAME', 'Network display name for device (For Arduino)', device_name, None, None),)
+help_vars.Add(PathVariable('ANDROID_NDK', 'Android NDK path', None, PathVariable.PathAccept))
+help_vars.Add(PathVariable('ANDROID_HOME', 'Android SDK path', None, PathVariable.PathAccept))
+help_vars.Add(PathVariable('ANDROID_GRADLE', 'Gradle binary file', None, PathVariable.PathIsFile))
+help_vars.Add(EnumVariable('WITH_UPSTREAM_LIBCOAP', 'Use latest stable version of LibCoAP downloaded from github', default_with_upstream_libcoap, allowed_values=('0','1')))
+help_vars.Add(BoolVariable('WITH_ENV', 'Use compiler options from environment', False))
+
+if target_os == 'windows':
+       # For VS2013, MSVC_VERSION is '12.0'. For VS2015, MSVC_VERSION is '14.0'.
+       # Default value is None, meaning that SCons has to choose automatically a VS version.
+       help_vars.Add(EnumVariable('MSVC_VERSION', 'MSVC compiler version - Windows', None, allowed_values=('12.0', '14.0')))
+
+help_vars.Add(BoolVariable('BUILD_JAVA', 'Build Java bindings', False))
+help_vars.Add(PathVariable('JAVA_HOME', 'JDK directory', os.environ.get('JAVA_HOME'), PathVariable.PathAccept))
+help_vars.Add(EnumVariable('OIC_SUPPORT_TIZEN_TRACE', 'Tizen Trace(T-trace) api availability', 'False', allowed_values=('True', 'False')))
+
+AddOption('--prefix',
+                  dest='prefix',
+                  type='string',
+                  nargs=1,
+                  action='store',
+                  metavar='DIR',
+                  help='installation prefix')
 
 ######################################################################
 # Platform(build target) specific options: SDK/NDK & toolchain
 ######################################################################
-targets_support_cc = ['tizen']
+targets_support_cc = ['linux', 'arduino', 'tizen']
 
 if target_os in targets_support_cc:
     # Set cross compile toolchain
@@ -91,13 +182,40 @@ if target_os in targets_support_cc:
 
 if target_os in ['android', 'arduino']: # Android/Arduino always uses GNU compiler regardless of the host
     env = Environment(variables = help_vars,
-            tools = ['gnulink', 'gcc', 'g++', 'ar', 'as']
+            tools = ['gnulink', 'gcc', 'g++', 'ar', 'as', 'textfile']
             )
 else:
-    env = Environment(variables = help_vars, TARGET_ARCH = target_arch, TARGET_OS = target_os)
-
+    env = Environment(variables = help_vars, tools = ['default', 'textfile'],
+            TARGET_ARCH = target_arch, TARGET_OS = target_os,
+            PREFIX = GetOption('prefix'),
+            LIB_INSTALL_DIR = ARGUMENTS.get('LIB_INSTALL_DIR') #for 64bit build
+            )
 Help(help_vars.GenerateHelpText(env))
 
+if env.get('WITH_ENV'):
+    env['ENV'] = os.environ
+    if 'CC' in os.environ:
+        env['CC'] = Split(os.environ['CC'])
+        print "using CC from environment: %s" % env['CC']
+    if 'CXX' in os.environ:
+        env['CXX'] = Split(os.environ['CXX'])
+        print "using CXX from environment: %s" % env['CXX']
+    if 'CFLAGS' in os.environ:
+        env['CFLAGS'] = Split(os.environ['CFLAGS'])
+        print "using CFLAGS from environment: %s" % env['CFLAGS']
+    if 'CXXFLAGS' in os.environ:
+        env['CXXFLAGS'] = Split(os.environ['CXXFLAGS'])
+        print "using CXXFLAGS from environment: %s" % env['CXXFLAGS']
+    if 'CCFLAGS' in os.environ:
+        env['CCFLAGS'] = Split(os.environ['CCFLAGS'])
+        print "using CCFLAGS from environment: %s" % env['CCFLAGS']
+    if 'CPPFLAGS' in os.environ:
+        env['CPPFLAGS'] = Split(os.environ['CPPFLAGS'])
+        print "using CPPFLAGS from environment: %s" % env['CPPFLAGS']
+    if 'LDFLAGS' in os.environ:
+        env['LINKFLAGS'] = Split(os.environ['LDFLAGS'])
+        print "using LDFLAGS/LINKFLAGS from environment: %s" % env['LINKFLAGS']
+
 tc_set_msg = '''
 ************************************ Warning **********************************
 *   Environment variable TC_PREFIX/TC_PATH is set. It will change the default *
@@ -105,17 +223,25 @@ tc_set_msg = '''
 * cause inexplicable errors.                                                  *
 *******************************************************************************
 '''
+if env.get('VERBOSE') == False:
+    env['CCCOMSTR'] = "Compiling $TARGET"
+    env['SHCCCOMSTR'] = "Compiling $TARGET"
+    env['CXXCOMSTR'] = "Compiling $TARGET"
+    env['SHCXXCOMSTR'] = "Compiling $TARGET"
+    env['LINKCOMSTR'] = "Linking $TARGET"
+    env['SHLINKCOMSTR'] = "Linking $TARGET"
+    env['ARCOMSTR'] = "Archiving $TARGET"
+    env['RANLIBCOMSTR'] = "Indexing Archive $TARGET"
 
 if target_os in targets_support_cc:
     prefix = env.get('TC_PREFIX')
     tc_path = env.get('TC_PATH')
     if prefix:
-        env.Replace(CC = prefix + 'gcc')
-        env.Replace(CXX = prefix + 'g++')
-        env.Replace(AR = prefix + 'ar')
-        env.Replace(AS = prefix + 'as')
-        env.Replace(LINK = prefix + 'ld')
-        env.Replace(RANLIB = prefix + 'ranlib')
+        env.Replace(CC = prefix + env.get('CC', 'gcc'))
+        env.Replace(CXX = prefix + env.get('CXX', 'g++'))
+        env.Replace(AR = prefix + env.get('AR', 'ar'))
+        env.Replace(AS = prefix + env.get('AS', 'as'))
+        env.Replace(RANLIB = prefix + env.get('RANLIB', 'ranlib'))
 
     if tc_path:
         env.PrependENVPath('PATH', tc_path)
@@ -126,6 +252,20 @@ if target_os in targets_support_cc:
     if prefix or tc_path:
         print tc_set_msg
 
+# Import env variables only if reproductibility is ensured
+if target_os in ['yocto']:
+    env['CONFIG_ENVIRONMENT_IMPORT'] = True
+else:
+    env['CONFIG_ENVIRONMENT_IMPORT'] = False
+
+if env['CONFIG_ENVIRONMENT_IMPORT'] == True:
+    print "warning: importing some environment variables for OS: %s" % target_os
+    for ev in ['PATH', 'PKG_CONFIG', 'PKG_CONFIG_PATH', 'PKG_CONFIG_SYSROOT_DIR']:
+        if os.environ.get(ev) != None:
+            env['ENV'][ev] = os.environ.get(ev)
+    if os.environ['LDFLAGS'] != None:
+        env.AppendUnique(LINKFLAGS = Split(os.environ['LDFLAGS']))
+
 # Ensure scons be able to change its working directory
 env.SConscriptChdir(1)
 
@@ -167,8 +307,49 @@ def __install(ienv, targets, name):
     Alias(name, i_n)
     env.AppendUnique(TS = [name])
 
-def __append_target(ienv, target):
-    env.AppendUnique(TS = [target])
+def __installlib(ienv, targets, name):
+    user_prefix = env.get('PREFIX')
+    if user_prefix:
+        user_lib = env.get('LIB_INSTALL_DIR')
+        if user_lib:
+            i_n = ienv.Install(user_lib, targets)
+        else:
+            i_n = ienv.Install(user_prefix + '/lib', targets)
+        ienv.Alias("install", i_n)
+    else:
+        i_n = ienv.Install(env.get('BUILD_DIR'), targets)
+    ienv.Alias("install", i_n)
+
+def __installbin(ienv, targets, name):
+    user_prefix = env.get('PREFIX')
+    if user_prefix:
+        i_n = ienv.Install(user_prefix + '/bin', targets)
+        ienv.Alias("install", i_n)
+
+def __installheader(ienv, targets, dir, name):
+    user_prefix = env.get('PREFIX')
+    if user_prefix:
+        i_n = ienv.Install(user_prefix + '/include/' + dir ,targets)
+    else:
+        i_n = ienv.Install(os.path.join(env.get('BUILD_DIR'), 'include', dir), targets)
+    ienv.Alias("install", i_n)
+
+def __installpcfile(ienv, targets, name):
+    user_prefix = env.get('PREFIX')
+    if user_prefix:
+        user_lib = env.get('LIB_INSTALL_DIR')
+        if user_lib:
+            i_n = ienv.Install(user_lib + '/pkgconfig', targets)
+        else:
+            i_n = ienv.Install(user_prefix + '/lib/pkgconfig', targets)
+    else:
+        i_n = ienv.Install(env.get('BUILD_DIR') + 'lib/pkgconfig', targets)
+    ienv.Alias("install", i_n)
+
+def __append_target(ienv, name, targets = None):
+    if targets:
+        env.Alias(name, targets)
+    env.AppendUnique(TS = [name])
 
 def __print_targets(env):
     Help('''
@@ -188,18 +369,246 @@ env.AddMethod(__print_targets, 'PrintTargets')
 env.AddMethod(__src_to_obj, 'SrcToObj')
 env.AddMethod(__append_target, 'AppendTarget')
 env.AddMethod(__install, 'InstallTarget')
+env.AddMethod(__installlib, 'UserInstallTargetLib')
+env.AddMethod(__installbin, 'UserInstallTargetBin')
+env.AddMethod(__installheader, 'UserInstallTargetHeader')
+env.AddMethod(__installpcfile, 'UserInstallTargetPCFile')
 env.SetDir(env.GetLaunchDir())
-env['ROOT_DIR']=env.GetLaunchDir()
-
-env.AppendUnique(CPPDEFINES = ['TB_LOG'])
-env.AppendUnique(CPPDEFINES = ['__TIZEN__'])
+env['ROOT_DIR']=env.GetLaunchDir()+'/..'
 
 Export('env')
 
 ######################################################################
-# continue with the regular build process. Load config of target os
+# Scons to generate the iotivity.pc file from iotivity.pc.in file
 ######################################################################
-env.SConscript(target_os + '/SConscript')
+pc_file = env.get('SRC_DIR') + '/iotivity.pc.in'
+
+user_prefix = env.get('PREFIX')
+user_lib = env.get('LIB_INSTALL_DIR')
+
+if not user_prefix:
+    user_prefix = env.get('BUILD_DIR').encode('string_escape')
+
+if not user_lib:
+    user_lib = '$${prefix}/lib'
+
+defines = []
+if env.get('LOGGING'):
+    defines.append('-DTB_LOG=1')
+
+if env.get('ROUTING') == 'GW':
+    defines.append('-DROUTING_GATEWAY=1')
+elif env.get('ROUTING') == 'EP':
+    defines.append('-DROUTING_EP=1')
+
+libs = []
+if env.get('WITH_TCP'):
+    defines.append('-DTCP_ADAPTER=1')
+    if env.get('SECURED') == '1':
+        defines.append('-D__WITH_TLS__=1')
+
+if env.get('SECURED') == '1':
+    defines.append('-D__WITH_DTLS__=1')
+    if env.get('EXC_PROV_SUPPORT') == '0':
+        libs.append('-locpmapi')
+
+pc_vars = {
+    '\@VERSION\@': project_version,
+    '\@PREFIX\@': user_prefix,
+    '\@EXEC_PREFIX\@': user_prefix,
+    '\@LIB_INSTALL_DIR\@': user_lib,
+    '\@DEFINES\@': " ".join(defines),
+    '\@LIBS\@': " ".join(libs)
+}
+
+env.Substfile(pc_file, SUBST_DICT = pc_vars)
+
+######################################################################
+# Setting global compiler flags
+######################################################################
+target_transport = env.get('TARGET_TRANSPORT')
+with_mq = env.get('WITH_MQ')
+with_ra = env.get('WITH_RA')
+with_tcp = env.get('WITH_TCP')
+rd_mode = env.get('RD_MODE')
+with_ra_ibb = env.get('WITH_RA_IBB')
+
+env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
+
+if (env.get('WITH_UPSTREAM_LIBCOAP') == '1'):
+    env.AppendUnique(CPPDEFINES = ['WITH_UPSTREAM_LIBCOAP'])
+
+if (target_os not in ['arduino', 'windows']):
+    env.AppendUnique(CPPDEFINES = ['WITH_POSIX'])
+
+if (target_os in ['darwin','ios']):
+    env.AppendUnique(CPPDEFINES = ['_DARWIN_C_SOURCE'])
+
+if (env.get('SECURED') == '1'):
+    env.AppendUnique(CPPDEFINES = ['__WITH_DTLS__'])
+
+if ((env.get('SECURED') == '1') and with_tcp):
+    env.AppendUnique(CPPDEFINES = ['__WITH_TLS__'])
+
+if (env.get('MULTIPLE_OWNER') == '1'):
+    env.AppendUnique(CPPDEFINES=['MULTIPLE_OWNER'])
+
+if (env.get('ROUTING') == 'GW'):
+    env.AppendUnique(CPPDEFINES = ['ROUTING_GATEWAY'])
+elif (env.get('ROUTING') == 'EP'):
+    env.AppendUnique(CPPDEFINES = ['ROUTING_EP'])
+
+if (target_os == 'arduino'):
+    env.AppendUnique(CPPDEFINES = ['SINGLE_THREAD'])
+    env.AppendUnique(CPPDEFINES = ['WITH_ARDUINO'])
+elif (('IP' in target_transport) or ('ALL' in target_transport)):
+        env.AppendUnique(CPPDEFINES = ['WITH_BWT'])
+
+if (target_os in ['linux', 'tizen', 'android'] and with_tcp):
+    env.AppendUnique(CPPDEFINES = ['WITH_TCP'])
+
+if (target_os in ['linux', 'tizen', 'android', 'arduino', 'ios']):
+    if (('BLE' in target_transport) or ('BT' in target_transport) or ('ALL' in target_transport)):
+        env.AppendUnique(CPPDEFINES = ['WITH_TCP'])
+
+if 'ALL' in target_transport:
+    if with_ra:
+        env.AppendUnique(CPPDEFINES = ['RA_ADAPTER'])
+    if with_tcp:
+        env.AppendUnique(CPPDEFINES = ['TCP_ADAPTER'])
+    if (target_os in ['linux', 'yocto']):
+        env.AppendUnique(CPPDEFINES = ['IP_ADAPTER', 'NO_EDR_ADAPTER', 'LE_ADAPTER'])
+    elif (target_os == 'android'):
+        env.AppendUnique(CPPDEFINES = ['IP_ADAPTER', 'EDR_ADAPTER', 'LE_ADAPTER', 'NFC_ADAPTER'])
+    elif (target_os in['darwin', 'ios', 'msys_nt', 'windows']):
+        env.AppendUnique(CPPDEFINES = ['IP_ADAPTER', 'NO_EDR_ADAPTER', 'NO_LE_ADAPTER'])
+    else:
+        env.AppendUnique(CPPDEFINES = ['IP_ADAPTER', 'EDR_ADAPTER', 'LE_ADAPTER'])
+else:
+    if ('BT' in target_transport):
+        if (target_os == 'linux'):
+            print "CA Transport BT is not supported "
+            Exit(1)
+        else:
+            env.AppendUnique(CPPDEFINES = ['EDR_ADAPTER'])
+    else:
+        env.AppendUnique(CPPDEFINES = ['NO_EDR_ADAPTER'])
+
+    if ('BLE' in target_transport):
+        env.AppendUnique(CPPDEFINES = ['LE_ADAPTER'])
+    else:
+        env.AppendUnique(CPPDEFINES = ['NO_LE_ADAPTER'])
+
+    if ('IP' in target_transport):
+        env.AppendUnique(CPPDEFINES = ['IP_ADAPTER'])
+    else:
+        env.AppendUnique(CPPDEFINES = ['NO_IP_ADAPTER'])
+
+    if with_tcp:
+        if (target_os in ['linux', 'tizen', 'android', 'arduino', 'ios', 'windows']):
+            env.AppendUnique(CPPDEFINES = ['TCP_ADAPTER', 'WITH_TCP'])
+        else:
+            print "CA Transport TCP is not supported "
+            Exit(1)
+    else:
+        env.AppendUnique(CPPDEFINES = ['NO_TCP_ADAPTER'])
+
+    if ('NFC' in target_transport):
+        if (target_os == 'android'):
+            env.AppendUnique(CPPDEFINES = ['NFC_ADAPTER'])
+        else:
+            print "CA Transport NFC is not supported "
+            Exit(1)
+    else:
+        env.AppendUnique(CPPDEFINES = ['NO_NFC_ADAPTER'])
+
+if ('SUB' in with_mq):
+    env.AppendUnique(CPPDEFINES = ['MQ_SUBSCRIBER', 'WITH_MQ'])
+
+if ('PUB' in with_mq):
+    env.AppendUnique(CPPDEFINES = ['MQ_PUBLISHER', 'WITH_MQ'])
+
+if ('BROKER' in with_mq):
+    env.AppendUnique(CPPDEFINES = ['MQ_BROKER', 'WITH_MQ'])
+
+if env.get('LOGGING'):
+    env.AppendUnique(CPPDEFINES = ['TB_LOG'])
+
+if env.get('WITH_CLOUD') and with_tcp:
+    env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
+
+if 'CLIENT' in rd_mode:
+    env.AppendUnique(CPPDEFINES = ['RD_CLIENT'])
+
+if 'SERVER' in rd_mode:
+    env.AppendUnique(CPPDEFINES = ['RD_SERVER'])
+
+if with_ra_ibb:
+    env.AppendUnique(CPPDEFINES = ['RA_ADAPTER_IBB'])
+######################################################################
+# Link scons to Yocto cross-toolchain ONLY when target_os is yocto
+######################################################################
+if target_os == "yocto":
+    '''
+    This code injects Yocto cross-compilation tools+flags into scons'
+    build environment in order to invoke the relevant tools while
+    performing a build.
+    '''
+    import os.path
+    try:
+        CC = os.environ['CC']
+        target_prefix = CC.split()[0]
+        target_prefix = target_prefix[:len(target_prefix)-3]
+        tools = {"CC" : target_prefix+"gcc",
+                "CXX" : target_prefix+"g++",
+                "AS" : target_prefix+"as",
+                "LD" : target_prefix+"ld",
+                "GDB" : target_prefix+"gdb",
+                "STRIP" : target_prefix+"strip",
+                "RANLIB" : target_prefix+"ranlib",
+                "OBJCOPY" : target_prefix+"objcopy",
+                "OBJDUMP" : target_prefix+"objdump",
+                "AR" : target_prefix+"ar",
+                "NM" : target_prefix+"nm",
+                "M4" : "m4",
+                "STRINGS": target_prefix+"strings"}
+        PATH = os.environ['PATH'].split(os.pathsep)
+        for tool in tools:
+            if tool in os.environ:
+                for path in PATH:
+                    if os.path.isfile(os.path.join(path, tools[tool])):
+                        env[tool] = os.path.join(path, os.environ[tool])
+                        break
+        env['CROSS_COMPILE'] = target_prefix[:len(target_prefix) - 1]
+    except:
+        print "ERROR in Yocto cross-toolchain environment"
+        Exit(1)
+    '''
+    Now reset TARGET_OS to linux so that all linux specific build configurations
+    hereupon apply for the entirety of the build process.
+    '''
+    env['TARGET_OS'] = 'linux'
+    '''
+    We want to preserve debug symbols to allow BitBake to generate both DEBUG and
+    RELEASE packages for OIC.
+    '''
+    env.AppendUnique(CCFLAGS = ['-g'])
+    '''
+    Additional flags to pass to the Yocto toolchain.
+    '''
+    if env.get('RELEASE'):
+        env.AppendUnique(CPPDEFINES = ['NDEBUG'])
+    env.AppendUnique(CPPDEFINES = ['__linux__', '_GNU_SOURCE'])
+    env.AppendUnique(CFLAGS = ['-std=gnu99'])
+    env.AppendUnique(CCFLAGS = ['-Wall', '-Wextra', '-fPIC'])
+    env.AppendUnique(LIBS = ['dl', 'pthread', 'uuid'])
+    Export('env')
+else:
+    '''
+    If target_os is not Yocto, continue with the regular build process
+    '''
+    # Load config of target os
+    env.SConscript(target_os + '/SConscript')
 
 # Delete the temp files of configuration
 if env.GetOption('clean'):
@@ -207,8 +616,30 @@ if env.GetOption('clean'):
 
     if os.path.exists(dir + '/config.log'):
         Execute(Delete(dir + '/config.log'))
+    if os.path.exists(dir + '/.sconsign.dblite'):
         Execute(Delete(dir + '/.sconsign.dblite'))
+    if os.path.exists(dir + '/.sconf_temp'):
         Execute(Delete(dir + '/.sconf_temp'))
 
-Return('env')
+######################################################################
+# Check for PThreads support
+######################################################################
+import iotivityconfig
+from iotivityconfig import *
+
+conf = Configure(env,
+        custom_tests =
+        {
+            'CheckPThreadsSupport' : iotivityconfig.check_pthreads
+        } )
 
+# Identify whether we have pthreads support, which is necessary for
+# threading and mutexes.  This will set the environment variable
+# POSIX_SUPPORTED, 1 if it is supported, 0 otherwise
+conf.CheckPThreadsSupport()
+
+env = conf.Finish()
+######################################################################
+
+#env.SConscript('external_libs.scons')
+Return('env')
index b00216e..2dd87a8 100644 (file)
@@ -35,7 +35,6 @@ cp -R ./extlibs/cjson $sourcedir/tmp/extlibs
 cp -R ./extlibs/mbedtls $sourcedir/tmp/extlibs
 cp -R ./extlibs/gtest $sourcedir/tmp/extlibs
 cp -LR ./extlibs/sqlite3 $sourcedir/tmp/extlibs
-cp -R ./extlibs/timer $sourcedir/tmp/extlibs
 cp -R ./extlibs/rapidxml $sourcedir/tmp/extlibs
 cp -R ./extlibs/libcoap $sourcedir/tmp/extlibs
 cp -R ./resource $sourcedir/tmp
@@ -51,6 +50,9 @@ cp ./tools/tizen/*.rpm ./tmp
 cp ./tools/tizen/.gbs.conf ./tmp
 cp ./tools/tizen/*.rpm $sourcedir/tmp/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample
 cp ./tools/tizen/.gbs.conf ./tmp/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample
+cp -R ./build_common/tizen ./tmp/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample
+cp -R ./build_common/iotivityconfig ./tmp/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample
+cp -R ./iotivity.pc.in ./tmp/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample
 
 cp -R $sourcedir/iotivity.pc.in $sourcedir/tmp
 
index e849bab..6e7497f 100644 (file)
@@ -19,6 +19,25 @@ Source0: http://mirrors.kernel.org/%{name}/%{version}/%{name}-%{version}.tar.gz
 %en_speedpython
 %endif
 
+%ifarch armv7l armv7hl armv7nhl armv7tnhl armv7thl
+%if 3 <= 0%{?tizen_version_major}
+BuildRequires: python-accel-armv7l-cross-arm
+%endif
+%define TARGET_ARCH "armeabi-v7a"
+%endif
+%ifarch aarch64
+%if 3 <= 0%{?tizen_version_major}
+BuildRequires: python-accel-aarch64-cross-aarch64
+%endif
+%define TARGET_ARCH "arm64"
+%endif
+%ifarch x86_64
+%define TARGET_ARCH "x86_64"
+%endif
+%ifarch %{ix86}
+%define TARGET_ARCH "x86"
+%endif
+
 # Default values to be eventually overiden BEFORE or as gbs params:
 %{!?ES_TARGET_ENROLLEE: %define ES_TARGET_ENROLLEE tizen}
 %{!?LOGGING: %define LOGGING 1}
@@ -26,6 +45,7 @@ Source0: http://mirrors.kernel.org/%{name}/%{version}/%{name}-%{version}.tar.gz
 %{!?ROUTING: %define ROUTING EP}
 %{!?SECURED: %define SECURED 0}
 %{!?TARGET_OS: %define TARGET_OS tizen}
+%{!?TARGET_ARCH: %define TARGET_ARCH %{_arch}}
 %{!?TARGET_TRANSPORT: %define TARGET_TRANSPORT IP}
 %{!?VERBOSE: %define VERBOSE 1}
 
@@ -67,6 +87,7 @@ scons %{JOB} --prefix=%{_prefix} \
     ROUTING=%{ROUTING} \
     SECURED=%{SECURED} \
     TARGET_OS=%{TARGET_OS} \
+    TARGET_ARCH=%{TARGET_ARCH} \
     TARGET_TRANSPORT=%{TARGET_TRANSPORT} \
     VERBOSE=%{VERBOSE} \
     #eol
index d588e2b..afe5304 100644 (file)
@@ -29,8 +29,8 @@ root_dir = env.get('ROOT_DIR')
 build_dir = env.get('BUILD_DIR')
 sample_dir = build_dir
 
-env.ParseConfig("pkg-config --cflags --libs capi-network-wifi dlog gobject-2.0 gio-2.0 gthread-2.0 glib-2.0")
-env.AppendUnique(CPPFLAGS = ['-fPIC', '-D__TIZEN__','-DWITH_POSIX', '-Wall', '-DSLP_SDK_LOG', '-g','-D_GNU_SOURCE','-DTIZEN_DEBUG_ENABLE', '-DTB_LOG','`pkg-config', '--cflags', '--libs','dlog','capi-network-wifi',
+env.ParseConfig("pkg-config --cflags --libs capi-network-wifi dlog gobject-2.0 gio-2.0 gthread-2.0 glib-2.0 iotivity")
+env.AppendUnique(CPPFLAGS = ['-fPIC', '-D__TIZEN__','-DWITH_POSIX', '-Wall', '-DSLP_SDK_LOG', '-g','-D_GNU_SOURCE','-DTIZEN_DEBUG_ENABLE', '-DTB_LOG','`pkg-config', '--cflags', '--libs', 'iotivity', 'dlog','capi-network-wifi',
                 'gobject-2.0', 'gio-2.0', 'gthread-2.0', 'glib-2.0`'])
 
 env.AppendUnique(CPPDEFINES = ['TB_LOG'])