Build: Add thread.scons to propagate pthread if needed
authorPhilippe Coval <philippe.coval@osg.samsung.com>
Fri, 8 Jul 2016 10:42:34 +0000 (12:42 +0200)
committerJon A. Cruz <jon@joncruz.org>
Mon, 11 Jul 2016 20:35:44 +0000 (20:35 +0000)
Bug: https://jira.iotivity.org/browse/IOT-863
Bug-AGL: https://jira.automotivelinux.org/browse/SPEC-158
Change-Id: I9dc39c758607df6f54910aa233a7401c1be2390f
Signed-off-by: Philippe Coval <philippe.coval@osg.samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/9253
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jon A. Cruz <jon@joncruz.org>
build_common/thread.scons [new file with mode: 0644]
resource/csdk/security/provisioning/SConscript
resource/csdk/stack/samples/linux/SimpleClientServer/SConscript
resource/csdk/stack/samples/tizen/build/gbsbuild.sh
resource/examples/SConscript
resource/provisioning/examples/SConscript
resource/src/SConscript

diff --git a/build_common/thread.scons b/build_common/thread.scons
new file mode 100644 (file)
index 0000000..fc01aef
--- /dev/null
@@ -0,0 +1,17 @@
+# Factorize pthread configurations in single file
+import os
+
+Import('env')
+
+thread_env = env.Clone()
+target_os = thread_env.get('TARGET_OS')
+
+# Export flags once for all
+compiler = thread_env.get('CC')
+if 'gcc' in compiler:
+    thread_env.AppendUnique(CFLAGS = ['-Wall'])
+    if target_os not in ['android']:
+        thread_env.AppendUnique(CFLAGS = ['-pthread'])
+        thread_env.AppendUnique(LIBS = ['pthread'])
+
+Return('thread_env')
index 9bd036c..0c94384 100644 (file)
@@ -19,9 +19,8 @@
 # //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 #
 
-Import('env')
-
-provisioning_env = env.Clone()
+provisioning_env = SConscript('#build_common/thread.scons')
+target_os = provisioning_env.get('TARGET_OS')
 root_dir = './../../../../'
 
 ######################################################################
@@ -52,27 +51,21 @@ provisioning_env.AppendUnique(CPPPATH = [
                '../../../../extlibs/asn1cert',
                'ck_manager/include'
                ])
-target_os = env.get('TARGET_OS')
 
-if target_os != 'tizen':
+if target_os not in ['tizen']:
        provisioning_env.AppendUnique(CPPPATH = ['../../../../extlibs/sqlite3'])
 
 provisioning_env.AppendUnique(CPPDEFINES= ['__WITH_DTLS__'])
-if target_os not in ['windows']:
-       provisioning_env.AppendUnique(CFLAGS = ['-std=c99'])
-if target_os not in ['windows', 'msys_nt']:
-       provisioning_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread'])
-       # Note: 'pthread' is in libc for android.
-       # On other platforms, if use new gcc(>4.9?) it isn't required, otherwise, it's required
-       if target_os != 'android':
-               provisioning_env.AppendUnique(LIBS = ['dl', 'pthread'])
-
-provisioning_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
+
+if 'g++' in provisioning_env.get('CXX'):
+    provisioning_env.AppendUnique(CXXFLAGS = ['-std=c++0x'])
+
+provisioning_env.AppendUnique(LIBPATH = [provisioning_env.get('BUILD_DIR')])
 provisioning_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'coap'])
 
 provisioning_env.AppendUnique(LIBS = ['tinydtls'])
 
-if env.get('DTLS_WITH_X509') == '1':
+if provisioning_env.get('DTLS_WITH_X509') == '1':
        provisioning_env.AppendUnique(LIBS = ['CKManager', 'asn1'])
 
 if target_os not in ['msys_nt', 'windows', 'android']:
@@ -81,14 +74,14 @@ if target_os not in ['msys_nt', 'windows', 'android']:
 if target_os in ['windows', 'msys_nt']:
        provisioning_env.AppendUnique(LIBS = ['ws2_32', 'advapi32', 'iphlpapi', 'timer'])
 
-if target_os == 'tizen':
+if target_os in ['tizen']:
        provisioning_env.ParseConfig('pkg-config --cflags --libs sqlite3')
 
-if target_os == 'android':
+if target_os in ['android']:
        provisioning_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
        provisioning_env.AppendUnique(LIBS = ['gnustl_static'])
 
-       if not env.get('RELEASE'):
+       if not provisioning_env.get('RELEASE'):
                provisioning_env.AppendUnique(CPPDEFINES = ['TB_LOG'])
 
 if target_os in ['darwin', 'ios']:
@@ -120,7 +113,7 @@ else:
 provisioning_env.InstallTarget(provisioningserver, 'ocpmapi')
 provisioning_env.UserInstallTargetLib(provisioningserver, 'ocpmapi')
 
-if env.get('DTLS_WITH_X509') == '1':
+if provisioning_env.get('DTLS_WITH_X509') == '1':
        SConscript('ck_manager/SConscript')
 
 if target_os in ['linux', 'msys_nt', 'windows']:
index 1237412..bfa9bda 100644 (file)
 #
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
-Import('env')
-target_os = env.get('TARGET_OS')
-samples_env = env.Clone()
-with_ra = env.get ('WITH_RA')
+thread_env = SConscript('#build_common/thread.scons')
+samples_env = thread_env.Clone()
+target_os = samples_env.get('TARGET_OS')
+with_ra = samples_env.get ('WITH_RA')
+
 ######################################################################
 # Build flags
 ######################################################################
@@ -34,12 +35,12 @@ samples_env.PrependUnique(CPPPATH = [
                '../../../../../connectivity/lib/libcoap-4.1.1'
                ])
 
-compiler = env.get('CXX')
+compiler = samples_env.get('CXX')
 if 'g++' in compiler:
-       samples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread'])
-       samples_env.AppendUnique(LIBS=['pthread'])
-samples_env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
-samples_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
+       samples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall'])
+
+samples_env.AppendUnique(RPATH = [samples_env.get('BUILD_DIR')])
+samples_env.AppendUnique(LIBPATH = [samples_env.get('BUILD_DIR')])
 
 samples_env.PrependUnique(LIBS = ['octbstack', 'ocsrm', 'connectivity_abstraction', 'coap'])
 
@@ -49,7 +50,7 @@ if target_os not in ['arduino', 'windows', 'darwin', 'ios', 'msys_nt']:
 if target_os not in ['windows']:
        samples_env.PrependUnique(LIBS = ['m'])
 
-if env.get('SECURED') == '1':
+if samples_env.get('SECURED') == '1':
     samples_env.AppendUnique(LIBS = ['tinydtls'])
 
 samples_env.AppendUnique(CPPDEFINES = ['TB_LOG'])
@@ -80,6 +81,6 @@ if with_ra:
        list_of_samples.append (ocremoteaccessclient)
 Alias("samples", list_of_samples)
 
-env.AppendTarget('samples')
+samples_env.AppendTarget('samples')
 
 
index 180c63d..b4906c9 100644 (file)
@@ -50,6 +50,8 @@ cp -LR ./extlibs/sqlite3 $sourcedir/tmp/extlibs
 cp -R ./resource/csdk/stack/samples/tizen/build/packaging/*.spec $sourcedir/tmp/packaging
 cp -R ./resource $sourcedir/tmp/
 cp -R ./build_common/external_libs.scons $sourcedir/tmp/
+mkdir -p $sourcedir/tmp/build_common/
+cp -a ./build_common/*.scons $sourcedir/tmp/build_common/
 
 # copy dependency RPMs and conf files for tizen build
 cp ./tools/tizen/*.rpm $sourcedir/tmp
index 5605f00..895a2e5 100644 (file)
 ##
 # Examples build script
 ##
-Import('env')
+thread_env = SConscript('#build_common/thread.scons')
+lib_env = thread_env.Clone()
+
 # Add third party libraries
-lib_env = env.Clone()
 SConscript('#resource/third_party_libs.scons', 'lib_env')
-
 examples_env = lib_env.Clone()
-
+target_os = examples_env.get('TARGET_OS')
 ######################################################################
 # Build flags
 ######################################################################
@@ -39,23 +39,18 @@ examples_env.AppendUnique(CPPPATH = [
                '../oc_logger/include'
                ])
 
-target_os = env.get('TARGET_OS')
-if target_os not in ['windows']:
-       examples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread'])
-
-       # Note: 'pthread' is in libc for android. On other platform, if use
-       # new gcc(>4.9?) it isn't required, otherwise, it's required
-       if target_os != 'android':
-               examples_env.AppendUnique(LIBS = ['pthread'])
-
-examples_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
-examples_env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
+examples_env.AppendUnique(LIBPATH = [examples_env.get('BUILD_DIR')])
+examples_env.AppendUnique(RPATH = [examples_env.get('BUILD_DIR')])
 examples_env.PrependUnique(LIBS = ['coap'])
 examples_env.AppendUnique(LIBS = ['connectivity_abstraction'])
 examples_env.AppendUnique(LIBS = ['oc_logger'])
 examples_env.AppendUnique(LIBS = ['octbstack'])
 examples_env.AppendUnique(LIBS = ['oc'])
 
+compiler = examples_env.get('CXX')
+if 'g++' in compiler:
+       examples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall'])
+
 if target_os in ['msys_nt', 'windows']:
        examples_env.PrependUnique(LIBS = ['mswsock', 'ws2_32', 'iphlpapi', 'ole32'])
 
index f08ab93..38593ae 100644 (file)
 ##
 # Examples build script
 ##
-Import('env')
+thread_env = SConscript('#build_common/thread.scons')
+lib_env = thread_env.Clone()
+target_os = lib_env.get('TARGET_OS')
+
 # Add third party libraries
-lib_env = env.Clone()
 SConscript('#resource/third_party_libs.scons', 'lib_env')
 
-with_ra = env.get('WITH_RA')
-with_ra_ibb = env.get('WITH_RA_IBB')
+with_ra = lib_env.get('WITH_RA')
+with_ra_ibb = lib_env.get('WITH_RA_IBB')
 
 examples_env = lib_env.Clone()
 
@@ -47,17 +49,8 @@ examples_env.AppendUnique(CPPPATH = [
         '../../csdk/security/provisioning/include/internal'
                ])
 
-target_os = env.get('TARGET_OS')
-if target_os not in ['windows']:
-       examples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread'])
-
-       # Note: 'pthread' is in libc for android. On other platform, if use
-       # new gcc(>4.9?) it isn't required, otherwise, it's required
-       if target_os != 'android':
-               examples_env.AppendUnique(LIBS = ['dl','pthread'])
-
-examples_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
-examples_env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
+examples_env.AppendUnique(LIBPATH = [examples_env.get('BUILD_DIR')])
+examples_env.AppendUnique(RPATH = [examples_env.get('BUILD_DIR')])
 examples_env.PrependUnique(LIBS = ['ocprovision', 'oc', 'ocpmapi', 'octbstack',
                                     'oc_logger', 'connectivity_abstraction', 'coap'])
 if with_ra_ibb:
@@ -70,23 +63,27 @@ else :
        if with_ra:
                examples_env.AppendUnique(LIBS = ['ra_xmpp'])
 
-if env.get('SECURED') == '1':
+if examples_env.get('SECURED') == '1':
     examples_env.AppendUnique(LIBS = ['tinydtls'])
     examples_env.AppendUnique(LIBS = ['timer'])
-if env.get('DTLS_WITH_X509') == '1':
+if examples_env.get('DTLS_WITH_X509') == '1':
        examples_env.AppendUnique(LIBS = ['CKManager'])
        examples_env.AppendUnique(LIBS = ['asn1'])
 
-if target_os == 'android':
+if 'g++' in examples_env.get('CXX'):
+   examples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall'])
+
+if target_os in ['android']:
        examples_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
        examples_env.AppendUnique(LIBS = ['gnustl_shared'])
 
-       if not env.get('RELEASE'):
+       if not examples_env.get('RELEASE'):
                examples_env.AppendUnique(LIBS = ['log'])
 
 if target_os in ['darwin', 'ios']:
        examples_env.AppendUnique(CPPDEFINES = ['_DARWIN_C_SOURCE'])
 
+
 ######################################################################
 # Source files and Targets
 ######################################################################
@@ -94,11 +91,10 @@ provisioningclient = examples_env.Program('provisioningclient', 'provisioningcli
 
 src_dir = examples_env.get('SRC_DIR')
 svr_db_src_dir = src_dir + '/resource/provisioning/examples/'
-svr_db_build_dir = env.get('BUILD_DIR') +'/resource/provisioning/examples/'
+svr_db_build_dir = examples_env.get('BUILD_DIR') +'/resource/provisioning/examples/'
 
 clientjson = examples_env.Install(svr_db_build_dir, svr_db_src_dir + 'oic_svr_db_client.json')
 clientdat = examples_env.Install(svr_db_build_dir, svr_db_src_dir + 'oic_svr_db_client.dat')
 
 Alias("examples", [provisioningclient, clientjson,clientdat])
-env.AppendTarget('examples')
-
+examples_env.AppendTarget('examples')
index 331d41a..0f31035 100644 (file)
 ##
 # OCLib (share library) build script
 ##
-Import('env')
-
 import os
+thread_env = SConscript('#build_common/thread.scons')
+lib_env = thread_env.Clone()
 
 # Add third party libraries
-lib_env = env.Clone()
 SConscript('#resource/third_party_libs.scons', 'lib_env')
 
 oclib_env = lib_env.Clone()
 secured = lib_env.get('SECURED')
+target_os = oclib_env.get('TARGET_OS')
+
 ######################################################################
 # Build flags
 ######################################################################
@@ -44,17 +45,15 @@ oclib_env.AppendUnique(CPPPATH = [
                '../csdk/connectivity/api'
                ])
 
-oclib_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
+oclib_env.AppendUnique(LIBPATH = [oclib_env.get('BUILD_DIR')])
 
 oclib_env.AppendUnique(LIBS = ['oc_logger'])
 oclib_env.PrependUnique(LIBS = ['octbstack', 'connectivity_abstraction', 'ocsrm'])
 
-target_os = env.get('TARGET_OS')
-if target_os in ['linux']:
-       oclib_env.AppendUnique(LIBS = ['pthread'])
-
-if target_os not in ['windows']:
-       oclib_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-fPIC'])
+if 'g++' in oclib_env.get('CXX'):
+       oclib_env.AppendUnique(CXXFLAGS = ['-std=c++0x'])
+       oclib_env.AppendUnique(CXXFLAGS = ['-Wall'])
+       oclib_env.AppendUnique(CXXFLAGS = ['-fPIC'])
 
 if target_os not in ['darwin', 'ios', 'windows']:
        oclib_env.AppendUnique(LINKFLAGS = ['-Wl,--no-undefined'])
@@ -67,12 +66,12 @@ if target_os == 'android':
 if target_os == 'tizen':
        oclib_env.AppendUnique(CPPDEFINES = ['__TIZEN__'])
 
-if target_os in ['linux'] and env.get('SIMULATOR', False):
-    oclib_env.Append( RPATH = env.Literal('\\$$ORIGIN'))
+if target_os in ['linux'] and oclib_env.get('SIMULATOR', False):
+    oclib_env.Append( RPATH = oclib_env.Literal('\\$$ORIGIN'))
 
 if target_os in ['msys_nt', 'windows']:
-       oclib_env.AppendUnique(LIBPATH = [os.path.join(env.get('BUILD_DIR'), 'resource', 'oc_logger')])
-       oclib_env.AppendUnique(LIBPATH = [os.path.join(env.get('BUILD_DIR'), 'resource', 'csdk')])
+       oclib_env.AppendUnique(LIBPATH = [os.path.join(oclib_env.get('BUILD_DIR'), 'resource', 'oc_logger')])
+       oclib_env.AppendUnique(LIBPATH = [os.path.join(oclib_env.get('BUILD_DIR'), 'resource', 'csdk')])
        oclib_env.AppendUnique(LIBS=['octbstack', 'logger', 'oc_logger','connectivity_abstraction', 'ocsrm', 'c_common', 'routingmanager'])
        oclib_env.AppendUnique(LIBS=[ 'coap', 'ws2_32' ,'iphlpapi'])
        if secured == '1':
@@ -103,7 +102,7 @@ else:
        oclib = oclib_env.SharedLibrary('oc', oclib_src)
 oclib_env.InstallTarget(oclib, 'oc')
 oclib_env.UserInstallTargetLib(oclib, 'oc')
-header_dir = env.get('SRC_DIR') + '/resource/include/'
+header_dir = os.path.join(oclib_env.get('SRC_DIR') , 'resource' , 'include') + os.sep
 
 oclib_env.UserInstallTargetHeader(header_dir + 'OCApi.h', 'resource', 'OCApi.h')
 oclib_env.UserInstallTargetHeader(header_dir + 'OCHeaderOption.h', 'resource', 'OCHeaderOption.h')
@@ -134,5 +133,5 @@ oclib_env.UserInstallTargetHeader(header_dir + 'CAManager.h', 'resource', 'CAMan
 oclib_env.UserInstallTargetHeader(header_dir + 'OCDirectPairing.h', 'resource', 'OCDirectPairing.h')
 
 # Add Provisioning library
-if target_os in ['linux', 'android', 'tizen'] and env.get('SECURED') == '1':
+if target_os in ['linux', 'android', 'tizen'] and secured == '1':
         SConscript('../provisioning/SConscript')