IOT-3045 Fix return type of getResourceHandleAtUri
[iotivity.git] / run.bat
1 @echo off
2 REM Helper script to build and run IoTivity on Windows
3 SETLOCAL ENABLEDELAYEDEXPANSION
4
5 if [%1]==[] goto USAGE
6
7 set IOTIVITY_DIR=%~dp0
8 set HOME=%USERPROFILE%
9
10 IF /I "%1" == "msys" (
11   set BUILD_MSYS="YES"
12   SHIFT
13 ) ELSE (
14   set BUILD_MSYS=
15 )
16
17 REM *** Default BUILD OPTIONS ***
18 set TARGET_OS=windows
19
20 if "%JENKINS_HOME%" == "" (
21   set AUTOMATIC_UPDATE=0
22 ) else (
23   set AUTOMATIC_UPDATE=1
24 )
25
26 if "%TARGET_ARCH%" == "" (
27   set TARGET_ARCH=amd64
28 )
29
30 if "%TEST%" == "" (
31   set TEST=1
32 )
33
34 if "%LOGGING%" == "" (
35   set LOGGING=0
36 )
37
38 if "%LOG_LEVEL%" == "" (
39   set LOG_LEVEL=DEBUG
40 )
41
42 if "%RELEASE%" == "" (
43   set RELEASE=0
44 )
45
46 if "%WITH_TCP%" == "" (
47   set WITH_TCP=1
48 )
49
50 if "%SECURED%" == "" (
51   set SECURED=1
52 )
53
54 if "%MULTIPLE_OWNER%" == "" (
55   set MULTIPLE_OWNER=1
56 )
57
58 if "%MSVC_UWP_APP%" == "" (
59   REM Set it to build Win32 app by default
60   set MSVC_UWP_APP=0
61 )
62
63 if "%BUILD_JAVA%" == "" (
64   REM Do not build Java by default
65   set BUILD_JAVA=0
66 )
67
68 set THREAD_COUNT=%NUMBER_OF_PROCESSORS%
69
70 set ROUTING=EP
71 set WITH_UPSTREAM_LIBCOAP=1
72 set BINDIR=debug
73 set RD_MODE=CLIENT,SERVER
74
75 set RUN_ARG=%1
76 SHIFT
77
78 set DEBUG=
79
80 :processArgs
81 IF NOT "%1"=="" (
82   IF /I "%1"=="-arch" (
83     SET TARGET_ARCH=%2
84     SHIFT
85   )
86   IF /I "%1"=="-threads" (
87     SET THREAD_COUNT=%2
88     SHIFT
89   )
90   IF /I "%1"=="-noTest" (
91     SET TEST=0
92   )
93   IF /I "%1"=="-logging" (
94     SET LOGGING=1
95   )
96   IF /I "%1"=="-logLevel" (
97     SET LOG_LEVEL=%2
98     SHIFT
99   )
100   IF /I "%1"=="-debugger" (
101     set DEBUG="%ProgramFiles(x86)%\Windows Kits\10\Debuggers\x64\cdb.exe" -2 -c "g"
102   )
103   IF /I "%1"=="-release" (
104     SET RELEASE=1
105   )
106   IF /I "%1"=="-noTCP" (
107     SET WITH_TCP=0
108   )
109   IF /I "%1"=="-noSecurity" (
110     set SECURED=0
111   )
112   IF /I "%1"=="-noMOT" (
113     set MULTIPLE_OWNER=0
114   )
115   IF /I "%1"=="-automaticUpdate" (
116     set AUTOMATIC_UPDATE=1
117   )
118   IF /I "%1"=="-uwp" (
119     set MSVC_UWP_APP=1
120   )
121   IF /I "%1"=="-java" (
122     set BUILD_JAVA=1
123   )
124
125   SHIFT
126   GOTO :processArgs
127 )
128
129 IF %RELEASE% == 1 (
130   set BINDIR=release
131 )
132
133 set BUILD_VARIANT=win32
134 if "%MSVC_UWP_APP%" == "1" (
135   set BUILD_VARIANT=uwp
136 )
137
138 REM We need to append the "PATH" so the octbstack.dll can be found by executables
139 IF "%BUILD_MSYS%" == "" (
140   set BUILD_DIR=out\windows\%BUILD_VARIANT%\%TARGET_ARCH%\%BINDIR%
141   set PATH=!PATH!;!IOTIVITY_DIR!!BUILD_DIR!;
142 ) ELSE (
143   set BUILD_DIR=out\msys_nt\x86_64\%BINDIR%
144   set PATH=!PATH!;!BUILD_DIR!;C:\msys64\mingw64\bin
145 )
146
147 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%
148
149 REM Use MSVC_VERSION=12.0 for VS2013, or MSVC_VERSION=14.0 for VS2015.
150 REM If MSVC_VERSION has not been defined here, SCons chooses automatically a VS version.
151 IF NOT "%MSVC_VERSION%" == "" (
152   set BUILD_OPTIONS=%BUILD_OPTIONS% MSVC_VERSION=%MSVC_VERSION%
153 )
154
155 REM *** BUILD OPTIONS ***
156
157 if "!RUN_ARG!"=="server" (
158   cd %BUILD_DIR%\resource\examples
159   %DEBUG% simpleserver.exe
160 ) else if "!RUN_ARG!"=="client" (
161   cd %BUILD_DIR%\resource\examples
162   %DEBUG% simpleclient.exe
163 ) else if "!RUN_ARG!"=="serverhq" (
164   cd %BUILD_DIR%\resource\examples
165   %DEBUG% simpleserverHQ.exe
166 ) else if "!RUN_ARG!"=="clienthq" (
167   cd %BUILD_DIR%\resource\examples
168   %DEBUG% simpleclientHQ.exe
169 ) else if "!RUN_ARG!"=="mediaclient" (
170   cd %BUILD_DIR%\resource\examples
171   %DEBUG% mediaclient.exe
172 ) else if "!RUN_ARG!"=="mediaserver" (
173   cd %BUILD_DIR%\resource\examples
174   %DEBUG% mediaserver.exe
175 ) else if "!RUN_ARG!"=="winuiclient" (
176   cd %BUILD_DIR%\resource\examples
177   %DEBUG% winuiclient.exe
178 ) else if "!RUN_ARG!"=="occlient" (
179   cd %BUILD_DIR%\resource\csdk\stack\samples\linux\SimpleClientServer
180   %DEBUG% occlientbasicops.exe -u 0 -t 3 -c 1
181 ) else if "!RUN_ARG!"=="ocserver" (
182   cd %BUILD_DIR%\resource\csdk\stack\samples\linux\SimpleClientServer
183   %DEBUG% ocserverbasicops.exe
184 ) else if "!RUN_ARG!"=="provclient" (
185   cd %BUILD_DIR%\resource\csdk\security\provisioning\sample
186   %DEBUG% provisioningclient.exe
187 ) else if "!RUN_ARG!"=="justworks" (
188   cd %BUILD_DIR%\resource\csdk\security\provisioning\sample
189   %DEBUG% sampleserver_justworks.exe
190 ) else if "!RUN_ARG!"=="test" (
191   %DEBUG% %BUILD_DIR%\resource\csdk\connectivity\test\catests.exe
192   %DEBUG% %BUILD_DIR%\resource\csdk\stack\test\stacktests.exe
193   %DEBUG% %BUILD_DIR%\resource\csdk\stack\test\cbortests.exe
194   %DEBUG% %BUILD_DIR%\resource\csdk\security\unittest\unittest.exe
195   %DEBUG% %BUILD_DIR%\resource\csdk\security\provisioning\unittest\unittest.exe
196   %DEBUG% %BUILD_DIR%\resource\c_common\ocrandom\test\randomtests.exe
197   %DEBUG% %BUILD_DIR%\resource\c_common\oic_malloc\test\malloctests.exe
198   %DEBUG% %BUILD_DIR%\resource\c_common\oic_string\test\stringtests.exe
199   %DEBUG% %BUILD_DIR%\resource\c_common\oic_time\test\timetests.exe
200   %DEBUG% %BUILD_DIR%\resource\unittests\unittests.exe
201 ) else if "!RUN_ARG!"=="build" (
202   echo Starting IoTivity build with these options:
203   echo   TARGET_OS=%TARGET_OS%
204   echo   TARGET_ARCH=%TARGET_ARCH%
205   echo   MSVC_UWP_APP=%MSVC_UWP_APP%
206   echo   BUILD_DIR=%BUILD_DIR%
207   echo   SECURED=%SECURED%
208   echo   RELEASE=%RELEASE%
209   echo   TEST=%TEST%
210   echo   LOGGING=%LOGGING%
211   echo   LOG_LEVEL=%LOG_LEVEL%
212   echo   ROUTING=%ROUTING%
213   echo   WITH_TCP=%WITH_TCP%
214   echo   WITH_UPSTREAM_LIBCOAP=%WITH_UPSTREAM_LIBCOAP%
215   echo   MULTIPLE_OWNER=%MULTIPLE_OWNER%
216   echo   MSVC_VERSION=%MSVC_VERSION%
217   echo   THREAD_COUNT=%THREAD_COUNT%
218   echo   AUTOMATIC_UPDATE=%AUTOMATIC_UPDATE%
219   echo   BUILD_JAVA=%BUILD_JAVA%
220
221   REM First step:
222   REM   - Generate coap.h, to avoid race conditions during second step below (see IOT-2376).
223   REM   - Other SCons Config headers get generated during this step too, as a side effect.
224   echo.==============================================================
225   echo.run.bat : Generating Config header files...
226   echo.scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% extlibs\libcoap\libcoap\include\coap\coap.h
227   call scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% extlibs\libcoap\libcoap\include\coap\coap.h
228   if ERRORLEVEL 1 (
229     echo SCons failed - exiting run.bat with code 5
230     exit /B 5
231   )
232
233   if "!MSVC_UWP_APP!"=="1" (
234     REM Extra step:
235     REM   - Generate the win32 security tools (json2cbor, svrdbeditor) from resource/csdk/security/tool
236     REM   - This needs to be done because you cannot build regular desktop programs when building for UWP
237     echo.==============================================================
238     echo.run.bat : Generating security tools, json2cbor, etc...
239     echo.scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool
240     call scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool
241     if ERRORLEVEL 1 (
242       echo SCons failed - exiting run.bat with code 6
243       exit /B 6
244     )
245   )
246
247   REM Second step:
248   REM   - Compile everything, but don't run tests yet.
249   echo.==============================================================
250   echo.run.bat : Compiling...
251   echo.scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
252   call scons.bat -j %THREAD_COUNT% VERBOSE=1 TEST=0 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
253   if ERRORLEVEL 1 (
254     echo SCons failed - exiting run.bat with code 3
255     exit /B 3
256   )
257
258   REM Third step:
259   REM   - Run tests if needed, using a single SCons thread.
260   if "!TEST!"=="1" (
261     echo.==============================================================
262     echo.run.bat : Running tests...
263     echo.scons.bat -j 1 VERBOSE=1 TEST=1 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
264     call scons.bat -j 1 VERBOSE=1 TEST=1 MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS%
265     if ERRORLEVEL 1 (
266         echo SCons failed - exiting run.bat with code 4
267         exit /B 4
268     )
269   )
270 ) else if "!RUN_ARG!"=="clean" (
271   echo Cleaning IoTivity build
272   del /S *.ilk
273   echo.scons.bat -j 1 VERBOSE=1 TEST=%TEST% MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS% -c
274   call scons.bat -j 1 VERBOSE=1 TEST=%TEST% MSVC_UWP_APP=%MSVC_UWP_APP% %BUILD_OPTIONS% -c
275   if ERRORLEVEL 1 (
276     echo SCons failed - exiting run.bat with code 2
277     exit /B 2
278   )
279
280   if "!MSVC_UWP_APP!"=="1" (
281     REM Extra step:
282     REM   - Clean the win32 security tools (json2cbor, svrdbeditor) from resource/csdk/security/tool
283     echo.==============================================================
284     echo.run.bat : Cleaning win32 security tools, json2cbor, etc...
285     echo.scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool -c
286     call scons.bat -j 1 VERBOSE=1 TEST=0 MSVC_UWP_APP=0 %BUILD_OPTIONS% resource\csdk\security\tool -c
287     if ERRORLEVEL 1 (
288       echo SCons failed - exiting run.bat with code 7
289       exit /B 7
290     )
291   )
292 ) else if "!RUN_ARG!"=="cleangtest" (
293   rd /s /q extlibs\gtest\googletest-release-1.7.0
294   del extlibs\gtest\release-1.7.0.zip
295 ) else (
296   echo.%0 - Script requires a valid argument!
297   echo Exiting run.bat with code 1
298   exit /B 1
299 )
300
301 cd %IOTIVITY_DIR%
302
303 echo Done!
304
305 goto EOF
306
307 :USAGE
308 echo %0 - Helper to build/test iotivity.  Requires an argument.
309 echo Installation: Drop this into your iotivity root directory to use it.
310 echo.
311 echo. Default build settings are: debug binaries run unittests and no logging
312 echo.
313 echo. Default build parameters can be overridden using the following arguments
314 echo.
315 REM At a quick look, the "Build either amd64 or x86 architecture binaries" message
316 REM below seems out of alignment with the other messages underneath it. But, "^|"
317 REM gets echoed as a single character, so the messages are actually aligned correctly
318 REM in the output of "run.bat".
319 echo   -arch [x86 ^| amd64]          - Build either amd64 or x86 architecture binaries
320 echo.
321 echo   -noTest                      - Don't run the unittests after building the binaries
322 echo.
323 echo   -logging                     - Enable logging while building the binaries
324 echo.
325 echo   -logLevel LEVEL              - Enable logging while building the binaries, and ignore log entries less severe than LEVEL.
326 echo                                  Valid levels are: DEBUG, INFO, WARNING, ERROR, and FATAL. Default level is DEBUG.
327 echo.
328 echo   -debugger                    - Debug the requested application
329 echo.
330 echo   -release                     - Build release binaries
331 echo.
332 echo   -threads [NUMBER_OF_THREADS] - Build in parallel using [NUMBER_OF_THREADS] threads. Default: %NUMBER_OF_PROCESSORS%.
333 echo.
334 echo   -noTCP                       - Build with the TCP adapter disabled
335 echo.
336 echo   -noSecurity                  - Remove security support (results in code that cannot be certified by OCF)
337 echo.
338 echo   -noMOT                       - Remove Multiple Ownership Transfer support.
339 echo.
340 echo   -automaticUpdate             - Automatically update libcoap to required version.
341 echo.
342 echo   -uwp                         - Build for the Universal Windows Platform (UWP).
343 echo.
344 echo   -java                        - Build Java. The JDK path must be set in the JAVA_HOME environment variable.
345 echo.
346 echo.
347 echo. Usage examples:
348 echo.
349 echo   Launch SimpleClient with debugger:
350 echo      %0 client -debugger
351 echo.
352 echo   Launch SimpleServer:
353 echo      %0 server
354 echo.
355 echo   Launch WinUIClient built in msys:
356 echo      %0 msys winuiclient
357 echo.
358 echo   Build amd64 debug binaries and run unit tests:
359 echo      %0 build
360 echo.
361 echo   Build amd64 release binaries w/o running tests:
362 echo      %0 build -arch amd64 -noTest -release
363 echo.
364 echo   Build x86 debug binaries and run unit tests:
365 echo      %0 build -arch x86
366 echo.
367 echo   Build amd64 release binaries with logging enabled:
368 echo      %0 build -arch amd64 -release -logging
369 echo.
370 echo   Build debug binaries with logging enabled, and ignore log entries less severe than WARNING:
371 echo      %0 build -logging -logLevel WARNING
372 echo.
373 echo   Build using only one thread:
374 echo      %0 build -threads 1
375 echo.
376 echo   Build with TCP adapter disabled and run unit tests:
377 echo      %0 build -noTCP
378 echo.
379 echo   Build without security support and run unit tests:
380 echo      %0 build -noSecurity
381 echo.
382 echo   Build without Multiple Ownership Transfer support and run unit tests:
383 echo      %0 build -noMOT
384 echo.
385 echo   Run all tests:
386 echo      %0 test
387 echo.
388 echo   Clean:
389 echo      %0 clean
390
391 :EOF