From: Dan Mihai Date: Fri, 7 Apr 2017 20:29:14 +0000 (-0700) Subject: [IOT-2011] linker changes for oc_logger X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f8af7607940b0b9eb9651c111032a82c1faee0bf;p=contrib%2Fiotivity.git [IOT-2011] linker changes for oc_logger Windows currently has several different copies of oc_logger code and data in a single process. Other platforms are using a single copy of shared library oc_logger, in each process/app. It's better to avoid differences across platforms, because otherwise changes tested on one platform might not work on the other platforms. Linker behavior unchanged by this patch: ---------------------------------------- 1. On non-Windows platforms: IoTivity sample apps, and apps outside IoTivity, link with oc_logger. 2. On Windows: IoTivity sample apps, and apps outside IoTivity, continue to link with octbstack.lib. Linker behavior changed by this patch: ---------------------------------------- 1. On all platforms: IoTivity internal tests link with the static LIB oc_logger_internal. 2. On Windows: IoTivity sample apps, and apps outside IoTivity, no longer link directly with oc_logger.lib. They obtain access to oc_logger APIs by linking with octbstack.lib. 3. On Windows: Octbstack.dll links with the static LIB oc_logger_internal, and exports public oc_logger APIs. Change-Id: I3ca36ffcbebea7822918998ac3fced1c5071726e Signed-off-by: Dan Mihai Reviewed-on: https://gerrit.iotivity.org/gerrit/18769 Reviewed-by: Todd Malsbary Tested-by: jenkins-iotivity Reviewed-by: Mike Fenelon --- diff --git a/resource/IPCA/samples/ElevatorServer/SConscript b/resource/IPCA/samples/ElevatorServer/SConscript index c5a0ebb..c6c29df 100644 --- a/resource/IPCA/samples/ElevatorServer/SConscript +++ b/resource/IPCA/samples/ElevatorServer/SConscript @@ -54,8 +54,7 @@ elevator_server_env.PrependUnique(LIBS = [ 'oc', 'connectivity_abstraction', 'coap', - 'octbstack', - 'oc_logger', + 'octbstack' ]) if elevator_server_env.get('SECURED') == '1': @@ -64,6 +63,8 @@ if elevator_server_env.get('SECURED') == '1': if target_os in ['msys_nt', 'windows']: elevator_server_env.AppendUnique(LINKFLAGS = ['/subsystem:CONSOLE']) +else: + elevator_server_env.PrependUnique(LIBS = ['oc_logger']) ###################################################################### # Source files and Targets diff --git a/resource/IPCA/src/SConscript b/resource/IPCA/src/SConscript index b4ae6e7..0684efc 100644 --- a/resource/IPCA/src/SConscript +++ b/resource/IPCA/src/SConscript @@ -49,14 +49,18 @@ ipca_lib_env.PrependUnique(CPPPATH = [ '#/extlibs/cjson', ]) -ipca_lib_env.Replace(WINDOWS_INSERT_DEF = ['1']) +if target_os in ['windows', 'msys_nt']: + ipca_lib_env.Replace(WINDOWS_INSERT_DEF = ['1']) +else: + ipca_lib_env.PrependUnique(LIBS = [ + 'oc_logger' + ]) ipca_lib_env.PrependUnique(LIBS = [ 'oc', 'connectivity_abstraction', 'coap', - 'octbstack', - 'oc_logger' + 'octbstack' ]) if ipca_env.get('SECURED') == '1': diff --git a/resource/IPCA/unittests/SConscript b/resource/IPCA/unittests/SConscript index acd21de..7bcdb27 100644 --- a/resource/IPCA/unittests/SConscript +++ b/resource/IPCA/unittests/SConscript @@ -56,7 +56,7 @@ ipcatest_env.AppendUnique(CPPPATH = [ ]) ipcatest_env.PrependUnique(LIBS = [ - 'oc_logger', + 'oc_logger_internal', 'octbstack', 'ipca_static' ]) diff --git a/resource/csdk/security/provisioning/SConscript b/resource/csdk/security/provisioning/SConscript index 8f4ec10..6dd9e9c 100644 --- a/resource/csdk/security/provisioning/SConscript +++ b/resource/csdk/security/provisioning/SConscript @@ -45,7 +45,7 @@ provisioning_env.AppendUnique(CPPDEFINES= ['__WITH_DTLS__']) if 'g++' in provisioning_env.get('CXX'): provisioning_env.AppendUnique(CXXFLAGS = ['-std=c++0x']) -provisioning_env.PrependUnique(LIBS = ['octbstack', 'oc_logger', 'connectivity_abstraction', 'coap']) +provisioning_env.PrependUnique(LIBS = ['octbstack', 'connectivity_abstraction', 'coap']) if target_os not in ['msys_nt', 'windows']: # octbstack.dll is exporting ocpmapi and ocsrm APIs on Windows. diff --git a/resource/csdk/security/provisioning/sample/SConscript b/resource/csdk/security/provisioning/sample/SConscript index 9020c74..9206b09 100644 --- a/resource/csdk/security/provisioning/sample/SConscript +++ b/resource/csdk/security/provisioning/sample/SConscript @@ -48,16 +48,14 @@ if target_os not in ['msys_nt', 'windows']: else: provisioning_sample_env.AppendUnique(LIBPATH = [os.path.join(env.get('BUILD_DIR'), 'resource', 'csdk')]) -provisioning_sample_env.PrependUnique(LIBS = ['oc', 'oc_logger', 'octbstack', 'connectivity_abstraction', 'coap']) +provisioning_sample_env.PrependUnique(LIBS = ['oc', 'octbstack', 'connectivity_abstraction', 'coap']) if target_os not in ['msys_nt', 'windows']: - # octbstack.dll is exporting ocpmapi and ocsrm APIs on Windows. - provisioning_sample_env.PrependUnique(LIBS = ['ocpmapi', 'ocsrm']) + provisioning_sample_env.PrependUnique(LIBS = ['oc_logger', 'ocpmapi', 'ocsrm']) if env.get('SECURED') == '1': provisioning_sample_env.AppendUnique(LIBS = ['mbedtls','mbedx509','mbedcrypto']) - if env.get('MULTIPLE_OWNER') == '1': provisioning_sample_env.AppendUnique(CPPDEFINES = ['MULTIPLE_OWNER']) diff --git a/resource/csdk/security/provisioning/unittest/SConscript b/resource/csdk/security/provisioning/unittest/SConscript index a224b8f..0beab48 100644 --- a/resource/csdk/security/provisioning/unittest/SConscript +++ b/resource/csdk/security/provisioning/unittest/SConscript @@ -60,11 +60,12 @@ sptest_env.PrependUnique(CPPPATH = [ '../../../connectivity/common/inc', '../../../connectivity/api' ]) + sptest_env.PrependUnique(LIBS = [ 'ocpmapi', 'oc', 'octbstack_test', 'ocsrm', - 'oc_logger', + 'oc_logger_internal', 'connectivity_abstraction', 'coap']) diff --git a/resource/csdk/security/unittest/SConscript b/resource/csdk/security/unittest/SConscript index 095e99d..8782e86 100644 --- a/resource/csdk/security/unittest/SConscript +++ b/resource/csdk/security/unittest/SConscript @@ -59,7 +59,7 @@ srmtest_env.PrependUnique(CPPPATH = [ srmtest_env.PrependUnique(LIBS = ['ocsrm', 'octbstack_test', - 'oc_logger', + 'oc_logger_internal', 'connectivity_abstraction', 'coap']) diff --git a/resource/csdk/stack/SConscript b/resource/csdk/stack/SConscript index beff618..a64383e 100644 --- a/resource/csdk/stack/SConscript +++ b/resource/csdk/stack/SConscript @@ -117,6 +117,10 @@ else: # octbstack.def specifies the list of functions exported by octbstack.dll. liboctbstack_env.Replace(WINDOWS_INSERT_DEF = ['1']) + # On Windows, apps don't link directly with oc_logger. oc_logger is linked inside + # octbstack.dll and apps import its APIs by linking with octbstack.lib. + liboctbstack_env.PrependUnique(LIBS = ['oc_logger_internal']) + if 'CLIENT' in rd_mode or 'SERVER' in rd_mode: # On Windows: # - octbstack.dll is exporting resource_directory C APIs @@ -136,7 +140,8 @@ else: if env.get('SECURED') != '1': liboctbstack_env.Textfile(target = 'octbstack.def', source = [File('octbstack_temp2.def')]) else: - # octbstack.dll is exporting ocpmapi APIs on Windows - there is no ocpmapi.dll. + # On Windows, apps don't link directly with ocpmapi.lib. ocpmapi is linked + # inside octbstack.dll and apps import its APIs by linking with octbstack.lib. liboctbstack_env.PrependUnique(LIBS = ['ocpmapi']) liboctbstack_env.Textfile(target = 'octbstack_temp3.def', source = [File('octbstack_temp2.def'), File('octbstack_product_secured.def')]) diff --git a/resource/csdk/stack/octbstack_product.def b/resource/csdk/stack/octbstack_product.def index ff8952b..4c2afb0 100644 --- a/resource/csdk/stack/octbstack_product.def +++ b/resource/csdk/stack/octbstack_product.def @@ -120,3 +120,10 @@ OCStop OCStopPresence OCStopMulticastServer OCUnBindResource + +oc_log_destroy +oc_log_set_level +oc_log_set_module +oc_log_write +oc_make_console_logger +oc_make_ostream_logger diff --git a/resource/csdk/stack/test/SConscript b/resource/csdk/stack/test/SConscript index ed23842..b3b5951 100644 --- a/resource/csdk/stack/test/SConscript +++ b/resource/csdk/stack/test/SConscript @@ -51,8 +51,6 @@ stacktest_env.PrependUnique(LIBS = ['octbstack_test', 'connectivity_abstraction', 'coap', 'mbedcrypto']) -if target_os != 'darwin': - stacktest_env.PrependUnique(LIBS = ['oc_logger']) if stacktest_env.get('SECURED') == '1': stacktest_env.AppendUnique(LIBS = ['mbedtls', 'mbedx509']) diff --git a/resource/examples/SConscript b/resource/examples/SConscript index 0cfb61c..2ba666e 100644 --- a/resource/examples/SConscript +++ b/resource/examples/SConscript @@ -47,7 +47,6 @@ examples_env.AppendUnique(CPPPATH = [ 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']) @@ -57,6 +56,8 @@ if 'g++' in compiler: if target_os in ['msys_nt', 'windows']: examples_env.PrependUnique(LIBS = ['mswsock', 'ws2_32', 'iphlpapi', 'ole32']) +else: + examples_env.PrependUnique(LIBS = ['oc_logger']) if examples_env.get('SECURED') == '1': examples_env.AppendUnique(LIBS = ['mbedtls', 'mbedx509','mbedcrypto']) diff --git a/resource/oc_logger/SConscript b/resource/oc_logger/SConscript index b5712f8..6ff9ee7 100644 --- a/resource/oc_logger/SConscript +++ b/resource/oc_logger/SConscript @@ -50,16 +50,13 @@ if target_os not in ['darwin', 'ios', 'windows', 'msys_nt']: # Source files and Targets ###################################################################### -oc_logger_libs = [] +oc_logger_libs = liboc_logger_env.StaticLibrary('oc_logger_internal', + ['c/oc_logger.c', 'c/oc_console_logger.c', 'cpp/oc_ostream_logger.cpp']) -if target_os in ['windows', 'msys_nt','ios']: - # If oc_logger APIs have to be exported from a Windows DLL, these functions - # should be exported from octbstack.dll. Building a separate oc_logger.dll here - # would result in duplicated code and data across these two DLLs. Using just - # the static oc_logger.lib is good enough for Windows for now. +if target_os in ['ios']: oc_logger_libs += liboc_logger_env.StaticLibrary('oc_logger', ['c/oc_logger.c', 'c/oc_console_logger.c', 'cpp/oc_ostream_logger.cpp']) -else: +elif target_os not in ['windows', 'msys_nt']: oc_logger_libs += Flatten(liboc_logger_env.SharedLibrary('oc_logger_core', ['c/oc_logger.c'], OBJPREFIX='core_')) oc_logger_libs += Flatten(liboc_logger_env.SharedLibrary('oc_logger', @@ -76,4 +73,3 @@ liboc_logger_env.UserInstallTargetHeader('include/targets/oc_ostream_logger.h', if target_os not in ['ios', 'android']: SConscript('examples/SConscript') - diff --git a/resource/oc_logger/examples/SConscript b/resource/oc_logger/examples/SConscript index f1dd133..9fdea6e 100644 --- a/resource/oc_logger/examples/SConscript +++ b/resource/oc_logger/examples/SConscript @@ -32,21 +32,24 @@ examples_env = lib_env.Clone() # Build flags ###################################################################### examples_env.PrependUnique(CPPPATH = ['../include']) -examples_env.AppendUnique(LIBS = ['oc_logger']) examples_env.Append(LIBS = ['c_common']) compiler = env.get('CC') if compiler != 'cl': - examples_env.AppendUnique(LIBS = ['stdc++']) + examples_env.AppendUnique(LIBS = ['stdc++']) target_os = env.get('TARGET_OS') -if target_os == 'android': - examples_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions']) - examples_env.AppendUnique(LIBS = ['gnustl_shared']) -if target_os not in ['arduino', 'windows']: - examples_env.AppendUnique(CFLAGS = Split('-Wall -std=c99 -Werror')) - examples_env.AppendUnique(CXXFLAGS = Split('-Wall -std=c++0x')) +if target_os not in ['arduino', 'msys_nt', 'windows']: + examples_env.AppendUnique(CFLAGS = Split('-Wall -std=c99 -Werror')) + examples_env.AppendUnique(CXXFLAGS = Split('-Wall -std=c++0x')) + examples_env.AppendUnique(LIBS = ['oc_logger']) + + if target_os == 'android': + examples_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions']) + examples_env.PrependUnique(LIBS = ['gnustl_shared']) +else: + examples_env.AppendUnique(LIBS = ['octbstack']) ###################################################################### # Source files and Targets @@ -56,4 +59,3 @@ examples_cpp = examples_env.Program('examples_cpp', 'test_logging.cpp') Alias('liboc_logger_examples', [examples_c, examples_cpp]) examples_env.AppendTarget('liboc_logger_examples') - diff --git a/resource/unittests/SConscript b/resource/unittests/SConscript index f9e0119..11a769f 100644 --- a/resource/unittests/SConscript +++ b/resource/unittests/SConscript @@ -58,7 +58,7 @@ if target_os in ['windows']: unittests_env.PrependUnique(LIBS = [ 'oc', 'octbstack_test', - 'oc_logger', + 'oc_logger_internal', 'connectivity_abstraction', 'coap', 'mbedcrypto'])