merge master code to build iotivity
[platform/upstream/iotivity.git] / service / resource-encapsulation / src / resourceContainer / SConscript
1 #******************************************************************
2 #
3 # Copyright 2015 Samsung Electronics All Rights Reserved.
4 #
5 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 #      http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 ##
22 # resource container build script
23 ##
24 import os
25 Import('env')
26 import os.path
27
28 containerJavaSupport = ARGUMENTS.get('containerJavaSupport',0)
29
30 def filtered_glob(env, pattern, omit=[],
31   ondisk=True, source=False, strings=False):
32     return filter(
33       lambda f: os.path.basename(f.path) not in omit,
34       env.Glob(pattern))
35
36 env.AddMethod(filtered_glob, "FilteredGlob");
37
38 # Add third party libraries
39 lib_env = env.Clone()
40 SConscript(env.get('SRC_DIR') + '/service/third_party_libs.scons', exports = 'lib_env')
41
42 resource_container_env = lib_env.Clone()
43 target_os = env.get('TARGET_OS')
44 ######################################################################
45 # Build flags
46 ######################################################################
47
48 if int(containerJavaSupport):
49         try:
50                 print 'Java Home: ', os.environ['JAVA_HOME']
51                 print 'Java Lib: ', os.environ['JAVA_LIB']
52                 resource_container_env.Append(CPPDEFINES={'JAVA_SUPPORT':1})
53         except KeyError:
54                 print '''
55         *********************************** Error *************************************
56         * Building resource container without Java support. JAVA_HOME or JAVA_LIB are not set properly
57         * Please configure JAVA_HOME to point to your Java 7 JDK and
58         * JAVA_LIB to your folder containing libjvm
59         * Example: export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
60         *          export JAVA_LIB=/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/server
61         *******************************************************************************
62                 '''
63                 resource_container_env.Append(CPPDEFINES={'JAVA_SUPPORT':0})
64
65
66 resource_container_env.AppendUnique(
67         CPPPATH = [
68                 env.get('SRC_DIR')+'/extlibs',
69                 '../../include',
70                 'include',
71                 'bundle-api/include',
72                 'src'
73         ])
74
75 if int(containerJavaSupport):
76         try:
77                 resource_container_env.AppendUnique(
78                 CPPPATH = [
79                         os.environ['JAVA_HOME']+'/include',
80                         os.environ['JAVA_HOME']+'/include/linux'
81                 ])
82         except KeyError:
83                 print ''
84
85
86 if target_os not in ['windows', 'winrt']:
87     resource_container_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall'])
88     if target_os != 'android':
89         resource_container_env.AppendUnique(CXXFLAGS = ['-pthread'])
90
91 if target_os not in ['darwin', 'ios', 'windows', 'winrt']:
92     resource_container_env.AppendUnique(LINKFLAGS = ['-Wl,--no-undefined'])
93
94 if target_os == 'android':
95     resource_container_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
96     resource_container_env.PrependUnique(LIBS = ['gnustl_shared', 'log'])
97
98 try:
99         resource_container_env.AppendUnique(LIBPATH = [os.environ['JAVA_LIB']])
100 except KeyError:
101         print ''
102
103
104 resource_container_env.PrependUnique(LIBS = ['rcs_server', 'rcs_common', 'oc','octbstack', 'oc_logger', 'oc_logger_core', 'connectivity_abstraction'])
105 resource_container_env.AppendUnique(LIBS = ['dl'])
106
107 if int(containerJavaSupport):
108         try:
109                 print 'Java Lib: ', os.environ['JAVA_LIB']
110                 resource_container_env.AppendUnique(LIBS = ['jvm'])
111         except KeyError:
112                 print ''
113
114 ######################################################################
115 # Source files and Targets
116 ######################################################################
117 res_container_src = ['src/BaseActivator.cpp','src/BundleActivator.cpp','src/RCSBundleInfo.cpp',
118         'src/BundleInfoInternal.cpp', 'src/BundleResource.cpp', 'src/Configuration.cpp', 'src/JavaBundleResource.cpp', 'src/ProtocolBridgeResource.cpp',
119         'src/ProtocolBridgeConnector.cpp', 'src/RCSResourceContainer.cpp', 'src/ResourceContainerBundleAPI.cpp', 'src/ResourceContainerImpl.cpp',
120         'src/SoftSensorResource.cpp']
121
122 res_container_static = resource_container_env.StaticLibrary('rcs_container', res_container_src)
123 res_container_shared = resource_container_env.SharedLibrary('rcs_container', res_container_src)
124
125 resource_container_env.InstallTarget([res_container_static,res_container_shared], 'libResContainer')
126
127 ######################################################################
128 # build soft sensor sample bundle
129 ######################################################################
130 if target_os == 'linux':
131         ss_resource_bundle_env = resource_container_env.Clone()
132         ss_resource_bundle_env.AppendUnique(CCFLAGS = ['-fPIC'])
133
134         SS_RESOURCE_BUNDLE_DIR = 'examples/SoftSensorSampleBundle/'
135         ss_resource_bundle_env.AppendUnique(CPPPATH = [
136                         SS_RESOURCE_BUNDLE_DIR + 'include',
137                         'include/',
138                         '../../include',
139                         ])
140
141         ss_resource_bundle_env.PrependUnique(LIBS = ['rcs_container'])
142
143         ss_resource_bundle_src = [ Glob(SS_RESOURCE_BUNDLE_DIR + 'src/*.cpp')]
144
145         SoftSensorBundle = ss_resource_bundle_env.SharedLibrary('SoftSensorBundle', ss_resource_bundle_src)
146         ss_resource_bundle_env.InstallTarget(SoftSensorBundle, 'libSoftSensorBundle')
147         
148 ######################################################################
149 # build hue sample bundle
150 ######################################################################
151
152 conf2 = Configure(lib_env)
153 if not conf2.CheckLib('curl'):
154         print '''X
155 *********************************** Error *************************************
156 * Cannot build hue sample. Please install libcurl.
157 * Example (Ubuntu):
158 *       sudo apt-get install libcurl4-openssl-dev
159 *       sudo ldconfig
160 * Hint: check with pkg-config --libs libcurl and clear scons cache.
161 * Skipping hue sample build.
162 *******************************************************************************
163         '''
164 else:
165         hue_resource_bundle_env = resource_container_env.Clone()
166         hue_resource_bundle_env.AppendUnique(CCFLAGS = ['-fPIC'])
167
168         HUE_RESOURCE_BUNDLE_DIR = 'examples/HueSampleBundle/'
169         hue_resource_bundle_env.AppendUnique(CPPPATH = [
170                         HUE_RESOURCE_BUNDLE_DIR + 'include',
171                         'include/'
172                         ])
173
174         hue_resource_bundle_env.PrependUnique(LIBS = ['curl', 'rcs_container'])
175
176         hue_resource_bundle_src = [ Glob(HUE_RESOURCE_BUNDLE_DIR + 'src/*.cpp')]
177
178         HueBundle = hue_resource_bundle_env.SharedLibrary('HueBundle', hue_resource_bundle_src)
179         hue_resource_bundle_env.InstallTarget(HueBundle, 'libHueBundle')
180 lib_env = conf2.Finish()
181
182 ######################################################################
183 # build resource container unit tests
184 ######################################################################
185 if target_os == 'linux':
186         SConscript('unittests/SConscript')
187
188 ######################################################################
189 # Build Container Sample
190 ######################################################################
191 containersample_env = resource_container_env.Clone();
192 containersample_env.AppendUnique(LINKFLAGS=["-rdynamic"])
193
194 # Copy test configuration
195 Command("examples/ResourceContainerConfig.xml","examples/ResourceContainerConfig.xml", Copy("$TARGET", "$SOURCE"))
196 Ignore("examples/ResourceContainerConfig.xml", "examples/ResourceContainerConfig.xml")
197
198 containersample_env.AppendUnique(LIBS = ['rcs_container'])
199
200 containersampleapp_src =  ['examples/ContainerSample.cpp']
201 containersampleapp = containersample_env.Program('ContainerSample',containersampleapp_src)
202 Alias("containersample", containersampleapp)
203 env.AppendTarget('containersample')
204
205 ######################################################################
206 # Build Container Sample Client
207 ######################################################################
208 containersampleclient_env = resource_container_env.Clone();
209
210 containersample_env.AppendUnique(LIBS = ['rcs_container'])
211 containersampleclient_src =  ['examples/ContainerSampleClient.cpp']
212 containersampleclientapp = containersample_env.Program('ContainerSampleClient',containersampleclient_src)
213 Alias("containersampleclient", containersampleclientapp)
214 env.AppendTarget('containersampleclient')
215
216