blob: 41dc94f8796027cfc9eec8f095ecc718c9f80920 [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
rspangler@google.com49fdf182009-10-10 00:57:34 +000042env = Environment()
Andrew de los Reyes08c4e272010-04-15 14:02:17 -070043for key in Split('CC CXX AR RANLIB LD NM'):
44 value = os.environ.get(key)
45 if value != None:
46 env[key] = value
47for key in Split('CFLAGS CCFLAGS CPPPATH LIBPATH'):
48 value = os.environ.get(key)
49 if value != None:
50 env[key] = Split(value)
51
52for key in Split('PKG_CONFIG_LIBDIR PKG_CONFIG_PATH SYSROOT'):
53 if os.environ.has_key(key):
54 env['ENV'][key] = os.environ[key]
55
56
adlr@google.comc98a7ed2009-12-04 18:54:03 +000057env['CCFLAGS'] = ' '.join("""-g
58 -fno-exceptions
Andrew de los Reyes08c4e272010-04-15 14:02:17 -070059 -fno-strict-aliasing
adlr@google.comc98a7ed2009-12-04 18:54:03 +000060 -Wall
61 -Werror
62 -Wclobbered
63 -Wempty-body
64 -Wignored-qualifiers
65 -Wmissing-field-initializers
66 -Wsign-compare
67 -Wtype-limits
68 -Wuninitialized
Andrew de los Reyes08c4e272010-04-15 14:02:17 -070069 -D__STDC_FORMAT_MACROS=1
adlr@google.comc98a7ed2009-12-04 18:54:03 +000070 -D_FILE_OFFSET_BITS=64
71 -I/usr/include/libxml2""".split());
Andrew de los Reyes08c4e272010-04-15 14:02:17 -070072env['CCFLAGS'] += (' ' + ' '.join(env['CFLAGS']))
adlr@google.comc98a7ed2009-12-04 18:54:03 +000073
74env['LIBS'] = Split("""base
Andrew de los Reyes08c4e272010-04-15 14:02:17 -070075 bz2
adlr@google.comc98a7ed2009-12-04 18:54:03 +000076 curl
77 gflags
78 glib-2.0
79 gtest
80 gthread-2.0
81 libpcrecpp
82 protobuf
83 pthread
84 ssl
85 xml2
86 z""")
87env['CPPPATH'] = ['..', '../../third_party/chrome/files', '../../common']
88env['LIBPATH'] = ['../../third_party/chrome']
89env['BUILDERS']['ProtocolBuffer'] = proto_builder
Colin Watsonf2c29ec2010-01-08 18:50:56 +000090
91# Fix issue with scons not passing pkg-config vars through the environment.
92for key in Split('PKG_CONFIG_LIBDIR PKG_CONFIG_PATH'):
93 if os.environ.has_key(key):
94 env['ENV'][key] = os.environ[key]
95
rspangler@google.com49fdf182009-10-10 00:57:34 +000096env.ParseConfig('pkg-config --cflags --libs glib-2.0')
adlr@google.comc98a7ed2009-12-04 18:54:03 +000097env.ProtocolBuffer('update_metadata.pb.cc', 'update_metadata.proto')
rspangler@google.com49fdf182009-10-10 00:57:34 +000098
99if ARGUMENTS.get('debug', 0):
100 env['CCFLAGS'] += ' -fprofile-arcs -ftest-coverage'
Andrew de los Reyes80061062010-02-04 14:25:00 -0800101 env['LIBS'] += ['bz2', 'gcov']
rspangler@google.com49fdf182009-10-10 00:57:34 +0000102
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000103
104
rspangler@google.com49fdf182009-10-10 00:57:34 +0000105sources = Split("""action_processor.cc
Andrew de los Reyesd2135f32010-03-11 16:00:28 -0800106 bzip.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800107 bzip_extent_writer.cc
Andrew de los Reyes35a7af12010-03-10 16:33:26 -0800108 cycle_breaker.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000109 decompressing_file_writer.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000110 delta_diff_parser.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000111 download_action.cc
Andrew de los Reyesb4025e62010-02-23 17:47:03 -0800112 extent_mapper.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800113 extent_writer.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000114 filesystem_copier_action.cc
115 filesystem_iterator.cc
116 file_writer.cc
Andrew de los Reyes0ce161b2010-02-22 15:27:01 -0800117 graph_utils.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000118 gzip.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000119 libcurl_http_fetcher.cc
120 omaha_hash_calculator.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000121 omaha_request_prep_action.cc
122 omaha_response_handler_action.cc
123 postinstall_runner_action.cc
124 set_bootable_flag_action.cc
125 subprocess.cc
Andrew de los Reyes81ebcd82010-03-09 15:56:18 -0800126 tarjan.cc
Andrew de los Reyes58151552010-03-10 20:07:08 -0800127 topological_sort.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000128 update_check_action.cc
129 update_metadata.pb.cc
130 utils.cc""")
rspangler@google.com49fdf182009-10-10 00:57:34 +0000131main = ['main.cc']
132
133unittest_sources = Split("""action_unittest.cc
134 action_pipe_unittest.cc
135 action_processor_unittest.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800136 bzip_extent_writer_unittest.cc
Andrew de los Reyes35a7af12010-03-10 16:33:26 -0800137 cycle_breaker_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000138 decompressing_file_writer_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000139 delta_diff_generator_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000140 download_action_unittest.cc
Andrew de los Reyesb4025e62010-02-23 17:47:03 -0800141 extent_mapper_unittest.cc
Andrew de los Reyes80061062010-02-04 14:25:00 -0800142 extent_writer_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000143 file_writer_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000144 filesystem_iterator_unittest.cc
Andrew de los Reyes0ce161b2010-02-22 15:27:01 -0800145 graph_utils_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000146 http_fetcher_unittest.cc
147 mock_http_fetcher.cc
148 omaha_hash_calculator_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000149 omaha_request_prep_action_unittest.cc
150 omaha_response_handler_action_unittest.cc
151 postinstall_runner_action_unittest.cc
152 set_bootable_flag_action_unittest.cc
153 subprocess_unittest.cc
Andrew de los Reyes81ebcd82010-03-09 15:56:18 -0800154 tarjan_unittest.cc
rspangler@google.com49fdf182009-10-10 00:57:34 +0000155 test_utils.cc
Andrew de los Reyes58151552010-03-10 20:07:08 -0800156 topological_sort_unittest.cc
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000157 update_check_action_unittest.cc
Andrew de los Reyesd2135f32010-03-11 16:00:28 -0800158 utils_unittest.cc
159 zip_unittest.cc""")
rspangler@google.com49fdf182009-10-10 00:57:34 +0000160unittest_main = ['testrunner.cc']
161
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000162delta_generator_sources = Split("""delta_diff_generator.cc""")
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -0800163delta_generator_main = ['generate_delta_main.cc']
164
165test_installer_main = ['test_installer_main.cc']
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000166
rspangler@google.com49fdf182009-10-10 00:57:34 +0000167env.Program('update_engine', sources + main)
168unittest_cmd = env.Program('update_engine_unittests',
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000169 sources + delta_generator_sources +
170 unittest_sources + unittest_main)
rspangler@google.com49fdf182009-10-10 00:57:34 +0000171
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -0800172test_installer_cmd = env.Program('test_installer',
173 sources + delta_generator_sources +
174 unittest_sources + test_installer_main)
175
rspangler@google.com49fdf182009-10-10 00:57:34 +0000176Clean(unittest_cmd, Glob('*.gcda') + Glob('*.gcno') + Glob('*.gcov') +
177 Split('html app.info'))
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000178
179delta_generator_cmd = env.Program('delta_generator',
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -0800180 sources + delta_generator_sources +
181 delta_generator_main)
adlr@google.comc98a7ed2009-12-04 18:54:03 +0000182
183http_server_cmd = env.Program('test_http_server', 'test_http_server.cc')