[IOT-1816] Windows: Fix build breaks
authorDan Mihai <Daniel.Mihai@microsoft.com>
Tue, 14 Feb 2017 01:00:50 +0000 (17:00 -0800)
committerKevin Kane <kkane@microsoft.com>
Tue, 14 Feb 2017 17:31:17 +0000 (17:31 +0000)
1. Most likely the ocrandom compiler error was hiding the RD linker
   errors.

2. Support both RD Client and Server functionality with
   octbstack.dll

3. Avoid building sqlite3.obj with several different compiler options,
   by building it a single time and packaging it in sqlite3.lib

Change-Id: I8b9fe95f97d88a28a8b6bb48fd9932f51a65ecdb
Signed-off-by: Dan Mihai <Daniel.Mihai@microsoft.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/17253
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Kevin Kane <kkane@microsoft.com>
12 files changed:
extlibs/sqlite3/SConscript
resource/c_common/ocrandom/src/ocrandom.c
resource/csdk/resource-directory/SConscript
resource/csdk/security/provisioning/SConscript
resource/csdk/security/provisioning/sample/SConscript
resource/csdk/security/provisioning/unittest/SConscript
resource/csdk/security/tool/SConscript
resource/csdk/security/unittest/SConscript
resource/csdk/stack/SConscript
resource/csdk/stack/test/SConscript
resource/unittests/SConscript
run.bat

index 6fa46b52778779b8ded16cc7fe19b6627ef7a786..8c563a6028926c157dbabede1bcd603a1081d97b 100755 (executable)
@@ -38,3 +38,10 @@ if target_os in targets_need_sqlite:
         os.rename(sqlite_h_tmp, sqlite_h)
         os.remove(sqlite_zip_file)
         shutil.rmtree(sqlite_tmp_dir)
+
+if target_os in ['windows']:
+    libsqlite3 = sqlite_env.StaticLibrary('sqlite3', sqlite_c)
+    # In multi-threaded builds, SCons appears to proceed to using sqlite3.lib
+    # before finishing InstallTarget(libsqlite3, 'sqlite3') here. So, use the
+    # generated LIB directly, without installing it.
+    env.AppendUnique(LIBPATH = [os.path.join(env.get('BUILD_DIR'), 'extlibs/sqlite3')])
index 20385205989a8d9bcb6fd658e894dca0bccf6623..fb9e4d185ca878a5e72fc511460bec4308d20516 100644 (file)
@@ -374,10 +374,10 @@ bool OCIsUUID(const char *uuid)
         char var = uuid[i];
 
         //Check if a hyphen is expected here.
-        if (i = hyphens[counter] -1)
+        if (i == (hyphens[counter] - 1))
         {
             //We need a hyphen here.
-            if('-' != var)
+            if ('-' != var)
             {
                 //The character is not a hyphen.
                 return false;
index d66a9b2fbfecdb460c8e7d35d4d2db253afe00b9..7d7b167bdb520d102feb5d27d7a8e9910c8fc95d 100755 (executable)
@@ -83,7 +83,7 @@ if 'SERVER' in rd_mode:
         RD_SRC_DIR + 'internal/rd_database.c',
         RD_SRC_DIR + 'rd_server.c',
         ]
-    if target_os not in ['linux', 'tizen'] :
+    if target_os not in ['linux', 'tizen', 'windows'] :
         rd_src += [ '../../../extlibs/sqlite3/sqlite3.c' ]
 
 if 'CLIENT' in rd_mode:
index 09f911f1277edcad5d43dc9972df809b0d03ad61..ef2f5f4f3c7fc32ed9bd681a373d4672e0351dfb 100644 (file)
@@ -105,7 +105,8 @@ if target_os in ['linux', 'tizen']:
        provisioning_env.ParseConfig('pkg-config --cflags --libs sqlite3')
 else:
        provisioning_env.AppendUnique(CPPPATH = ['#/extlibs/sqlite3'])
-       provisioning_src = provisioning_src + ['#/extlibs/sqlite3/sqlite3.c' ]
+       if target_os not in ['windows']:
+               provisioning_src = provisioning_src + ['#/extlibs/sqlite3/sqlite3.c' ]
 
 if target_os in ['android']:
        provisioning_env.AppendUnique(LINKFLAGS = ['-Wl,-soname,libocpmapi.so'])
index e9b0e0886e4ba37d35339a453edef3dde8090094..b1d1bb4207cb8986cdfd48d86faeaea1d0b40a72 100644 (file)
@@ -67,8 +67,13 @@ provisioning_sample_env.AppendUnique(CPPDEFINES = ['TB_LOG'])
 
 if target_os == 'tizen':
     provisioning_sample_env.AppendUnique(CPPDEFINES = ['__TIZEN__'])
+
 if target_os in ['linux', 'tizen']:
     provisioning_sample_env.ParseConfig('pkg-config --cflags --libs sqlite3')
+else:
+    if target_os in ['windows']:
+        provisioning_sample_env.AppendUnique(LIBS = ['sqlite3'])
+
 
 ######################################################################
 # Source files and Targets
index ac6aa2cb2ad97a7be3ca345bf0126e6543133a7e..659aba43e94e30749615e1c4f2fa77a8cc337e90 100644 (file)
@@ -82,7 +82,7 @@ if sptest_env.get('MULTIPLE_OWNER') == '1':
        sptest_env.AppendUnique(CPPDEFINES=['MULTIPLE_OWNER'])
 
 if target_os in ['msys_nt', 'windows']:
-    sptest_env.AppendUnique(LIBS = ['octbstack_static'])
+    sptest_env.AppendUnique(LIBS = ['octbstack_static', 'sqlite3'])
 else:
        sptest_env.AppendUnique(LIBS = ['octbstack'])
 
index 501ab1403bbb213e2b31f9e652b763a5b808ae01..fdc5d692f25c903a0035076da461c6414755bad4 100644 (file)
@@ -19,6 +19,7 @@
 # //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 #
 Import('libocsrm_env')
+import os
 
 tools_env = libocsrm_env.Clone()
 src_dir = tools_env.get('SRC_DIR')
@@ -55,7 +56,7 @@ SConscript('#/extlibs/cjson/SConscript')
 if target_os in ['msys_nt', 'windows']:
     # octbstack.dll doesn't export all the functions called by this app, so use static LIBs instead.
     tools_env.AppendUnique(LIBS = ['coap', 'tinydtls', 'mbedtls', 'mbedx509', 'mbedcrypto',
-                                   'octbstack_static', 'ocsrm', 'connectivity_abstraction'])
+                                   'octbstack_static', 'ocsrm', 'connectivity_abstraction', 'sqlite3'])
 elif target_os in ['darwin']:
     tools_env.AppendUnique(LIBS = ['coap', 'tinydtls', 'mbedtls', 'mbedx509', 'mbedcrypto',
                                    'octbstack', 'ocsrm', 'connectivity_abstraction'])
index fa2cf4a82bbd294f3b7e6b13c62646426327768f..e9d50c354085ebe0339a34a1464db5df67200919 100644 (file)
@@ -75,8 +75,7 @@ if srmtest_env.get('MULTIPLE_OWNER') == '1':
        srmtest_env.AppendUnique(CPPDEFINES=['MULTIPLE_OWNER'])
 
 if target_os == 'windows':
-       srmtest_env.AppendUnique(LINKFLAGS = ['/subsystem:CONSOLE'])
-       srmtest_env.AppendUnique(LIBS = ['octbstack_static'])
+       srmtest_env.AppendUnique(LIBS = ['octbstack_static', 'sqlite3'])
 else:
        # TODO: Implement feature check.
        srmtest_env.AppendUnique(CPPDEFINES = ['HAVE_LOCALTIME_R'])
index 7ea0e3def11e802ebe74396eb8b257c4f3b5996f..e9a9b24f59951c63e90e5b0c90654615a93f2a35 100644 (file)
@@ -22,6 +22,7 @@
 # liboctbstack (share library) build script
 ##
 Import('env')
+import os
 
 liboctbstack_env = env.Clone()
 
@@ -158,8 +159,13 @@ if liboctbstack_env.get('ROUTING') in ['GW', 'EP']:
 
 if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
     liboctbstack_env.PrependUnique(CPPPATH = ['#resource/csdk/resource-directory/include'])
+
+    if target_os in ['windows']:
+        liboctbstack_env.AppendUnique(LIBS = ['sqlite3'])
+
     if 'CLIENT' in rd_mode:
         liboctbstack_env.AppendUnique(CPPDEFINES = ['RD_CLIENT'])
+
     if 'SERVER' in rd_mode:
         liboctbstack_env.AppendUnique(CPPDEFINES = ['RD_SERVER'])
         if target_os in ['tizen']:
@@ -192,7 +198,7 @@ if with_tcp == True:
 
 if 'SERVER' in rd_mode:
     liboctbstack_src.append(OCTBSTACK_SRC + 'oicresourcedirectory.c')
-    if target_os not in ['linux', 'tizen']:
+    if target_os not in ['linux', 'tizen', 'windows']:
         liboctbstack_src.append('#extlibs/sqlite3/sqlite3.c')
 
 if target_os in ['linux']:
index ed3d2e67fb0513811c551c071b8887f853326f3f..8ccaabae6785091f4895e1c9ebe9d46a982e6b68 100644 (file)
@@ -62,6 +62,8 @@ if stacktest_env.get('LOGGING'):
 
 if target_os not in ['msys_nt', 'windows']:
        stacktest_env.PrependUnique(LIBS = ['m'])
+else:
+       stacktest_env.PrependUnique(LIBS = ['sqlite3'])
 
 if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
        stacktest_env.PrependUnique(LIBS = ['resource_directory'])
index e6d27be4cc904d0c62ab5a96756b5fa58ec609a3..44202b8749d4b8b662684bdc1f4ae48d026c7dbc 100644 (file)
@@ -51,6 +51,7 @@ unittests_env.PrependUnique(CPPPATH = [
 
 if target_os in ['windows']:
        unittests_env.AppendUnique(CPPPATH = ['#extlibs/boost/boost'])
+       unittests_env.AppendUnique(LIBS = ['sqlite3'])
        # On Windows, octbstack_test is a static LIB, that makes calls into static LIB ocsrm.
        # On other platforms, octbstack_test is a shared LIB, that includes static LIB ocsrm.
        unittests_env.AppendUnique(LIBS = ['ocsrm'])
diff --git a/run.bat b/run.bat
index cee534b3bad9b6d73442788cf24b536d22e66a81..5a933c34829217ac27b7bf424a951b50be8fd192 100644 (file)
--- a/run.bat
+++ b/run.bat
@@ -49,6 +49,7 @@ set THREAD_COUNT=%NUMBER_OF_PROCESSORS%
 set ROUTING=EP
 set WITH_UPSTREAM_LIBCOAP=1
 set BINDIR=debug
+set RD_MODE=CLIENT,SERVER
 
 set RUN_ARG=%1
 SHIFT
@@ -104,7 +105,7 @@ IF "%BUILD_MSYS%" == "" (
   set PATH=!PATH!;!BUILD_DIR!;C:\msys64\mingw64\bin
 )
 
-set BUILD_OPTIONS= TARGET_OS=%TARGET_OS% TARGET_ARCH=%TARGET_ARCH% RELEASE=%RELEASE% WITH_RA=0 TARGET_TRANSPORT=IP SECURED=%SECURED% WITH_TCP=%WITH_TCP% BUILD_SAMPLE=ON LOGGING=%LOGGING% TEST=%TEST% RD_MODE=CLIENT ROUTING=%ROUTING% WITH_UPSTREAM_LIBCOAP=%WITH_UPSTREAM_LIBCOAP% MULTIPLE_OWNER=%MULTIPLE_OWNER% -j %THREAD_COUNT%
+set BUILD_OPTIONS= TARGET_OS=%TARGET_OS% TARGET_ARCH=%TARGET_ARCH% RELEASE=%RELEASE% WITH_RA=0 TARGET_TRANSPORT=IP SECURED=%SECURED% WITH_TCP=%WITH_TCP% BUILD_SAMPLE=ON LOGGING=%LOGGING% TEST=%TEST% RD_MODE=%RD_MODE% ROUTING=%ROUTING% WITH_UPSTREAM_LIBCOAP=%WITH_UPSTREAM_LIBCOAP% MULTIPLE_OWNER=%MULTIPLE_OWNER% -j %THREAD_COUNT%
 
 REM Use MSVC_VERSION=12.0 for VS2013, or MSVC_VERSION=14.0 for VS2015.
 REM If MSVC_VERSION has not been defined here, SCons chooses automatically a VS version.