blob: 5adf16b4f883b2c5fa80f7a16e63077953c3c10c [file] [log] [blame]
rspangler@google.com49fdf182009-10-10 00:57:34 +00001# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Andrew de los Reyes1e338b82010-01-22 14:57:27 -08005import os
6
adlr@google.comc98a7ed2009-12-04 18:54:03 +00007# Protobuffer compilation
8""" Inputs:
9 target: list of targets to compile to
10 source: list of sources to compile
11 env: the scons environment in which we are compiling
12 Outputs:
13 target: the list of targets we'll emit
14 source: the list of sources we'll compile"""
15def ProtocolBufferEmitter(target, source, env):
16 output = str(source[0])
17 output = output[0:output.rfind('.proto')]
18 target = [
19 output + '.pb.cc',
20 output + '.pb.h',
21 ]
22 return target, source
23
24""" Inputs:
25 source: list of sources to process
26 target: list of targets to generate
27 env: scons environment in which we are working
28 for_signature: unused
29 Outputs: a list of commands to execute to generate the targets from
30 the sources."""
31def ProtocolBufferGenerator(source, target, env, for_signature):
32 commands = [
33 '/usr/bin/protoc '
34 ' --proto_path . ${SOURCES} --cpp_out .']
35 return commands
36
37proto_builder = Builder(generator = ProtocolBufferGenerator,
38 emitter = ProtocolBufferEmitter,
39 single_source = 1,
40 suffix = '.pb.cc')
41
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -070042""" Inputs:
43 target: unused
44 source: list containing the source .xml file
45 env: the scons environment in which we are compiling
46 Outputs:
47 target: the list of targets we'll emit
48 source: the list of sources we'll process"""
49def DbusBindingsEmitter(target, source, env):
50 output = str(source[0])
51 output = output[0:output.rfind('.xml')]
52 target = [
53 output + '.dbusserver.h',
54 output + '.dbusclient.h'
55 ]
56 return target, source
57
58""" Inputs:
59 source: list of sources to process
60 target: list of targets to generate
61 env: scons environment in which we are working
62 for_signature: unused
63 Outputs: a list of commands to execute to generate the targets from
64 the sources."""
65def DbusBindingsGenerator(source, target, env, for_signature):
66 commands = []
67 for target_file in target:
68 if str(target_file).endswith('.dbusserver.h'):
69 mode_flag = '--mode=glib-server '
70 else:
71 mode_flag = '--mode=glib-client '
72 cmd = '/usr/bin/dbus-binding-tool %s --prefix=update_engine_service ' \
73 '%s > %s' % (mode_flag, str(source[0]), str(target_file))
74 commands.append(cmd)
75 return commands
76
77dbus_bindings_builder = Builder(generator = DbusBindingsGenerator,
78 emitter = DbusBindingsEmitter,
79 single_source = 1,
80 suffix = 'dbusclient.h')
81
rspangler@google.com49fdf182009-10-10 00:57:34 +000082env = Environment()
Andrew de los Reyes08c4e272010-04-15 14:02:17 -070083for key in Split('CC CXX AR RANLIB LD NM'):
84 value = os.environ.get(key)
85 if value != None:
86 env[key] = value
87for key in Split('CFLAGS CCFLAGS CPPPATH LIBPATH'):
88 value = os.environ.get(key)
89 if value != None:
90 env[key] = Split(value)
91
92for key in Split('PKG_CONFIG_LIBDIR PKG_CONFIG_PATH SYSROOT'):
93 if os.environ.has_key(key):
94 env['ENV'][key] = os.environ[key]
95
96
adlr@google.comc98a7ed2009-12-04 18:54:03 +000097env['CCFLAGS'] = ' '.join("""-g
98 -fno-exceptions
Andrew de los Reyes08c4e272010-04-15 14:02:17 -070099 -fno-strict-aliasing
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000100 -Wall
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000101 -Wclobbered
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700102 -Wclobbered
103 -Wempty-body
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000104 -Wempty-body
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700105 -Werror
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000106 -Wignored-qualifiers
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700107 -Wignored-qualifiers
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000108 -Wmissing-field-initializers
109 -Wsign-compare
110 -Wtype-limits
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700111 -Wtype-limits
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000112 -Wuninitialized
Andrew de los Reyes08c4e272010-04-15 14:02:17 -0700113 -D__STDC_FORMAT_MACROS=1
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000114 -D_FILE_OFFSET_BITS=64
115 -I/usr/include/libxml2""".split());
Andrew de los Reyes08c4e272010-04-15 14:02:17 -0700116env['CCFLAGS'] += (' ' + ' '.join(env['CFLAGS']))
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000117
118env['LIBS'] = Split("""base
Andrew de los Reyes08c4e272010-04-15 14:02:17 -0700119 bz2
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000120 curl
121 gflags
122 glib-2.0
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000123 gthread-2.0
124 libpcrecpp
125 protobuf
126 pthread
127 ssl
128 xml2
129 z""")
130env['CPPPATH'] = ['..', '../../third_party/chrome/files', '../../common']
131env['LIBPATH'] = ['../../third_party/chrome']
132env['BUILDERS']['ProtocolBuffer'] = proto_builder
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700133env['BUILDERS']['DbusBindings'] = dbus_bindings_builder
Colin Watsonf2c29ec2010-01-08 18:50:56 +0000134
135# Fix issue with scons not passing pkg-config vars through the environment.
136for key in Split('PKG_CONFIG_LIBDIR PKG_CONFIG_PATH'):
137 if os.environ.has_key(key):
138 env['ENV'][key] = os.environ[key]
139
Andrew de los Reyesc7020782010-04-28 10:46:04 -0700140env.ParseConfig('pkg-config --cflags --libs '
141 'dbus-1 dbus-glib-1 gio-2.0 gio-unix-2.0 glib-2.0')
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000142env.ProtocolBuffer('update_metadata.pb.cc', 'update_metadata.proto')
rspangler@google.com49fdf182009-10-10 00:57:34 +0000143
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700144env.DbusBindings('update_engine.dbusclient.h', 'update_engine.xml')
145
rspangler@google.com49fdf182009-10-10 00:57:34 +0000146if ARGUMENTS.get('debug', 0):
147 env['CCFLAGS'] += ' -fprofile-arcs -ftest-coverage'
Andrew de los Reyes80061062010-02-04 14:25:00 -0800148 env['LIBS'] += ['bz2', 'gcov']
rspangler@google.com49fdf182009-10-10 00:57:34 +0000149
150sources = Split("""action_processor.cc
Andrew de los Reyesd2135f32010-03-11 16:00:28 -0800151 bzip.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800152 bzip_extent_writer.cc
Andrew de los Reyes35a7af12010-03-10 16:33:26 -0800153 cycle_breaker.cc
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700154 dbus_service.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000155 decompressing_file_writer.cc
Andrew de los Reyes09e56d62010-04-23 13:45:53 -0700156 delta_diff_generator.cc
157 delta_performer.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000158 download_action.cc
Andrew de los Reyesb4025e62010-02-23 17:47:03 -0800159 extent_mapper.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800160 extent_writer.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000161 filesystem_copier_action.cc
162 filesystem_iterator.cc
163 file_writer.cc
Andrew de los Reyes0ce161b2010-02-22 15:27:01 -0800164 graph_utils.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000165 gzip.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000166 libcurl_http_fetcher.cc
167 omaha_hash_calculator.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000168 omaha_request_prep_action.cc
169 omaha_response_handler_action.cc
170 postinstall_runner_action.cc
171 set_bootable_flag_action.cc
Andrew de los Reyes0cca4212010-04-29 14:00:58 -0700172 split_file_writer.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000173 subprocess.cc
Andrew de los Reyes81ebcd82010-03-09 15:56:18 -0800174 tarjan.cc
Andrew de los Reyes58151552010-03-10 20:07:08 -0800175 topological_sort.cc
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700176 update_attempter.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000177 update_check_action.cc
178 update_metadata.pb.cc
179 utils.cc""")
rspangler@google.com49fdf182009-10-10 00:57:34 +0000180main = ['main.cc']
181
182unittest_sources = Split("""action_unittest.cc
183 action_pipe_unittest.cc
184 action_processor_unittest.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800185 bzip_extent_writer_unittest.cc
Andrew de los Reyes35a7af12010-03-10 16:33:26 -0800186 cycle_breaker_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000187 decompressing_file_writer_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000188 delta_diff_generator_unittest.cc
Andrew de los Reyes09e56d62010-04-23 13:45:53 -0700189 delta_performer_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000190 download_action_unittest.cc
Andrew de los Reyesb4025e62010-02-23 17:47:03 -0800191 extent_mapper_unittest.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800192 extent_writer_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000193 file_writer_unittest.cc
Andrew de los Reyesc7020782010-04-28 10:46:04 -0700194 filesystem_copier_action_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000195 filesystem_iterator_unittest.cc
Andrew de los Reyes0ce161b2010-02-22 15:27:01 -0800196 graph_utils_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000197 http_fetcher_unittest.cc
198 mock_http_fetcher.cc
199 omaha_hash_calculator_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000200 omaha_request_prep_action_unittest.cc
201 omaha_response_handler_action_unittest.cc
202 postinstall_runner_action_unittest.cc
203 set_bootable_flag_action_unittest.cc
Andrew de los Reyes0cca4212010-04-29 14:00:58 -0700204 split_file_writer_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000205 subprocess_unittest.cc
Andrew de los Reyes81ebcd82010-03-09 15:56:18 -0800206 tarjan_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000207 test_utils.cc
Andrew de los Reyes58151552010-03-10 20:07:08 -0800208 topological_sort_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000209 update_check_action_unittest.cc
Andrew de los Reyesd2135f32010-03-11 16:00:28 -0800210 utils_unittest.cc
211 zip_unittest.cc""")
rspangler@google.com49fdf182009-10-10 00:57:34 +0000212unittest_main = ['testrunner.cc']
213
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700214client_main = ['update_engine_client.cc']
215
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -0800216delta_generator_main = ['generate_delta_main.cc']
217
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -0800218
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700219update_engine_core = env.Library('update_engine_core', sources)
220env.Prepend(LIBS=[update_engine_core])
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700221
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700222env.Program('update_engine', main)
223
224client_cmd = env.Program('update_engine_client', client_main);
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000225
226delta_generator_cmd = env.Program('delta_generator',
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700227 delta_generator_main)
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000228
229http_server_cmd = env.Program('test_http_server', 'test_http_server.cc')
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700230
231unittest_env = env.Clone()
232unittest_env.Append(LIBS=['gtest'])
233unittest_cmd = unittest_env.Program('update_engine_unittests',
234 unittest_sources + unittest_main)
235Clean(unittest_cmd, Glob('*.gcda') + Glob('*.gcno') + Glob('*.gcov') +
236 Split('html app.info'))