blob: 9598975e56a5aba433931400a0e780882e9cb1be [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
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -070097 # -Wclobbered
98 # -Wempty-body
99 # -Wignored-qualifiers
100 # -Wtype-limits
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000101env['CCFLAGS'] = ' '.join("""-g
102 -fno-exceptions
Andrew de los Reyes08c4e272010-04-15 14:02:17 -0700103 -fno-strict-aliasing
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000104 -Wall
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000105 -Wclobbered
106 -Wempty-body
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700107 -Werror
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000108 -Wignored-qualifiers
109 -Wmissing-field-initializers
110 -Wsign-compare
111 -Wtype-limits
112 -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
123 gtest
124 gthread-2.0
125 libpcrecpp
126 protobuf
127 pthread
128 ssl
129 xml2
130 z""")
131env['CPPPATH'] = ['..', '../../third_party/chrome/files', '../../common']
132env['LIBPATH'] = ['../../third_party/chrome']
133env['BUILDERS']['ProtocolBuffer'] = proto_builder
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700134env['BUILDERS']['DbusBindings'] = dbus_bindings_builder
Colin Watsonf2c29ec2010-01-08 18:50:56 +0000135
136# Fix issue with scons not passing pkg-config vars through the environment.
137for key in Split('PKG_CONFIG_LIBDIR PKG_CONFIG_PATH'):
138 if os.environ.has_key(key):
139 env['ENV'][key] = os.environ[key]
140
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700141env.ParseConfig('pkg-config --cflags --libs glib-2.0 dbus-1 dbus-glib-1')
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
172 subprocess.cc
Andrew de los Reyes81ebcd82010-03-09 15:56:18 -0800173 tarjan.cc
Andrew de los Reyes58151552010-03-10 20:07:08 -0800174 topological_sort.cc
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700175 update_attempter.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000176 update_check_action.cc
177 update_metadata.pb.cc
178 utils.cc""")
rspangler@google.com49fdf182009-10-10 00:57:34 +0000179main = ['main.cc']
180
181unittest_sources = Split("""action_unittest.cc
182 action_pipe_unittest.cc
183 action_processor_unittest.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800184 bzip_extent_writer_unittest.cc
Andrew de los Reyes35a7af12010-03-10 16:33:26 -0800185 cycle_breaker_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000186 decompressing_file_writer_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000187 delta_diff_generator_unittest.cc
Andrew de los Reyes09e56d62010-04-23 13:45:53 -0700188 delta_performer_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000189 download_action_unittest.cc
Andrew de los Reyesb4025e62010-02-23 17:47:03 -0800190 extent_mapper_unittest.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800191 extent_writer_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000192 file_writer_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000193 filesystem_iterator_unittest.cc
Andrew de los Reyes0ce161b2010-02-22 15:27:01 -0800194 graph_utils_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000195 http_fetcher_unittest.cc
196 mock_http_fetcher.cc
197 omaha_hash_calculator_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000198 omaha_request_prep_action_unittest.cc
199 omaha_response_handler_action_unittest.cc
200 postinstall_runner_action_unittest.cc
201 set_bootable_flag_action_unittest.cc
202 subprocess_unittest.cc
Andrew de los Reyes81ebcd82010-03-09 15:56:18 -0800203 tarjan_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000204 test_utils.cc
Andrew de los Reyes58151552010-03-10 20:07:08 -0800205 topological_sort_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000206 update_check_action_unittest.cc
Andrew de los Reyesd2135f32010-03-11 16:00:28 -0800207 utils_unittest.cc
208 zip_unittest.cc""")
rspangler@google.com49fdf182009-10-10 00:57:34 +0000209unittest_main = ['testrunner.cc']
210
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700211client_main = ['update_engine_client.cc']
212
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -0800213delta_generator_main = ['generate_delta_main.cc']
214
rspangler@google.com49fdf182009-10-10 00:57:34 +0000215env.Program('update_engine', sources + main)
216unittest_cmd = env.Program('update_engine_unittests',
Andrew de los Reyes09e56d62010-04-23 13:45:53 -0700217 sources + unittest_sources + unittest_main)
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -0800218
Andrew de los Reyes4e9b9f42010-04-26 15:06:43 -0700219client_cmd = env.Program('update_engine_client', sources + client_main);
220
rspangler@google.com49fdf182009-10-10 00:57:34 +0000221Clean(unittest_cmd, Glob('*.gcda') + Glob('*.gcno') + Glob('*.gcov') +
222 Split('html app.info'))
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000223
224delta_generator_cmd = env.Program('delta_generator',
Andrew de los Reyes09e56d62010-04-23 13:45:53 -0700225 sources + delta_generator_main)
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000226
227http_server_cmd = env.Program('test_http_server', 'test_http_server.cc')