Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 1 | # -*- python -*- |
| 2 | |
| 3 | # Copyright 2014 The Chromium OS Authors. All rights reserved. |
| 4 | # Use of this source code is governed by a BSD-style license that can be |
| 5 | # found in the LICENSE file. |
| 6 | |
| 7 | # This file is used to build the libchrome package for Chrome OS: |
| 8 | # https://www.chromium.org/chromium-os/packages/libchrome |
| 9 | |
| 10 | import os |
| 11 | |
| 12 | env = Environment() |
| 13 | |
| 14 | BASE_VER = os.environ.get('BASE_VER', '0') |
| 15 | PKG_CONFIG = os.environ.get('PKG_CONFIG', 'pkg-config') |
| 16 | CHROME_INCLUDE_PATH = os.environ.get('CHROME_INCLUDE_PATH', '.') |
| 17 | |
| 18 | # This block will need updating whenever libchrome gets updated. The order of |
| 19 | # the libs below doesn't matter (as scons will take care of building things in |
| 20 | # the required order). The split between them is purely to reduce excess |
| 21 | # linking of third-party libraries, i.e. 'core' should require only a minimal |
| 22 | # set of libraries, and other third-party libraries should get a unique 'xxx' |
| 23 | # name. |
| 24 | base_name = 'base' |
| 25 | base_libs = [ |
| 26 | { |
| 27 | 'name' : 'core', |
| 28 | 'sources' : """ |
Alex Vakulenko | 2485474 | 2016-01-22 16:55:13 -0800 | [diff] [blame] | 29 | allocator/allocator_extension.cc |
Luis Hector Chavez | 94ffa55 | 2016-05-25 15:29:35 -0700 | [diff] [blame] | 30 | allocator/allocator_shim.cc |
| 31 | allocator/allocator_shim_default_dispatch_to_glibc.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 32 | at_exit.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 33 | base64.cc |
| 34 | base64url.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 35 | base_switches.cc |
| 36 | bind_helpers.cc |
| 37 | build_time.cc |
| 38 | callback_helpers.cc |
| 39 | callback_internal.cc |
| 40 | command_line.cc |
| 41 | cpu.cc |
| 42 | debug/alias.cc |
| 43 | debug/debugger.cc |
| 44 | debug/debugger_posix.cc |
| 45 | debug/stack_trace.cc |
| 46 | debug/stack_trace_posix.cc |
| 47 | debug/task_annotator.cc |
| 48 | environment.cc |
| 49 | files/file.cc |
| 50 | files/file_enumerator.cc |
| 51 | files/file_enumerator_posix.cc |
| 52 | files/file_path.cc |
| 53 | files/file_path_constants.cc |
| 54 | files/file_path_watcher.cc |
| 55 | files/file_path_watcher_linux.cc |
| 56 | files/file_posix.cc |
| 57 | files/file_tracing.cc |
| 58 | files/file_util.cc |
| 59 | files/file_util_linux.cc |
| 60 | files/file_util_posix.cc |
| 61 | files/important_file_writer.cc |
Alex Vakulenko | 1ac3a5e | 2016-01-25 12:28:19 -0800 | [diff] [blame] | 62 | files/memory_mapped_file.cc |
| 63 | files/memory_mapped_file_posix.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 64 | files/scoped_file.cc |
| 65 | files/scoped_temp_dir.cc |
| 66 | guid.cc |
Alex Vakulenko | 4577922 | 2016-03-17 10:36:19 -0700 | [diff] [blame] | 67 | hash.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 68 | json/json_file_value_serializer.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 69 | json/json_parser.cc |
| 70 | json/json_reader.cc |
| 71 | json/json_string_value_serializer.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 72 | json/json_value_converter.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 73 | json/json_writer.cc |
| 74 | json/string_escape.cc |
| 75 | lazy_instance.cc |
| 76 | location.cc |
| 77 | logging.cc |
| 78 | md5.cc |
henryhsu | fc7fe5e | 2016-04-14 15:40:50 +0800 | [diff] [blame] | 79 | memory/aligned_memory.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 80 | memory/ref_counted.cc |
| 81 | memory/ref_counted_memory.cc |
Alex Vakulenko | 4577922 | 2016-03-17 10:36:19 -0700 | [diff] [blame] | 82 | memory/shared_memory_posix.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 83 | memory/singleton.cc |
| 84 | memory/weak_ptr.cc |
| 85 | message_loop/incoming_task_queue.cc |
| 86 | message_loop/message_loop.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 87 | message_loop/message_loop_task_runner.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 88 | message_loop/message_pump.cc |
| 89 | message_loop/message_pump_default.cc |
| 90 | message_loop/message_pump_glib.cc |
| 91 | message_loop/message_pump_libevent.cc |
| 92 | metrics/bucket_ranges.cc |
| 93 | metrics/field_trial.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 94 | metrics/metrics_hashes.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 95 | metrics/histogram_base.cc |
| 96 | metrics/histogram.cc |
| 97 | metrics/histogram_samples.cc |
| 98 | metrics/histogram_snapshot_manager.cc |
Alex Vakulenko | 4577922 | 2016-03-17 10:36:19 -0700 | [diff] [blame] | 99 | metrics/persistent_histogram_allocator.cc |
| 100 | metrics/persistent_memory_allocator.cc |
| 101 | metrics/persistent_sample_map.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 102 | metrics/sample_map.cc |
| 103 | metrics/sample_vector.cc |
| 104 | metrics/sparse_histogram.cc |
| 105 | metrics/statistics_recorder.cc |
| 106 | pending_task.cc |
| 107 | pickle.cc |
| 108 | posix/file_descriptor_shuffle.cc |
Alex Vakulenko | 1ac3a5e | 2016-01-25 12:28:19 -0800 | [diff] [blame] | 109 | posix/global_descriptors.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 110 | posix/safe_strerror.cc |
| 111 | posix/unix_domain_socket_linux.cc |
| 112 | process/internal_linux.cc |
| 113 | process/kill.cc |
| 114 | process/kill_posix.cc |
| 115 | process/launch.cc |
| 116 | process/launch_posix.cc |
| 117 | process/process_handle_linux.cc |
| 118 | process/process_iterator.cc |
| 119 | process/process_iterator_linux.cc |
| 120 | process/process_handle_posix.cc |
| 121 | process/process_metrics.cc |
| 122 | process/process_metrics_linux.cc |
| 123 | process/process_metrics_posix.cc |
| 124 | process/process_posix.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 125 | profiler/scoped_profile.cc |
| 126 | profiler/scoped_tracker.cc |
| 127 | profiler/tracked_time.cc |
| 128 | rand_util.cc |
| 129 | rand_util_posix.cc |
| 130 | run_loop.cc |
| 131 | sequence_checker_impl.cc |
| 132 | sequenced_task_runner.cc |
| 133 | sha1_portable.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 134 | strings/pattern.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 135 | strings/safe_sprintf.cc |
| 136 | strings/string16.cc |
| 137 | strings/string_number_conversions.cc |
| 138 | strings/string_piece.cc |
| 139 | strings/stringprintf.cc |
| 140 | strings/string_split.cc |
| 141 | strings/string_util.cc |
| 142 | strings/string_util_constants.cc |
| 143 | strings/sys_string_conversions_posix.cc |
| 144 | strings/utf_string_conversions.cc |
| 145 | strings/utf_string_conversion_utils.cc |
| 146 | synchronization/cancellation_flag.cc |
| 147 | synchronization/condition_variable_posix.cc |
| 148 | synchronization/lock.cc |
| 149 | synchronization/lock_impl_posix.cc |
Luis Hector Chavez | 0c4f26a | 2016-07-15 16:23:21 -0700 | [diff] [blame] | 150 | synchronization/read_write_lock_posix.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 151 | synchronization/waitable_event_posix.cc |
Alex Vakulenko | 1ac3a5e | 2016-01-25 12:28:19 -0800 | [diff] [blame] | 152 | synchronization/waitable_event_watcher_posix.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 153 | sync_socket_posix.cc |
| 154 | sys_info.cc |
| 155 | sys_info_chromeos.cc |
| 156 | sys_info_linux.cc |
| 157 | sys_info_posix.cc |
| 158 | task_runner.cc |
| 159 | task/cancelable_task_tracker.cc |
Alex Vakulenko | 4577922 | 2016-03-17 10:36:19 -0700 | [diff] [blame] | 160 | task_scheduler/scheduler_lock_impl.cc |
| 161 | task_scheduler/sequence.cc |
| 162 | task_scheduler/sequence_sort_key.cc |
| 163 | task_scheduler/task.cc |
| 164 | task_scheduler/task_traits.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 165 | third_party/icu/icu_utf.cc |
| 166 | third_party/nspr/prtime.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 167 | threading/non_thread_safe_impl.cc |
| 168 | threading/platform_thread_internal_posix.cc |
| 169 | threading/platform_thread_linux.cc |
| 170 | threading/platform_thread_posix.cc |
| 171 | threading/post_task_and_reply_impl.cc |
Luis Hector Chavez | 94ffa55 | 2016-05-25 15:29:35 -0700 | [diff] [blame] | 172 | threading/sequenced_task_runner_handle.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 173 | threading/sequenced_worker_pool.cc |
| 174 | threading/simple_thread.cc |
| 175 | threading/thread.cc |
| 176 | threading/thread_checker_impl.cc |
| 177 | threading/thread_collision_warner.cc |
| 178 | threading/thread_id_name_manager.cc |
| 179 | threading/thread_local_posix.cc |
| 180 | threading/thread_local_storage.cc |
| 181 | threading/thread_local_storage_posix.cc |
| 182 | threading/thread_restrictions.cc |
Luis Hector Chavez | 94ffa55 | 2016-05-25 15:29:35 -0700 | [diff] [blame] | 183 | threading/thread_task_runner_handle.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 184 | threading/worker_pool.cc |
| 185 | threading/worker_pool_posix.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 186 | timer/elapsed_timer.cc |
| 187 | timer/timer.cc |
| 188 | time/clock.cc |
| 189 | time/default_clock.cc |
| 190 | time/default_tick_clock.cc |
| 191 | time/tick_clock.cc |
| 192 | time/time.cc |
| 193 | time/time_posix.cc |
Alex Vakulenko | 2485474 | 2016-01-22 16:55:13 -0800 | [diff] [blame] | 194 | trace_event/heap_profiler_allocation_context.cc |
| 195 | trace_event/heap_profiler_allocation_context_tracker.cc |
Luis Hector Chavez | 94ffa55 | 2016-05-25 15:29:35 -0700 | [diff] [blame] | 196 | trace_event/heap_profiler_allocation_register.cc |
| 197 | trace_event/heap_profiler_allocation_register_posix.cc |
| 198 | trace_event/heap_profiler_heap_dump_writer.cc |
Alex Vakulenko | 2485474 | 2016-01-22 16:55:13 -0800 | [diff] [blame] | 199 | trace_event/heap_profiler_stack_frame_deduplicator.cc |
| 200 | trace_event/heap_profiler_type_name_deduplicator.cc |
Luis Hector Chavez | 0c4f26a | 2016-07-15 16:23:21 -0700 | [diff] [blame] | 201 | trace_event/malloc_dump_provider.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 202 | trace_event/memory_allocator_dump.cc |
| 203 | trace_event/memory_allocator_dump_guid.cc |
| 204 | trace_event/memory_dump_manager.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 205 | trace_event/memory_dump_request_args.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 206 | trace_event/memory_dump_session_state.cc |
Luis Hector Chavez | 0c4f26a | 2016-07-15 16:23:21 -0700 | [diff] [blame] | 207 | trace_event/memory_infra_background_whitelist.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 208 | trace_event/process_memory_dump.cc |
| 209 | trace_event/process_memory_maps.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 210 | trace_event/process_memory_totals.cc |
Alex Vakulenko | 42b71bb | 2016-01-20 16:24:55 -0800 | [diff] [blame] | 211 | trace_event/trace_buffer.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 212 | trace_event/trace_config.cc |
| 213 | trace_event/trace_event_argument.cc |
| 214 | trace_event/trace_event_impl.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 215 | trace_event/trace_event_memory_overhead.cc |
| 216 | trace_event/trace_event_synthetic_delay.cc |
Alex Vakulenko | 2485474 | 2016-01-22 16:55:13 -0800 | [diff] [blame] | 217 | trace_event/trace_log.cc |
| 218 | trace_event/trace_log_constants.cc |
| 219 | trace_event/trace_sampling_thread.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 220 | tracked_objects.cc |
| 221 | tracking_info.cc |
| 222 | values.cc |
Luis Hector Chavez | 0c4f26a | 2016-07-15 16:23:21 -0700 | [diff] [blame] | 223 | version.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 224 | vlog.cc |
| 225 | """, |
| 226 | 'prefix' : 'base', |
Alex Vakulenko | 2485474 | 2016-01-22 16:55:13 -0800 | [diff] [blame] | 227 | 'libs' : 'pthread rt libmodp_b64', |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 228 | 'pc_libs' : 'glib-2.0 libevent', |
| 229 | }, |
| 230 | { |
| 231 | 'name' : 'dl', |
| 232 | 'sources' : """ |
| 233 | native_library_posix.cc |
| 234 | """, |
| 235 | 'prefix' : 'base', |
| 236 | 'libs' : 'dl', |
| 237 | 'pc_libs' : '', |
| 238 | }, |
| 239 | { |
| 240 | 'name' : 'dbus', |
| 241 | 'sources' : """ |
| 242 | bus.cc |
| 243 | dbus_statistics.cc |
| 244 | exported_object.cc |
| 245 | file_descriptor.cc |
| 246 | message.cc |
| 247 | object_manager.cc |
| 248 | object_path.cc |
| 249 | object_proxy.cc |
| 250 | property.cc |
| 251 | scoped_dbus_error.cc |
| 252 | string_util.cc |
| 253 | util.cc |
| 254 | values_util.cc |
| 255 | """, |
| 256 | 'prefix' : 'dbus', |
| 257 | 'libs' : '', |
| 258 | 'pc_libs' : 'dbus-1 protobuf-lite', |
| 259 | }, |
| 260 | { |
| 261 | 'name' : 'timers', |
| 262 | 'sources' : """ |
| 263 | alarm_timer_chromeos.cc |
| 264 | """, |
| 265 | 'prefix' : 'components/timers', |
| 266 | 'libs' : '', |
| 267 | 'pc_libs' : '', |
| 268 | }, |
| 269 | { |
| 270 | 'name' : 'crypto', |
| 271 | 'sources' : """ |
| 272 | hmac.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 273 | nss_key_util.cc |
| 274 | nss_util.cc |
Darren Krahn | 1633416 | 2016-03-01 14:38:19 -0800 | [diff] [blame] | 275 | openssl_util.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 276 | p224.cc |
| 277 | p224_spake.cc |
| 278 | random.cc |
| 279 | rsa_private_key.cc |
| 280 | rsa_private_key_nss.cc |
| 281 | scoped_test_nss_db.cc |
Luis Hector Chavez | 94ffa55 | 2016-05-25 15:29:35 -0700 | [diff] [blame] | 282 | secure_hash.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 283 | secure_util.cc |
| 284 | sha2.cc |
Hidehiko Abe | 36040ed | 2017-12-13 18:59:30 +0900 | [diff] [blame] | 285 | signature_creator.cc |
| 286 | signature_verifier.cc |
| 287 | symmetric_key.cc |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 288 | third_party/nss/rsawrapr.c |
| 289 | third_party/nss/sha512.cc |
| 290 | """, |
| 291 | 'prefix' : 'crypto', |
| 292 | 'libs' : '%s-dl-%s' % (base_name, BASE_VER), |
Darren Krahn | 1633416 | 2016-03-01 14:38:19 -0800 | [diff] [blame] | 293 | 'pc_libs' : 'nss openssl', |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 294 | }, |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 295 | ] |
| 296 | |
| 297 | env.Append( |
| 298 | CPPPATH=['files'], |
| 299 | CCFLAGS=['-g'] |
| 300 | ) |
| 301 | for key in Split('CC CXX AR RANLIB LD NM CFLAGS CXXFLAGS LDFLAGS'): |
| 302 | value = os.environ.get(key) |
| 303 | if value: |
| 304 | env[key] = Split(value) |
| 305 | if os.environ.has_key('CPPFLAGS'): |
| 306 | env['CCFLAGS'] += Split(os.environ['CPPFLAGS']) |
| 307 | |
| 308 | env['CCFLAGS'] += ['-DOS_CHROMEOS', |
| 309 | '-DUSE_NSS_CERTS', |
| 310 | '-DUSE_SYSTEM_LIBEVENT', |
Alex Vakulenko | 4577922 | 2016-03-17 10:36:19 -0700 | [diff] [blame] | 311 | '-DNO_TCMALLOC', |
Daniel Erat | 65f5398 | 2015-08-25 09:21:05 -0600 | [diff] [blame] | 312 | '-fPIC', |
| 313 | '-fno-exceptions', |
| 314 | '-Wall', |
| 315 | '-Werror', |
| 316 | '-Wno-deprecated-register', |
| 317 | '-Wno-narrowing', |
| 318 | '-Wno-psabi', |
| 319 | '-Wno-unused-local-typedefs', |
| 320 | # Various #defines are hardcoded near the top of |
| 321 | # build_config.h to ensure that they'll be set both when |
| 322 | # libchrome is built and when other packages include |
| 323 | # libchrome's headers. |
| 324 | '-I%s' % CHROME_INCLUDE_PATH] |
| 325 | |
| 326 | env.Append( |
| 327 | CXXFLAGS=['-std=c++11'] |
| 328 | ) |
| 329 | |
| 330 | # Flags for clang taken from build/common.gypi in the clang==1 section. |
| 331 | CLANG_FLAGS = ( |
| 332 | '-Wno-char-subscripts', |
| 333 | ) |
| 334 | |
| 335 | env['CCFLAGS'] += ['-Xclang-only=%s' % x for x in CLANG_FLAGS] |
| 336 | |
| 337 | # Fix issue with scons not passing some vars through the environment. |
| 338 | for key in Split('PKG_CONFIG SYSROOT'): |
| 339 | if os.environ.has_key(key): |
| 340 | env['ENV'][key] = os.environ[key] |
| 341 | |
| 342 | all_base_libs = [] |
| 343 | all_pc_libs = '' |
| 344 | all_libs = [] |
| 345 | all_scons_libs = [] |
| 346 | |
| 347 | # Build all the shared libraries. |
| 348 | for lib in base_libs: |
| 349 | pc_libs = lib['pc_libs'].replace('${bslot}', BASE_VER) |
| 350 | all_pc_libs += ' ' + pc_libs |
| 351 | |
| 352 | libs = Split(lib['libs'].replace('${bslot}', BASE_VER)) |
| 353 | all_libs += libs |
| 354 | |
| 355 | name = '%s-%s-%s' % (base_name, lib['name'], BASE_VER) |
| 356 | all_base_libs += [name] |
| 357 | corename = '%s-core-%s' % (base_name, BASE_VER) |
| 358 | # Automatically link the sub-libs against the main core lib. |
| 359 | # This is to keep from having to explicitly mention it in the |
| 360 | # table above (i.e. lazy). |
| 361 | if name != corename: |
| 362 | libs += [corename] |
| 363 | |
| 364 | e = env.Clone() |
| 365 | e.Append( |
| 366 | LIBS = Split(libs), |
| 367 | LIBPATH = ['.'], |
| 368 | LINKFLAGS = ['-Wl,--as-needed', '-Wl,-z,defs', |
| 369 | '-Wl,-soname,lib%s.so' % name], |
| 370 | ) |
| 371 | if pc_libs: |
| 372 | e.ParseConfig(PKG_CONFIG + ' --cflags --libs %s' % pc_libs) |
| 373 | |
| 374 | # Prepend prefix to source filenames. |
| 375 | sources = [os.path.join(lib['prefix'], x) for x in Split(lib['sources'])] |
| 376 | |
| 377 | all_scons_libs += [ e.SharedLibrary(name, sources) ] |
| 378 | |
| 379 | |
| 380 | # Build a static library of mocks for unittests to link against. |
| 381 | # Being static allows us to mask this library out of the image. |
| 382 | |
| 383 | all_base_test_libs = [] |
| 384 | all_test_pc_libs = '' |
| 385 | all_test_libs = [] |
| 386 | |
| 387 | test_libs = [ |
| 388 | { |
| 389 | 'name': 'base_test_support', |
| 390 | 'sources': """ |
| 391 | simple_test_clock.cc |
| 392 | simple_test_tick_clock.cc |
| 393 | test_file_util.cc |
| 394 | test_file_util_linux.cc |
| 395 | test_switches.cc |
| 396 | test_timeouts.cc |
| 397 | """, |
| 398 | 'prefix': 'base/test', |
| 399 | 'libs': '', |
| 400 | 'pc_libs': '', |
| 401 | }, |
| 402 | { |
| 403 | 'name': 'dbus_test_support', |
| 404 | 'sources': """ |
| 405 | mock_bus.cc |
| 406 | mock_exported_object.cc |
| 407 | mock_object_manager.cc |
| 408 | mock_object_proxy.cc |
| 409 | """, |
| 410 | 'prefix': 'dbus', |
| 411 | 'libs': '', # TODO(wiley) what should go here? |
| 412 | 'pc_libs': 'dbus-1 protobuf-lite', |
| 413 | }, |
| 414 | { |
| 415 | 'name': 'timer_test_support', |
| 416 | 'sources': """ |
| 417 | mock_timer.cc |
| 418 | """, |
| 419 | 'prefix': 'base/timer', |
| 420 | 'libs': '', |
| 421 | 'pc_libs': '', |
| 422 | }, |
| 423 | ] |
| 424 | |
| 425 | for lib in test_libs: |
| 426 | pc_libs = lib['pc_libs'].replace('${bslot}', BASE_VER) |
| 427 | all_test_pc_libs += ' ' + pc_libs |
| 428 | |
| 429 | libs = Split(lib['libs'].replace('${bslot}', BASE_VER)) |
| 430 | all_test_libs += libs |
| 431 | |
| 432 | name = '%s-%s-%s' % (base_name, lib['name'], BASE_VER) |
| 433 | all_base_test_libs += [name] |
| 434 | |
| 435 | static_env = env.Clone() |
| 436 | if pc_libs: |
| 437 | static_env.ParseConfig(PKG_CONFIG + ' --cflags --libs %s' % pc_libs) |
| 438 | sources = [os.path.join(lib['prefix'], x) |
| 439 | for x in Split(lib['sources'])] |
| 440 | static_env.StaticLibrary(name, sources) |
| 441 | |
| 442 | # Build the random text files (pkg-config and linker script). |
| 443 | |
| 444 | def lib_list(libs): |
| 445 | return ' '.join(['-l' + l for l in libs]) |
| 446 | |
| 447 | prod_subst_dict = { |
| 448 | '@BSLOT@': BASE_VER, |
| 449 | '@PRIVATE_PC@': all_pc_libs, |
| 450 | '@BASE_LIBS@': lib_list(all_base_libs), |
| 451 | '@LIBS@': lib_list(all_libs), |
| 452 | '@NAME@': 'libchrome', |
| 453 | '@PKG_CFG_NAME@': 'libchrome-%s.pc' % BASE_VER, |
| 454 | '@LIB_NAME@': 'libbase-%s.so' % BASE_VER, |
| 455 | '@DESCRIPTION@': 'chrome base library', |
| 456 | # scons, in its infinite wisdom sees fit to expand this string if |
| 457 | # if we don't escape the $. |
| 458 | '@TARGET_LIB@': 'base-$${bslot}', |
| 459 | } |
| 460 | |
| 461 | # Similarly, build text files related to the test libraries. |
| 462 | test_subst_dict = { |
| 463 | '@BSLOT@': BASE_VER, |
| 464 | '@PRIVATE_PC@': all_test_pc_libs, |
| 465 | '@BASE_LIBS@': lib_list(all_base_test_libs), |
| 466 | '@LIBS@': lib_list(all_test_libs), |
| 467 | '@NAME@': 'libchrome-test', |
| 468 | '@PKG_CFG_NAME@': 'libchrome-test-%s.pc' % BASE_VER, |
| 469 | '@LIB_NAME@': 'libbase-test-%s.a' % BASE_VER, |
| 470 | '@DESCRIPTION@': 'chrome base test library', |
| 471 | # scons, in its infinite wisdom sees fit to expand this string if |
| 472 | # if we don't escape the $. |
| 473 | '@TARGET_LIB@': 'base-test-$${bslot}', |
| 474 | } |
| 475 | |
| 476 | pc_file_contents = """ |
| 477 | prefix=/usr |
| 478 | includedir=${prefix}/include |
| 479 | bslot=@BSLOT@ |
| 480 | |
| 481 | Name: @NAME@ |
| 482 | Description: @DESCRIPTION@ |
| 483 | Version: ${bslot} |
| 484 | Requires: |
| 485 | Requires.private: @PRIVATE_PC@ |
| 486 | Libs: -l@TARGET_LIB@ |
| 487 | Libs.private: @BASE_LIBS@ @LIBS@ |
| 488 | Cflags: -I${includedir}/@TARGET_LIB@ -Wno-c++11-extensions -Wno-unused-local-typedefs -DBASE_VER=${bslot} |
| 489 | """ |
| 490 | |
| 491 | # https://sourceware.org/binutils/docs/ld/Scripts.html |
| 492 | so_file_contents = """GROUP ( AS_NEEDED ( @BASE_LIBS@ ) )""" |
| 493 | |
| 494 | for subst_dict in (test_subst_dict, prod_subst_dict): |
| 495 | env = Environment(tools=['textfile'], SUBST_DICT=subst_dict) |
| 496 | env.Substfile(subst_dict['@LIB_NAME@'], [Value(so_file_contents)]) |
| 497 | env.Substfile(subst_dict['@PKG_CFG_NAME@'], [Value(pc_file_contents)]) |