Windows: Enable UWP to be built on master 35/23035/2
authorIbrahim Esmat <iesmat@microsoft.com>
Thu, 26 Oct 2017 21:09:31 +0000 (14:09 -0700)
committerMats Wichmann <mats@linux.com>
Tue, 7 Nov 2017 21:46:49 +0000 (21:46 +0000)
If you are building for UWP, then you can't build and run a regular
desktop program/exe. Therefore, needed tools like json2cbor will
fail to run and the build will fail to generate the .dat files that
are needed.
- Change run.bat to build the win32 version of the security tool
(resource/csdk/security/tool) which will be copied to the uwp output
directory to use for the build.
- Change the security tool SConscript file to check for this when
building for UWP.

Change-Id: I2d83cdf3d78cc73a9e31be2741251d533c1ae93a
Signed-off-by: Ibrahim Esmat <iesmat@microsoft.com>
resource/csdk/security/tool/SConscript
run.bat

index d8d073c..b89f3e2 100644 (file)
 #
 Import('libocsrm_env')
 import os
+from distutils.dir_util import copy_tree
 
 tools_env = libocsrm_env.Clone()
 src_dir = tools_env.get('SRC_DIR')
 target_os = tools_env.get('TARGET_OS')
 
+if ((target_os == 'windows') and (tools_env.get('MSVC_UWP_APP') == '1') and \
+    (not tools_env.GetOption('clean'))):
+    # If you are building for UWP, then you can't build and run a regular desktop program/exe.
+    # Make sure that the win32 version is built and copy it to the uwp build output directory.
+    tool_path = os.path.join(tools_env.get('BUILD_DIR'), 'resource/csdk/security/tool')
+    tool_path_win32 = tool_path.replace('/uwp/', '/win32/')
+    json2cbor_win32_file = os.path.join(tool_path_win32, 'json2cbor' + tools_env.get('PROGSUFFIX'))
+    if os.path.exists(json2cbor_win32_file):
+        # Copy the win32 version to use here
+        copy_tree(tool_path_win32, tool_path)
+        print('Copied the win32 security tools to %s' % tool_path)
+        Return()
+    else:
+        # win32 version doesn't exist, output message
+        err_msg = 'Error: Please build the win32 version of the security tool ' + \
+                  '(resource/csdk/security/tool) and then run the UWP build again'
+        print(err_msg)
+        Exit(1)
+
 ######################################################################
 # Build flags
 ######################################################################
diff --git a/run.bat b/run.bat
index 9826600..a572fd0 100644 (file)
--- a/run.bat
+++ b/run.bat
@@ -144,7 +144,7 @@ IF "%BUILD_MSYS%" == "" (
   set PATH=!PATH!;!BUILD_DIR!;C:\msys64\mingw64\bin
 )
 
-set BUILD_OPTIONS= TARGET_OS=%TARGET_OS% TARGET_ARCH=%TARGET_ARCH% MSVC_UWP_APP=%MSVC_UWP_APP% RELEASE=%RELEASE% TARGET_TRANSPORT=IP SECURED=%SECURED% WITH_TCP=%WITH_TCP% BUILD_SAMPLE=ON LOGGING=%LOGGING% LOG_LEVEL=%LOG_LEVEL% RD_MODE=%RD_MODE% ROUTING=%ROUTING% WITH_UPSTREAM_LIBCOAP=%WITH_UPSTREAM_LIBCOAP% MULTIPLE_OWNER=%MULTIPLE_OWNER% AUTOMATIC_UPDATE=%AUTOMATIC_UPDATE% BUILD_JAVA=%BUILD_JAVA%
+set BUILD_OPTIONS=TARGET_OS=%TARGET_OS% TARGET_ARCH=%TARGET_ARCH% RELEASE=%RELEASE% TARGET_TRANSPORT=IP SECURED=%SECURED% WITH_TCP=%WITH_TCP% BUILD_SAMPLE=ON LOGGING=%LOGGING% LOG_LEVEL=%LOG_LEVEL% RD_MODE=%RD_MODE% ROUTING=%ROUTING% WITH_UPSTREAM_LIBCOAP=%WITH_UPSTREAM_LIBCOAP% MULTIPLE_OWNER=%MULTIPLE_OWNER% AUTOMATIC_UPDATE=%AUTOMATIC_UPDATE% BUILD_JAVA=%BUILD_JAVA%
 
 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.
@@ -223,19 +223,33 @@ if "!RUN_ARG!"=="server" (
   REM   - Other SCons Config headers get generated during this step too, as a side effect.
   echo.==============================================================
   echo.run.bat : Generating Config header files...
-  echo.scons.bat -j 1 VERBOSE=1 TEST=0 %BUILD_OPTIONS% extlibs\libcoap\libcoap\include\coap\coap.h
-  call scons.bat -j 1 VERBOSE=1 TEST=0 %BUILD_OPTIONS% extlibs\libcoap\libcoap\include\coap\coap.h
+  echo.scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% extlibs\libcoap\libcoap\include\coap\coap.h
+  call scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% extlibs\libcoap\libcoap\include\coap\coap.h
   if ERRORLEVEL 1 (
     echo SCons failed - exiting run.bat with code 5
     exit /B 5
   )
 
+  if "!MSVC_UWP_APP!"=="1" (
+    REM Extra step:
+    REM   - Generate the win32 security tools (json2cbor, svrdbeditor) from resource/csdk/security/tool
+    REM   - This needs to be done because you cannot build regular desktop programs when building for UWP
+    echo.==============================================================
+    echo.run.bat : Generating security tools, json2cbor, etc...
+    echo.scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool
+    call scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool
+    if ERRORLEVEL 1 (
+      echo SCons failed - exiting run.bat with code 6
+      exit /B 6
+    )
+  )
+
   REM Second step:
   REM   - Compile everything, but don't run tests yet.
   echo.==============================================================
   echo.run.bat : Compiling...
-  echo.scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 %BUILD_OPTIONS%
-  call scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 %BUILD_OPTIONS%
+  echo.scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
+  call scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
   if ERRORLEVEL 1 (
     echo SCons failed - exiting run.bat with code 3
     exit /B 3
@@ -246,8 +260,8 @@ if "!RUN_ARG!"=="server" (
   if "!TEST!"=="1" (
     echo.==============================================================
     echo.run.bat : Running tests...
-    echo.scons.bat -j 1 VERBOSE=1 TEST=1 %BUILD_OPTIONS%
-    call scons.bat -j 1 VERBOSE=1 TEST=1 %BUILD_OPTIONS%
+    echo.scons.bat -j 1 VERBOSE=1 TEST=1 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
+    call scons.bat -j 1 VERBOSE=1 TEST=1 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
     if ERRORLEVEL 1 (
         echo SCons failed - exiting run.bat with code 4
         exit /B 4
@@ -256,12 +270,25 @@ if "!RUN_ARG!"=="server" (
 ) else if "!RUN_ARG!"=="clean" (
   echo Cleaning IoTivity build
   del /S *.ilk
-  echo.scons.bat -j 1 VERBOSE=1 TEST=%TEST% %BUILD_OPTIONS% -c
-  call scons.bat -j 1 VERBOSE=1 TEST=%TEST% %BUILD_OPTIONS% -c
+  echo.scons.bat -j 1 VERBOSE=1 TEST=%TEST% MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS% -c
+  call scons.bat -j 1 VERBOSE=1 TEST=%TEST% MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS% -c
   if ERRORLEVEL 1 (
     echo SCons failed - exiting run.bat with code 2
     exit /B 2
   )
+
+  if "!MSVC_UWP_APP!"=="1" (
+    REM Extra step:
+    REM   - Clean the win32 security tools (json2cbor, svrdbeditor) from resource/csdk/security/tool
+    echo.==============================================================
+    echo.run.bat : Cleaning win32 security tools, json2cbor, etc...
+    echo.scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool -c
+    call scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool -c
+    if ERRORLEVEL 1 (
+      echo SCons failed - exiting run.bat with code 7
+      exit /B 7
+    )
+  )
 ) else if "!RUN_ARG!"=="cleangtest" (
   rd /s /q extlibs\gtest\googletest-release-1.7.0
   del extlibs\gtest\release-1.7.0.zip