Updated auto_build.sh for continuous integration improvements.
[contrib/iotivity.git] / auto_build.sh
1 #! /bin/bash
2
3 # Ideally we will capture the exit code of each step and try them all before failing
4 # the build script.  For now, use set -e and fail the build at first failure.
5 set -e
6
7 function build_all()
8 {
9         if [ $(uname -s) = "Linux" ]
10         then
11                 build_linux_unsecured $1 $2
12                 build_linux_secured $1 $2
13                 build_linux_unsecured_with_ra $1 $2
14                 build_linux_secured_with_ra $1 $2
15         fi
16
17         build_android $1 $2
18
19         build_arduino $1 $2
20
21         build_tizen $1 $2
22
23         if [ $(uname -s) = "Darwin" ]
24         then
25                 build_darwin $1 $2
26         fi
27 }
28
29 function build_linux()
30 {
31         build_linux_unsecured $1 $2
32
33         build_linux_secured $1 $2
34 }
35
36 function build_linux_unsecured()
37 {
38         echo "*********** Build for linux ************"
39         scons RELEASE=$1 $2
40 }
41
42 function build_linux_secured()
43 {
44         echo "*********** Build for linux with Security *************"
45         scons RELEASE=$1 SECURED=1 $2
46 }
47
48 function build_linux_unsecured_with_ra()
49 {
50
51         echo "*********** Build for linux With Remote Access *************"
52         scons RELEASE=$1 WITH_RA=1 $2
53 }
54
55 function build_linux_secured_with_ra()
56 {
57         echo "*********** Build for linux With Remote Access & Security ************"
58         scons RELEASE=$1 WITH_RA=1 SECURED=1 $2
59 }
60
61 function build_android()
62 {
63         # Note: for android, as oic-resource uses C++11 feature stoi and to_string,
64         # it requires gcc-4.9, currently only android-ndk-r10(for linux)
65         # and windows android-ndk-r10(64bit target version) support these features.
66         echo "*********** Build Boost for android ***********"
67         # disable parallel build for android as gradle depends on scons to finish first
68         export SCONSFLAGS="-Q"
69
70         echo "*********** Build for android x86 *************"
71         scons TARGET_OS=android TARGET_ARCH=x86 RELEASE=$1 TARGET_TRANSPORT=IP $2
72
73         echo "*********** Build for android armeabi *************"
74         scons TARGET_OS=android TARGET_ARCH=armeabi RELEASE=$1 TARGET_TRANSPORT=IP $2
75
76         # enable parallel build
77         export SCONSFLAGS="-Q -j 4"
78 }
79
80 function build_arduino()
81 {
82         echo "*********** Build for arduino avr *************"
83         scons resource TARGET_OS=arduino UPLOAD=false BOARD=mega TARGET_ARCH=avr TARGET_TRANSPORT=IP SHIELD=ETH RELEASE=$1 $2
84         scons resource TARGET_OS=arduino UPLOAD=false BOARD=mega TARGET_ARCH=avr TARGET_TRANSPORT=IP SHIELD=WIFI RELEASE=$1 $2
85
86         echo "*********** Build for arduino arm *************"
87         scons resource TARGET_OS=arduino UPLOAD=false BOARD=arduino_due_x TARGET_ARCH=arm TARGET_TRANSPORT=IP SHIELD=ETH RELEASE=$1 $2
88         scons resource TARGET_OS=arduino UPLOAD=false BOARD=arduino_due_x TARGET_ARCH=arm TARGET_TRANSPORT=IP SHIELD=WIFI RELEASE=$1 $2
89 }
90
91 function build_tizen()
92 {
93         echo "*********** Build for Tizen CA lib and sample *************"
94         scons -f resource/csdk/connectivity/build/tizen/SConscript TARGET_OS=tizen TARGET_TRANSPORT=IP LOGGING=true RELEASE=$1 $2
95
96         echo "*********** Build for Tizen CA lib and sample with Security *************"
97         scons -f resource/csdk/connectivity/build/tizen/SConscript TARGET_OS=tizen TARGET_TRANSPORT=IP LOGGING=true SECURED=1 RELEASE=$1 $2
98 }
99
100 function build_darwin() # Mac OSx and iOS
101 {
102         echo "*********** Build for OSX *************"
103         scons TARGET_OS=darwin SYS_VERSION=10.9 RELEASE=$1 $2
104
105         echo "*********** Build for IOS i386 *************"
106         scons TARGET_OS=ios TARGET_ARCH=i386 SYS_VERSION=7.0 RELEASE=$1 $2
107
108         echo "*********** Build for IOS x86_64 *************"
109         scons TARGET_OS=ios TARGET_ARCH=x86_64 SYS_VERSION=7.0 RELEASE=$1 $2
110
111         echo "*********** Build for IOS armv7 *************"
112         scons TARGET_OS=ios TARGET_ARCH=armv7 SYS_VERSION=7.0 RELEASE=$1 $2
113
114         echo "*********** Build for IOS armv7s *************"
115         scons TARGET_OS=ios TARGET_ARCH=armv7s SYS_VERSION=7.0 RELEASE=$1 $2
116
117         echo "*********** Build for IOS arm64 *************"
118         scons TARGET_OS=ios TARGET_ARCH=arm64 SYS_VERSION=7.0 RELEASE=$1 $2
119 }
120
121 function unit_tests()
122 {
123         scons resource RELEASE=false -c
124         scons resource LOGGING=false RELEASE=false
125         scons resource TEST=1 RELEASE=false
126 }
127
128 function  help()
129 {
130         echo "Usage:"
131         echo "  build:"
132         echo "     `basename $0` <target_build>"
133         echo "      Allowed values for <target_build>: all, linux_unsecured, linux_secured, linux_unsecured_with_ra, linux_secured_with_ra, android, arduino, tizen, darwin"
134         echo "      Note: \"linux\" will build \"linux_unsecured\", \"linux_secured\", \"linux_unsecured_with_ra\" & \"linux_secured_with_ra\"."
135         echo "      Any selection will build both debug and release versions of all available targets in the scope you've"
136         echo "      selected. To choose any specific command, please use the SCons commandline directly. Please refer"
137         echo "      to [IOTIVITY_REPO]/Readme.scons.txt."
138         echo "  clean:"
139         echo "     `basename $0` -c"
140 }
141
142 # Suppress "Reading ..." message and enable parallel build
143 export SCONSFLAGS="-Q -j 4"
144
145 if [ $# -eq 1 ]
146 then
147         if [ $1 = '-c' ]
148         then
149                 build_all true $1
150                 build_all false $1
151                 exit 0
152         elif [ $1 = 'all' ]
153         then
154                 build_all true
155                 build_all false
156                 unit_tests
157         elif [ $1 = 'linux' ]
158         then
159                 build_linux true
160                 build_linux false
161         elif [ $1 = 'linux_unsecured' ]
162         then
163                 build_linux_unsecured true
164                 build_linux_unsecured false
165         elif [ $1 = 'linux_secured' ]
166         then
167                 build_linux_secured true
168                 build_linux_secured false
169         elif [ $1 = 'linux_unsecured_with_ra' ]
170         then
171                 build_linux_unsecured_with_ra true
172                 build_linux_unsecured_with_ra false
173         elif [ $1 = 'linux_secured_with_ra' ]
174         then
175                 build_linux_secured_with_ra true
176                 build_linux_secured_with_ra false
177         elif [ $1 = 'android' ]
178         then
179                 build_android true
180                 build_android false
181         elif [ $1 = 'arduino' ]
182         then
183                 build_arduino true
184                 build_arduino false
185         elif [ $1 = 'tizen' ]
186         then
187                 build_tizen true
188                 build_tizen false
189         elif [ $1 = 'darwin' ]
190         then
191                 build_darwin true
192                 build_darwin false
193         elif [ $1 = 'unit_tests' ]
194         then
195                 unit_tests
196         else
197                 help
198                 exit -1
199         fi
200 elif [ $# -eq 0 ]
201 then
202         build_all true
203         build_all false
204         unit_tests
205 else
206         help
207 #This is temporarily changed to support the transition on the Jenkins Build Server so that current work is not hindered.
208 #       exit -1
209 ####DELETE THE FOLLOWING 3 LINES!! And uncomment the line directly above this line!
210         build_all true
211         build_all false
212         unit_tests
213 fi
214
215 echo "===================== done ====================="
216
217