'linux': ['linux', 'android', 'arduino', 'yocto', 'tizen'],
'windows': ['windows', 'android', 'arduino'],
'darwin': ['darwin', 'ios', 'android', 'arduino'],
- 'msys_nt' :['msys_nt'],
+ 'msys_nt': ['msys_nt'],
}
# Map of os and allowed archs (os: allowed archs)
os_arch_map = {
- 'linux': ['x86', 'x86_64', 'arm', 'arm-v7a', 'armeabi-v7a', 'arm64', 'mips', 'mipsel', 'mips64', 'mips64el', 'i386', 'powerpc', 'sparc', 'aarch64'],
+ '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'],
+ 'android': [
+ 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'armeabi-v7a-hard',
+ 'arm64-v8a'
+ ],
'windows': ['x86', 'amd64', 'arm'],
- 'msys_nt':['x86', 'x86_64'],
+ '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'],
+ '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.
+# the host string contains internal version of Windows: 6.3, 6.4, 10.0
+# which are externally known as 8.0, 8.1, and 10 respectively.
+# Canonicalize the msys_nt-XX.X system name by stripping version off.
if 'msys_nt' in host:
host = 'msys_nt'
######################################################################
# Get build options (the optins from command line)
######################################################################
-target_os = ARGUMENTS.get('TARGET_OS', host).lower() # target os
+target_os = ARGUMENTS.get('TARGET_OS', host).lower() # target os
if target_os not in host_target_map[host]:
- print "\nError: '%s' host cannot build for '%s' target.\navailable targets: %s\n" % (host, target_os, host_target_map[host])
+ print "\nError: Unsupported target os: %s (available: %s)\n" % (target_os, host_target_map[host])
Exit(1)
if target_os == 'android':
if target_os == 'windows':
default_arch = default_arch.lower()
-target_arch = ARGUMENTS.get('TARGET_ARCH', default_arch) # target arch
+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
logging_default = False
else:
release_mode = False
- if ARGUMENTS.get('RELEASE', True) in ['y', 'yes', 'true', 't', '1', 'on', 'all', True]:
+ 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'];
+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)
+ print "\nError: DTLS not supported on target %s, MUST build with SECURED=0\n" % (target_os)
+ Exit(1)
######################################################################
# Common build options (release, target os, target arch)
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(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', True))
-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))
-
+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,
+ allowed_values=host_target_map[host]))
+
+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',
+ True))
+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']))
+ 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(
+ ListVariable('TARGET_TRANSPORT',
+ 'Target transport',
+ 'ALL',
+ ['ALL', 'BT', 'BLE', 'IP', 'NFC']))
+
+help_vars.Add(
+ EnumVariable('TARGET_ARCH',
+ 'Target architecture',
+ default_arch,
+ allowed_values=os_arch_map[target_os]))
-help_vars.Add(EnumVariable('TARGET_ARCH', 'Target architecture', default_arch, os_arch_map[target_os]))
if target_os in targets_without_dtls_support:
- help_vars.Add(EnumVariable('SECURED', 'Build with DTLS', '0', allowed_values=('0', '1')))
+ 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', '1', 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))
-help_vars.Add(BoolVariable('AUTOMATIC_UPDATE', 'Makes libcoap update automatically to the required versions if needed.', False))
+
+ help_vars.Add(
+ EnumVariable('SECURED',
+ 'Build with DTLS',
+ '1',
+ allowed_values=('0', '1')))
+help_vars.Add(
+ EnumVariable('MULTIPLE_OWNER',
+ 'Enable multiple owner',
+ '1',
+ 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))
+help_vars.Add(
+ BoolVariable('AUTOMATIC_UPDATE',
+ 'Makes libcoap update automatically to the required versions if needed.',
+ 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(EnumVariable('UWP_APP', 'Build for a Universal Windows Platform (UWP) Application', '0', allowed_values=('0', '1')))
-
-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')
+ # 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(EnumVariable(
+ 'UWP_APP',
+ 'Build for a Universal Windows Platform (UWP) Application',
+ '0',
+ allowed_values=('0', '1')))
+
+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
if target_os in targets_support_cc:
# Set cross compile toolchain
- help_vars.Add('TC_PREFIX', "Toolchain prefix (Generally only be required for cross-compiling)", os.environ.get('TC_PREFIX'))
- help_vars.Add(PathVariable('TC_PATH',
- 'Toolchain path (Generally only be required for cross-compiling)',
- os.environ.get('TC_PATH')))
-
-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', 'textfile']
- )
+ help_vars.Add('TC_PREFIX',
+ "Toolchain prefix (Generally only be required for cross-compiling)",
+ os.environ.get('TC_PREFIX'))
+ help_vars.Add(
+ PathVariable('TC_PATH',
+ 'Toolchain path (Generally only be required for cross-compiling)',
+ os.environ.get('TC_PATH')))
+
+# this is where the setup of the construction envionment begins
+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', 'textfile'])
else:
- 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
- )
+ 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))
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 *
-* toolchain, if it isn't what you expect you should unset it, otherwise it may*
-* cause inexplicable errors. *
-*******************************************************************************
-'''
+# set quieter build messages unless verbose mode was requested
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['SHLINKCOMSTR'] = "Linking shared object $TARGET"
env['ARCOMSTR'] = "Archiving $TARGET"
env['RANLIBCOMSTR'] = "Indexing Archive $TARGET"
+tc_set_msg = '''
+************************************ Warning **********************************
+* Warning: TC_PREFIX and/or TC_PATH is set in the environment.
+* This means a non-default compilation toolchain will be used.
+* If this is not what you expected you should unset, or it
+* may lead to unexpected results.
+*******************************************************************************
+'''
if target_os in targets_support_cc:
prefix = env.get('TC_PREFIX')
tc_path = env.get('TC_PATH')
if prefix:
- 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'))
+ 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)
sys_root = os.path.abspath(tc_path + '/../')
- env.AppendUnique(CCFLAGS = ['--sysroot=' + sys_root])
- env.AppendUnique(LINKFLAGS = ['--sysroot=' + sys_root])
+ env.AppendUnique(CCFLAGS=['--sysroot=' + sys_root])
+ env.AppendUnique(LINKFLAGS=['--sysroot=' + sys_root])
if prefix or tc_path:
print tc_set_msg
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']:
+ 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']))
+ env.AppendUnique(LINKFLAGS=Split(os.environ['LDFLAGS']))
-# Ensure scons be able to change its working directory
+# Ensure scons is able to change its working directory
env.SConscriptChdir(1)
-# Set the source directory and build directory
-# Source directory: 'dir'
-# Build directory: 'dir'/out/<target_os>/<target_arch>/<release or debug>/
-# On windows, the build directory will be:
-# 'dir'/out/windows/<win32 or uwp>/<target_arch>/<release or debug>/
-#
-# You can get the directory as following:
-# env.get('SRC_DIR')
-# env.get('BUILD_DIR')
+######################################################################
+# Convenience functions to "extend" SCons
+######################################################################
+
def __set_dir(env, dir):
+ #
+ # Set the source and build directories
+ # Source directory: 'dir'
+ # Build directory: 'dir'/out/<target_os>/<target_arch>/<release or debug>/
+ # On windows, the build directory will be:
+ # 'dir'/out/windows/<win32 or uwp>/<target_arch>/<release or debug>/
+ #
+ # You can get the directory as following:
+ # env.get('SRC_DIR')
+ # env.get('BUILD_DIR')
+ #
if not os.path.exists(dir + '/SConstruct'):
print '''
*************************************** Error *********************************
-* The directory(%s) seems isn't a source code directory, no SConstruct file is
-* found. *
+* The directory (%s) seems not to be a buildable directory,
+* no SConstruct file found.
*******************************************************************************
''' % dir
Exit(1)
env.VariantDir(build_dir, dir, duplicate=0)
- env.Replace(BUILD_DIR = build_dir)
- env.Replace(SRC_DIR = dir)
+ env.Replace(BUILD_DIR=build_dir)
+ env.Replace(SRC_DIR=dir)
-def __src_to_obj(env, src, home = ''):
+
+def __src_to_obj(env, src, home=''):
+ #
+ # make sure builds happen in BUILD_DIR (by default they
+ # would happen in the directory of the source file)
+ # Note this does not seem to be used, VariantDir is used instead
+ #
obj = env.get('BUILD_DIR') + src.replace(home, '')
if env.get('OBJSUFFIX'):
obj += env.get('OBJSUFFIX')
return env.Object(obj, src)
+
def __install(ienv, targets, name):
i_n = ienv.Install(env.get('BUILD_DIR'), targets)
Alias(name, i_n)
- env.AppendUnique(TS = [name])
+ env.AppendUnique(TS=[name])
+
def __installlib(ienv, targets, name):
user_prefix = env.get('PREFIX')
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)
+ i_n = ienv.Install(user_prefix + '/include/' + dir, targets)
else:
- i_n = ienv.Install(os.path.join(env.get('BUILD_DIR'), 'include', dir), targets)
+ 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:
i_n = ienv.Install(env.get('BUILD_DIR') + 'lib/pkgconfig', targets)
ienv.Alias("install", i_n)
-def __append_target(ienv, name, targets = None):
+
+def __append_target(ienv, name, targets=None):
if targets:
env.Alias(name, targets)
- env.AppendUnique(TS = [name])
+ env.AppendUnique(TS=[name])
+
def __print_targets(env):
Help('''
for t in env.get('TS'):
Help(t + ' ')
Help('''
-\nDefault all targets will be built. You can specify the target to build:
+
+Default: all targets will be built. You can specify the target to build:
$ scons [options] [target]
===============================================================================
''')
+
env.AddMethod(__set_dir, 'SetDir')
env.AddMethod(__print_targets, 'PrintTargets')
env.AddMethod(__src_to_obj, 'SrcToObj')
env.AddMethod(__installheader, 'UserInstallTargetHeader')
env.AddMethod(__installpcfile, 'UserInstallTargetPCFile')
env.SetDir(env.GetLaunchDir())
-env['ROOT_DIR']=env.GetLaunchDir()+'/..'
+env['ROOT_DIR'] = env.GetLaunchDir() + '/..'
Export('env')
-######################################################################
-# Scons to generate the iotivity.pc file from iotivity.pc.in file
+####################################################################i#
+# Generate the iotivity.pc file from iotivity.pc.in file
######################################################################
pc_file = env.get('SRC_DIR') + '/iotivity.pc.in'
'\@LIBS\@': " ".join(libs)
}
-env.Substfile(pc_file, SUBST_DICT = pc_vars)
+env.Substfile(pc_file, SUBST_DICT=pc_vars)
######################################################################
# Setting global compiler flags
env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
if (env.get('WITH_UPSTREAM_LIBCOAP') == '1'):
- env.AppendUnique(CPPDEFINES = ['WITH_UPSTREAM_LIBCOAP'])
+ env.AppendUnique(CPPDEFINES=['WITH_UPSTREAM_LIBCOAP'])
if (target_os not in ['arduino', 'windows']):
- env.AppendUnique(CPPDEFINES = ['WITH_POSIX'])
+ env.AppendUnique(CPPDEFINES=['WITH_POSIX'])
-if (target_os in ['darwin','ios']):
- env.AppendUnique(CPPDEFINES = ['_DARWIN_C_SOURCE'])
+if (target_os in ['darwin', 'ios']):
+ env.AppendUnique(CPPDEFINES=['_DARWIN_C_SOURCE'])
if (env.get('SECURED') == '1'):
- env.AppendUnique(CPPDEFINES = ['__WITH_DTLS__'])
+ env.AppendUnique(CPPDEFINES=['__WITH_DTLS__'])
if ((env.get('SECURED') == '1') and with_tcp):
- env.AppendUnique(CPPDEFINES = ['__WITH_TLS__'])
+ 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'])
+ env.AppendUnique(CPPDEFINES=['ROUTING_GATEWAY'])
elif (env.get('ROUTING') == 'EP'):
- env.AppendUnique(CPPDEFINES = ['ROUTING_EP'])
+ env.AppendUnique(CPPDEFINES=['ROUTING_EP'])
if (target_os == 'arduino'):
- env.AppendUnique(CPPDEFINES = ['SINGLE_THREAD'])
- env.AppendUnique(CPPDEFINES = ['WITH_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'])
+ env.AppendUnique(CPPDEFINES=['WITH_BWT'])
if (target_os in ['linux', 'tizen', 'android'] and with_tcp):
- env.AppendUnique(CPPDEFINES = ['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 (('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'])
+ env.AppendUnique(CPPDEFINES=['RA_ADAPTER'])
if with_tcp:
- env.AppendUnique(CPPDEFINES = ['TCP_ADAPTER'])
+ env.AppendUnique(CPPDEFINES=['TCP_ADAPTER'])
if (target_os in ['linux', 'yocto']):
- env.AppendUnique(CPPDEFINES = ['IP_ADAPTER', 'NO_EDR_ADAPTER', 'LE_ADAPTER'])
+ 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'])
+ 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'])
+ 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'])
+ env.AppendUnique(CPPDEFINES=['EDR_ADAPTER'])
else:
- env.AppendUnique(CPPDEFINES = ['NO_EDR_ADAPTER'])
+ env.AppendUnique(CPPDEFINES=['NO_EDR_ADAPTER'])
if ('BLE' in target_transport):
- env.AppendUnique(CPPDEFINES = ['LE_ADAPTER'])
+ env.AppendUnique(CPPDEFINES=['LE_ADAPTER'])
else:
- env.AppendUnique(CPPDEFINES = ['NO_LE_ADAPTER'])
+ env.AppendUnique(CPPDEFINES=['NO_LE_ADAPTER'])
if ('IP' in target_transport):
- env.AppendUnique(CPPDEFINES = ['IP_ADAPTER'])
+ env.AppendUnique(CPPDEFINES=['IP_ADAPTER'])
else:
- env.AppendUnique(CPPDEFINES = ['NO_IP_ADAPTER'])
+ 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'])
+ 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'])
+ env.AppendUnique(CPPDEFINES=['NO_TCP_ADAPTER'])
if ('NFC' in target_transport):
if (target_os == 'android'):
- env.AppendUnique(CPPDEFINES = ['NFC_ADAPTER'])
+ env.AppendUnique(CPPDEFINES=['NFC_ADAPTER'])
else:
print "CA Transport NFC is not supported "
Exit(1)
else:
- env.AppendUnique(CPPDEFINES = ['NO_NFC_ADAPTER'])
+ env.AppendUnique(CPPDEFINES=['NO_NFC_ADAPTER'])
if ('SUB' in with_mq):
- env.AppendUnique(CPPDEFINES = ['MQ_SUBSCRIBER', 'WITH_MQ'])
+ env.AppendUnique(CPPDEFINES=['MQ_SUBSCRIBER', 'WITH_MQ'])
if ('PUB' in with_mq):
- env.AppendUnique(CPPDEFINES = ['MQ_PUBLISHER', 'WITH_MQ'])
+ env.AppendUnique(CPPDEFINES=['MQ_PUBLISHER', 'WITH_MQ'])
if ('BROKER' in with_mq):
- env.AppendUnique(CPPDEFINES = ['MQ_BROKER', 'WITH_MQ'])
+ env.AppendUnique(CPPDEFINES=['MQ_BROKER', 'WITH_MQ'])
if env.get('LOGGING'):
- env.AppendUnique(CPPDEFINES = ['TB_LOG'])
+ env.AppendUnique(CPPDEFINES=['TB_LOG'])
if env.get('WITH_CLOUD') and with_tcp:
- env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
+ env.AppendUnique(CPPDEFINES=['WITH_CLOUD'])
if 'CLIENT' in rd_mode:
- env.AppendUnique(CPPDEFINES = ['RD_CLIENT'])
+ env.AppendUnique(CPPDEFINES=['RD_CLIENT'])
if 'SERVER' in rd_mode:
- env.AppendUnique(CPPDEFINES = ['RD_SERVER'])
+ env.AppendUnique(CPPDEFINES=['RD_SERVER'])
if with_ra_ibb:
- env.AppendUnique(CPPDEFINES = ['RA_ADAPTER_IBB'])
+ env.AppendUnique(CPPDEFINES=['RA_ADAPTER_IBB'])
env.SConscript('external_builders.scons')
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"}
+ 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:
We want to preserve debug symbols to allow BitBake to generate both DEBUG and
RELEASE packages for OIC.
'''
- env.AppendUnique(CCFLAGS = ['-g'])
+ 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'])
+ 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:
'''
import iotivityconfig
from iotivityconfig import *
-conf = Configure(env,
- custom_tests =
- {
- 'CheckPThreadsSupport' : iotivityconfig.check_pthreads
- } )
+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
help_vars = Variables()
if not env.get('ANDROID_NDK'):
SConscript('../../extlibs/android/ndk/SConscript')
- help_vars.Add(PathVariable('ANDROID_NDK', 'Android NDK root directory', os.path.join(env.get('SRC_DIR'), 'extlibs', 'android', 'ndk', 'android-ndk-r10e')))
+ help_vars.Add(
+ PathVariable('ANDROID_NDK',
+ 'Android NDK root directory',
+ os.path.join(
+ env.get('SRC_DIR'), 'extlibs', 'android', 'ndk',
+ 'android-ndk-r10e')))
if not env.get('ANDROID_GRADLE'):
SConscript('../../extlibs/android/gradle/SConscript')
- help_vars.Add(PathVariable('ANDROID_GRADLE', 'Android Gradle directory', os.path.join(env.get('SRC_DIR'), 'extlibs', 'android', 'gradle', 'gradle-2.2.1/bin/gradle')))
+ help_vars.Add(
+ PathVariable('ANDROID_GRADLE',
+ 'Android Gradle directory',
+ os.path.join(
+ env.get('SRC_DIR'), 'extlibs', 'android', 'gradle',
+ 'gradle-2.2.1/bin/gradle')))
if not env.get('ANDROID_HOME'):
SConscript('../../extlibs/android/sdk/SConscript')
-
if env.get('ANDROID_NDK'):
- android_ndk = env.get('ANDROID_NDK')
+ android_ndk = env.get('ANDROID_NDK')
else:
- print '''
+ print '''
*************************************** Info **********************************
* Android NDK path isn't set, the default will be used. You can set *
* environment variable ANDROID_NDK or add it in command line as: *
* # scons ANDROID_NDK=<path to android NDK> ... *
*******************************************************************************
'''
- android_ndk = os.path.join(env.get('SRC_DIR'), 'extlibs', 'android', 'ndk', 'android-ndk-r10e')
+ android_ndk = os.path.join(
+ env.get('SRC_DIR'), 'extlibs', 'android', 'ndk', 'android-ndk-r10e')
if env.get('ANDROID_GRADLE'):
- android_gradle = env.get('ANDROID_GRADLE')
+ android_gradle = env.get('ANDROID_GRADLE')
else:
- print '''
+ print '''
*************************************** Info **********************************
* Android Gradle path isn't set, the default will be used. You can set *
* environment variable ANDROID_GRADLE or add it in command line as: *
* # scons ANDROID_GRADLE=<path to android GRADLE> ... *
*******************************************************************************
'''
- android_gradle = os.path.join(env.get('SRC_DIR'), 'extlibs', 'android', 'gradle', 'gradle-2.2.1', 'bin', 'gradle')
+ android_gradle = os.path.join(
+ env.get('SRC_DIR'), 'extlibs', 'android', 'gradle', 'gradle-2.2.1',
+ 'bin', 'gradle')
help_vars.Update(env)
Help(help_vars.GenerateHelpText(env))
# Overwrite suffixes and prefixes
if env['HOST_OS'] == 'win32':
- env['OBJSUFFIX'] = '.o'
- env['SHOBJSUFFIX'] = '.os'
- env['LIBPREFIX'] = 'lib'
- env['LIBSUFFIX'] = '.a'
- env['SHLIBPREFIX'] = 'lib'
- env['SHLIBSUFFIX'] = '.so'
- env['LIBPREFIXES'] = ['lib']
- env['LIBSUFFIXES'] = ['.a', '.so']
- env['PROGSUFFIX'] = ''
+ env['OBJSUFFIX'] = '.o'
+ env['SHOBJSUFFIX'] = '.os'
+ env['LIBPREFIX'] = 'lib'
+ env['LIBSUFFIX'] = '.a'
+ env['SHLIBPREFIX'] = 'lib'
+ env['SHLIBSUFFIX'] = '.so'
+ env['LIBPREFIXES'] = ['lib']
+ env['LIBSUFFIXES'] = ['.a', '.so']
+ env['PROGSUFFIX'] = ''
elif platform.system().lower() == 'darwin':
- env['SHLIBSUFFIX'] = '.so'
- env['LIBSUFFIXES'] = ['.a', '.so']
- env['PROGSUFFIX'] = ''
+ env['SHLIBSUFFIX'] = '.so'
+ env['LIBSUFFIXES'] = ['.a', '.so']
+ env['PROGSUFFIX'] = ''
######################################################################
# Set common flags
######################################################################
# Android build system default cofig
-env.AppendUnique(CPPDEFINES = ['ANDROID'])
-env.AppendUnique(CFLAGS = ['-std=c99'])
-env.AppendUnique(SHCFLAGS = ['-Wa,--noexecstack'])
-env.AppendUnique(LINKFLAGS = ['-Wl,--gc-sections', '-Wl,-z,nocopyreloc'])
+env.AppendUnique(CPPDEFINES=['ANDROID'])
+env.AppendUnique(CFLAGS=['-std=c99'])
+env.AppendUnique(SHCFLAGS=['-Wa,--noexecstack'])
+env.AppendUnique(LINKFLAGS=['-Wl,--gc-sections', '-Wl,-z,nocopyreloc'])
######################################################################
# Probe Android NDK default flags
######################################################################
ndk_build_cmd = android_ndk + '/ndk-build'
if env['HOST_OS'] == 'win32':
- if os.path.isfile(ndk_build_cmd + '.cmd'):
- ndk_build_cmd += '.cmd'
+ if os.path.isfile(ndk_build_cmd + '.cmd'):
+ ndk_build_cmd += '.cmd'
if not os.path.isfile(ndk_build_cmd):
- print '''
+ print '''
*************************************** Error *********************************
* It seems android ndk path is not set properly, please check if "%s"
* is the root directory of android ndk. *
*******************************************************************************
''' % android_ndk
- Exit(1)
+ Exit(1)
# ANDROID_HOME build option
if env.get('ANDROID_HOME'):
- android_gradle = env.get('ANDROID_HOME')
+ android_gradle = env.get('ANDROID_HOME')
else:
- help_vars = Variables()
- help_vars.Add(PathVariable('ANDROID_HOME', 'ANDROID SDK root directory', os.environ.get('ANDROID_HOME')))
- help_vars.Update(env)
- Help(help_vars.GenerateHelpText(env))
- print '''
+ help_vars = Variables()
+ help_vars.Add(
+ PathVariable('ANDROID_HOME',
+ 'ANDROID SDK root directory',
+ os.environ.get('ANDROID_HOME')))
+ help_vars.Update(env)
+ Help(help_vars.GenerateHelpText(env))
+ print '''
*************************************** Info **********************************
* Environment variable ANDROID_HOME will use default value. To override *
* root directory of android sdk, please specify ANDROID_HOME as follows: *
# Android ndk early version doesn't support C++11. Detect the toolchain version
# to make sure proper toolchain is used
for tc_ver in ['4.7', '4.8', '4.9', '']:
- if os.path.exists(android_ndk + '/toolchains/x86-' + tc_ver):
- break
+ if os.path.exists(android_ndk + '/toolchains/x86-' + tc_ver):
+ break
cmd = [ndk_build_cmd]
cmd.append('APP_ABI=' + target_arch)
cmd.append('APP_PLATFORM=android-21')
cmd.append('APP_STL=gnustl_shared')
if env.get('RELEASE'):
- cmd.append('APP_OPTIM=release')
+ cmd.append('APP_OPTIM=release')
else:
- cmd.append('APP_OPTIM=debug')
+ cmd.append('APP_OPTIM=debug')
if tc_ver != '':
- cmd.append('NDK_TOOLCHAIN_VERSION=' + tc_ver)
+ cmd.append('NDK_TOOLCHAIN_VERSION=' + tc_ver)
else:
- print '''
+ print '''
*************************************** Warning *******************************
* To support C++11, the toolchain should be >= 4.7, please make sure your *
* android NDK is at least r8e! *
cmd.append('-n')
-p = subprocess.Popen(cmd, stdout = subprocess.PIPE)
+p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for flags in p.stdout.readlines():
- if cmp(flags[0:10], 'TC_PREFIX=') == 0: # toolchain prefix (include path)
- prefix = flags[10:].strip()
- env.Replace(CC = prefix + 'gcc')
- env.Replace(CXX = prefix + 'g++')
- env.Replace(AR = prefix + 'ar')
- env.Replace(RANLIB = prefix + 'ranlib')
-
- elif cmp(flags[0:7], 'CFLAGS=') == 0:
- env.AppendUnique(CFLAGS = Split(flags[7:]))
-
- elif cmp(flags[0:9], 'CXXFLAGS=') == 0:
- env.AppendUnique(CXXFLAGS = Split(flags[9:]))
-
- elif cmp(flags[0:8], 'CPPPATH=') == 0:
- ndk_arch = 'arch-'
- if cmp(target_arch, 'x86') == 0:
- ndk_arch += 'x86'
- elif cmp(target_arch, 'x86_64') == 0:
- ndk_arch += 'x86_64'
- elif cmp(target_arch, 'armeabi') == 0:
- ndk_arch += 'arm'
- elif cmp(target_arch, 'armeabi-v7a') == 0:
- ndk_arch += 'arm'
- elif cmp(target_arch, 'armeabi-v7a-hard') == 0:
- ndk_arch += 'arm'
- elif cmp(target_arch, 'arm64-v8a') == 0:
- ndk_arch += 'arm64'
-
- env.AppendUnique(CPPPATH = android_ndk+'/platforms/android-21/'+ndk_arch+'/usr/include')
- env.AppendUnique(CPPPATH = Split(flags[8:]))
-
- elif cmp(flags[0:8], 'SYSROOT=') == 0:
- sysroot = flags[8:].strip()
- env.AppendUnique(LINKFLAGS = ['--sysroot=' + sysroot])
-
- elif cmp(flags[0:8], 'LDFLAGS=') == 0:
- env.AppendUnique(LINKFLAGS = Split(flags[8:]))
-
- elif cmp(flags[0:7], 'TC_VER=') == 0: # set gnustl library path
- ver = flags[7:].strip()
- stl_path = android_ndk + '/sources/cxx-stl/gnu-libstdc++/' + ver + '/libs/' + target_arch
-# if target_arch in ['armeabi', 'armeabi-v7a', 'armeabi-v7a-hard']:
-# stl_path = stl_path + '/thumb/'
- env.AppendUnique(LIBPATH = [stl_path])
- env.Install(env.get('BUILD_DIR'), stl_path + '/libgnustl_shared.so')
-
- elif cmp(flags[0:9], 'PLATFORM=') == 0: # get target platform: android-x
- platform_ver = flags[9+8:].strip()
- if not platform_ver.isdigit():
- platform_ver = ''
-
-
- elif cmp(flags[0:9], 'PLATFORM=') == 0: # get target platform: android-x
- platform_ver = flags[9+8:].strip()
- if not platform_ver.isdigit():
- platform_ver = ''
-
-
- elif cmp(flags[0:9], 'PLATFORM=') == 0: # get target platform: android-x
- platform_ver = flags[9+8:].strip()
- if not platform_ver.isdigit():
- platform_ver = ''
+ if cmp(flags[0:10], 'TC_PREFIX=') == 0: # toolchain prefix (include path)
+ prefix = flags[10:].strip()
+ env.Replace(CC=prefix + 'gcc')
+ env.Replace(CXX=prefix + 'g++')
+ env.Replace(AR=prefix + 'ar')
+ env.Replace(RANLIB=prefix + 'ranlib')
+
+ elif cmp(flags[0:7], 'CFLAGS=') == 0:
+ env.AppendUnique(CFLAGS=Split(flags[7:]))
+
+ elif cmp(flags[0:9], 'CXXFLAGS=') == 0:
+ env.AppendUnique(CXXFLAGS=Split(flags[9:]))
+
+ elif cmp(flags[0:8], 'CPPPATH=') == 0:
+ env.AppendUnique(CPPPATH = Split(flags[8:]))
+
+ ndk_arch = 'arch-'
+ if cmp(target_arch, 'x86') == 0:
+ ndk_arch += 'x86'
+ elif cmp(target_arch, 'x86_64') == 0:
+ ndk_arch += 'x86_64'
+ elif cmp(target_arch, 'armeabi') == 0:
+ ndk_arch += 'arm'
+ elif cmp(target_arch, 'armeabi-v7a') == 0:
+ ndk_arch += 'arm'
+ elif cmp(target_arch, 'armeabi-v7a-hard') == 0:
+ ndk_arch += 'arm'
+ elif cmp(target_arch, 'arm64-v8a') == 0:
+ ndk_arch += 'arm64'
+
+ env.AppendUnique(CPPPATH = android_ndk+'/platforms/android-21/'+ndk_arch+'/usr/include')
+ env.AppendUnique(CPPPATH = Split(flags[8:]))
+
+ elif cmp(flags[0:8], 'SYSROOT=') == 0:
+ sysroot = flags[8:].strip()
+ env.AppendUnique(LINKFLAGS=['--sysroot=' + sysroot])
+
+ elif cmp(flags[0:8], 'LDFLAGS=') == 0:
+ env.AppendUnique(LINKFLAGS=Split(flags[8:]))
+
+ elif cmp(flags[0:7], 'TC_VER=') == 0: # set gnustl library path
+ ver = flags[7:].strip()
+ stl_path = android_ndk + '/sources/cxx-stl/gnu-libstdc++/' + ver + '/libs/' + target_arch
+# if target_arch in ['armeabi', 'armeabi-v7a', 'armeabi-v7a-hard']:
+# stl_path = stl_path + '/thumb/'
+ env.AppendUnique(LIBPATH = [stl_path])
+ env.Install(env.get('BUILD_DIR'), stl_path + '/libgnustl_shared.so')
+
+ elif cmp(flags[0:9], 'PLATFORM=') == 0: # get target platform: android-x
+ platform_ver = flags[9 + 8:].strip()
+ if not platform_ver.isdigit():
+ platform_ver = ''
# Determine dependency faux SYS_ROOT
dep_sys_root = os.path.join(env.get('SRC_DIR'), 'dep', 'android', target_arch, 'usr')
-dep_src_dir = os.path.join(dep_sys_root, 'include')
-dep_lib_dir = os.path.join(dep_sys_root, 'lib')
+dep_src_dir = os.path.join(dep_sys_root, 'include')
+dep_lib_dir = os.path.join(dep_sys_root, 'lib')
env['DEP_SYS_ROOT'] = dep_sys_root
# Add external libraries including boost
-env.AppendUnique(CPPPATH = [ dep_src_dir ])
-env.AppendUnique(LIBPATH = [ dep_lib_dir ])
+env.AppendUnique(CPPPATH=[dep_src_dir])
+env.AppendUnique(LIBPATH=[dep_lib_dir])
######################################################################
# Set release/debug flags
######################################################################
if env.get('RELEASE'):
- env.AppendUnique(CCFLAGS = ['-Os'])
- env.AppendUnique(CPPDEFINES = ['NDEBUG'])
- env.AppendUnique(LINKFLAGS = ['-s'])
+ env.AppendUnique(CCFLAGS=['-Os'])
+ env.AppendUnique(CPPDEFINES=['NDEBUG'])
+ env.AppendUnique(LINKFLAGS=['-s'])
else:
- env.AppendUnique(CCFLAGS = ['-g'])
+ env.AppendUnique(CCFLAGS=['-g'])
if env.get('LOGGING'):
- env.AppendUnique(CPPDEFINES = ['TB_LOG'])
-
+ env.AppendUnique(CPPDEFINES=['TB_LOG'])
-env.AppendUnique(CPPDEFINES = ['WITH_POSIX', '__ANDROID__'])
-env.AppendUnique(CCFLAGS = ['-Wall', '-Wextra', '-fPIC'])
+env.AppendUnique(CPPDEFINES=['WITH_POSIX', '__ANDROID__'])
+env.AppendUnique(CCFLAGS=['-Wall', '-Wextra', '-fPIC'])
-env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
-env.AppendUnique(LIBPATH = [src_dir + '/resource/csdk/connectivity/lib/android'])
-env.AppendUnique(LIBS = ['log', 'coap'])
+env.AppendUnique(LIBPATH=[env.get('BUILD_DIR')])
+env.AppendUnique(LIBPATH=[src_dir + '/resource/csdk/connectivity/lib/android'])
+env.AppendUnique(LIBS=['log', 'coap'])
# Build mbedtls as ocstack uses hash functions from mbedcrypto.lib.
env.SConscript('#extlibs/mbedtls/SConscript')
if env.get('SECURED') == '1':
- env.AppendUnique(LIBS = ['mbedtls','mbedx509','mbedcrypto'])
+ env.AppendUnique(LIBS=['mbedtls', 'mbedx509', 'mbedcrypto'])
else:
- env.AppendUnique(LIBS = ['mbedcrypto'])
+ env.AppendUnique(LIBS=['mbedcrypto'])
# From android-5 (API > 20), all application must be built with flags '-fPIE' '-pie'.
# Due to the limitation of Scons, it's required to added it into the command line
# directly (otherwise, it will also be added when build share library)
-env.Replace(CCCOM = '$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM -fPIE $SOURCES')
-env.Replace(CXXCOM = '$CXX -o $TARGET -c $CXXFLAGS $CCFLAGS $_CCCOMCOM -fPIE $SOURCES')
-env.Replace(LINKCOM = '$LINK -o $TARGET -pie $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS')
+env.Replace(
+ CCCOM='$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM -fPIE $SOURCES')
+env.Replace(
+ CXXCOM='$CXX -o $TARGET -c $CXXFLAGS $CCFLAGS $_CCCOMCOM -fPIE $SOURCES')
+env.Replace(
+ LINKCOM=
+ '$LINK -o $TARGET -pie $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
+)
# Fix android-ndk compatibility issue, make applications build on new NDK can run on old platform
if platform_ver == '' or int(platform_ver) > 20:
- SConscript('compatibility/c_compat.scons')
+ SConscript('compatibility/c_compat.scons')
SConscript('compatibility/cpp11_compat.scons')