summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct513
-rw-r--r--build/build_config.h31
-rw-r--r--third_party/libevent/event.h4
3 files changed, 539 insertions, 9 deletions
diff --git a/SConstruct b/SConstruct
new file mode 100644
index 0000000000..791f40674e
--- /dev/null
+++ b/SConstruct
@@ -0,0 +1,513 @@
+# -*- python -*-
+
+# Copyright 2014 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This file is used to build the libchrome package for Chrome OS:
+# https://www.chromium.org/chromium-os/packages/libchrome
+
+import os
+
+env = Environment()
+
+BASE_VER = os.environ.get('BASE_VER', '0')
+PKG_CONFIG = os.environ.get('PKG_CONFIG', 'pkg-config')
+CHROME_INCLUDE_PATH = os.environ.get('CHROME_INCLUDE_PATH', '.')
+
+# This block will need updating whenever libchrome gets updated. The order of
+# the libs below doesn't matter (as scons will take care of building things in
+# the required order). The split between them is purely to reduce excess
+# linking of third-party libraries, i.e. 'core' should require only a minimal
+# set of libraries, and other third-party libraries should get a unique 'xxx'
+# name.
+base_name = 'base'
+base_libs = [
+ {
+ 'name' : 'core',
+ 'sources' : """
+ allocator/type_profiler_control.cc
+ at_exit.cc
+ atomicops_internals_x86_gcc.cc
+ base_switches.cc
+ bind_helpers.cc
+ build_time.cc
+ callback_helpers.cc
+ callback_internal.cc
+ command_line.cc
+ cpu.cc
+ debug/alias.cc
+ debug/debugger.cc
+ debug/debugger_posix.cc
+ debug/stack_trace.cc
+ debug/stack_trace_posix.cc
+ debug/task_annotator.cc
+ environment.cc
+ files/file.cc
+ files/file_enumerator.cc
+ files/file_enumerator_posix.cc
+ files/file_path.cc
+ files/file_path_constants.cc
+ files/file_path_watcher.cc
+ files/file_path_watcher_linux.cc
+ files/file_posix.cc
+ files/file_tracing.cc
+ files/file_util.cc
+ files/file_util_linux.cc
+ files/file_util_posix.cc
+ files/important_file_writer.cc
+ files/scoped_file.cc
+ files/scoped_temp_dir.cc
+ guid.cc
+ guid_posix.cc
+ hash.cc
+ json/json_parser.cc
+ json/json_reader.cc
+ json/json_string_value_serializer.cc
+ json/json_writer.cc
+ json/string_escape.cc
+ lazy_instance.cc
+ location.cc
+ logging.cc
+ md5.cc
+ memory/ref_counted.cc
+ memory/ref_counted_memory.cc
+ memory/singleton.cc
+ memory/weak_ptr.cc
+ message_loop/incoming_task_queue.cc
+ message_loop/message_loop.cc
+ message_loop/message_loop_proxy.cc
+ message_loop/message_loop_proxy_impl.cc
+ message_loop/message_pump.cc
+ message_loop/message_pump_default.cc
+ message_loop/message_pump_glib.cc
+ message_loop/message_pump_libevent.cc
+ metrics/bucket_ranges.cc
+ metrics/field_trial.cc
+ metrics/histogram_base.cc
+ metrics/histogram.cc
+ metrics/histogram_samples.cc
+ metrics/histogram_snapshot_manager.cc
+ metrics/sample_map.cc
+ metrics/sample_vector.cc
+ metrics/sparse_histogram.cc
+ metrics/statistics_recorder.cc
+ pending_task.cc
+ pickle.cc
+ posix/file_descriptor_shuffle.cc
+ posix/safe_strerror.cc
+ posix/unix_domain_socket_linux.cc
+ process/internal_linux.cc
+ process/kill.cc
+ process/kill_posix.cc
+ process/launch.cc
+ process/launch_posix.cc
+ process/process_handle_linux.cc
+ process/process_iterator.cc
+ process/process_iterator_linux.cc
+ process/process_handle_posix.cc
+ process/process_metrics.cc
+ process/process_metrics_linux.cc
+ process/process_metrics_posix.cc
+ process/process_posix.cc
+ profiler/alternate_timer.cc
+ profiler/scoped_profile.cc
+ profiler/scoped_tracker.cc
+ profiler/tracked_time.cc
+ rand_util.cc
+ rand_util_posix.cc
+ run_loop.cc
+ sequence_checker_impl.cc
+ sequenced_task_runner.cc
+ sha1_portable.cc
+ strings/safe_sprintf.cc
+ strings/string16.cc
+ strings/string_number_conversions.cc
+ strings/string_piece.cc
+ strings/stringprintf.cc
+ strings/string_split.cc
+ strings/string_util.cc
+ strings/string_util_constants.cc
+ strings/sys_string_conversions_posix.cc
+ strings/utf_string_conversions.cc
+ strings/utf_string_conversion_utils.cc
+ synchronization/cancellation_flag.cc
+ synchronization/condition_variable_posix.cc
+ synchronization/lock.cc
+ synchronization/lock_impl_posix.cc
+ synchronization/waitable_event_posix.cc
+ sync_socket_posix.cc
+ sys_info.cc
+ sys_info_chromeos.cc
+ sys_info_linux.cc
+ sys_info_posix.cc
+ task_runner.cc
+ task/cancelable_task_tracker.cc
+ third_party/dmg_fp/dtoa.cc
+ third_party/dmg_fp/g_fmt.cc
+ third_party/dynamic_annotations/dynamic_annotations.c
+ third_party/icu/icu_utf.cc
+ third_party/nspr/prtime.cc
+ third_party/superfasthash/superfasthash.c
+ threading/non_thread_safe_impl.cc
+ threading/platform_thread_internal_posix.cc
+ threading/platform_thread_linux.cc
+ threading/platform_thread_posix.cc
+ threading/post_task_and_reply_impl.cc
+ threading/sequenced_worker_pool.cc
+ threading/simple_thread.cc
+ threading/thread.cc
+ threading/thread_checker_impl.cc
+ threading/thread_collision_warner.cc
+ threading/thread_id_name_manager.cc
+ threading/thread_local_posix.cc
+ threading/thread_local_storage.cc
+ threading/thread_local_storage_posix.cc
+ threading/thread_restrictions.cc
+ threading/worker_pool.cc
+ threading/worker_pool_posix.cc
+ thread_task_runner_handle.cc
+ timer/elapsed_timer.cc
+ timer/timer.cc
+ time/clock.cc
+ time/default_clock.cc
+ time/default_tick_clock.cc
+ time/tick_clock.cc
+ time/time.cc
+ time/time_posix.cc
+ trace_event/malloc_dump_provider.cc
+ trace_event/memory_allocator_dump.cc
+ trace_event/memory_allocator_dump_guid.cc
+ trace_event/memory_dump_manager.cc
+ trace_event/memory_dump_session_state.cc
+ trace_event/process_memory_dump.cc
+ trace_event/process_memory_maps.cc
+ trace_event/process_memory_maps_dump_provider.cc
+ trace_event/process_memory_totals.cc
+ trace_event/process_memory_totals_dump_provider.cc
+ trace_event/trace_config.cc
+ trace_event/trace_event_argument.cc
+ trace_event/trace_event_impl.cc
+ trace_event/trace_event_impl_constants.cc
+ trace_event/trace_event_memory.cc
+ trace_event/trace_event_memory_overhead.cc
+ trace_event/trace_event_synthetic_delay.cc
+ tracked_objects.cc
+ tracking_info.cc
+ values.cc
+ vlog.cc
+ """,
+ 'prefix' : 'base',
+ 'libs' : 'pthread rt',
+ 'pc_libs' : 'glib-2.0 libevent',
+ },
+ {
+ 'name' : 'dl',
+ 'sources' : """
+ native_library_posix.cc
+ """,
+ 'prefix' : 'base',
+ 'libs' : 'dl',
+ 'pc_libs' : '',
+ },
+ {
+ 'name' : 'dbus',
+ 'sources' : """
+ bus.cc
+ dbus_statistics.cc
+ exported_object.cc
+ file_descriptor.cc
+ message.cc
+ object_manager.cc
+ object_path.cc
+ object_proxy.cc
+ property.cc
+ scoped_dbus_error.cc
+ string_util.cc
+ util.cc
+ values_util.cc
+ """,
+ 'prefix' : 'dbus',
+ 'libs' : '',
+ 'pc_libs' : 'dbus-1 protobuf-lite',
+ },
+ {
+ 'name' : 'timers',
+ 'sources' : """
+ alarm_timer_chromeos.cc
+ """,
+ 'prefix' : 'components/timers',
+ 'libs' : '',
+ 'pc_libs' : '',
+ },
+ {
+ 'name' : 'crypto',
+ 'sources' : """
+ hmac.cc
+ hmac_nss.cc
+ nss_key_util.cc
+ nss_util.cc
+ p224.cc
+ p224_spake.cc
+ random.cc
+ rsa_private_key.cc
+ rsa_private_key_nss.cc
+ scoped_test_nss_db.cc
+ secure_hash_default.cc
+ secure_util.cc
+ sha2.cc
+ signature_creator_nss.cc
+ signature_verifier_nss.cc
+ symmetric_key_nss.cc
+ third_party/nss/rsawrapr.c
+ third_party/nss/sha512.cc
+ """,
+ 'prefix' : 'crypto',
+ 'libs' : '%s-dl-%s' % (base_name, BASE_VER),
+ 'pc_libs' : 'nss',
+ },
+ {
+ 'name' : 'sandbox',
+ 'sources' : """
+ linux/bpf_dsl/bpf_dsl.cc
+ linux/bpf_dsl/codegen.cc
+ linux/bpf_dsl/dump_bpf.cc
+ linux/bpf_dsl/policy.cc
+ linux/bpf_dsl/policy_compiler.cc
+ linux/bpf_dsl/syscall_set.cc
+ linux/bpf_dsl/verifier.cc
+ linux/seccomp-bpf/die.cc
+ linux/seccomp-bpf/errorcode.cc
+ linux/seccomp-bpf/sandbox_bpf.cc
+ linux/seccomp-bpf/syscall.cc
+ linux/seccomp-bpf/trap.cc
+
+ linux/seccomp-bpf-helpers/baseline_policy.cc
+ linux/seccomp-bpf-helpers/sigsys_handlers.cc
+ linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
+ linux/seccomp-bpf-helpers/syscall_sets.cc
+
+ linux/services/init_process_reaper.cc
+ linux/services/proc_util.cc
+ linux/services/resource_limits.cc
+ linux/services/scoped_process.cc
+ linux/services/syscall_wrappers.cc
+ linux/services/thread_helpers.cc
+ linux/services/yama.cc
+ linux/syscall_broker/broker_channel.cc
+ linux/syscall_broker/broker_client.cc
+ linux/syscall_broker/broker_file_permission.cc
+ linux/syscall_broker/broker_host.cc
+ linux/syscall_broker/broker_policy.cc
+ linux/syscall_broker/broker_process.cc
+
+ linux/services/credentials.cc
+ linux/services/namespace_sandbox.cc
+ linux/services/namespace_utils.cc
+ """,
+ 'prefix' : 'sandbox',
+ 'libs' : '',
+ 'pc_libs' : '',
+ },
+]
+
+env.Append(
+ CPPPATH=['files'],
+ CCFLAGS=['-g']
+)
+for key in Split('CC CXX AR RANLIB LD NM CFLAGS CXXFLAGS LDFLAGS'):
+ value = os.environ.get(key)
+ if value:
+ env[key] = Split(value)
+if os.environ.has_key('CPPFLAGS'):
+ env['CCFLAGS'] += Split(os.environ['CPPFLAGS'])
+
+env['CCFLAGS'] += ['-DOS_CHROMEOS',
+ '-DUSE_NSS_CERTS',
+ '-DUSE_SYSTEM_LIBEVENT',
+ '-fPIC',
+ '-fno-exceptions',
+ '-Wall',
+ '-Werror',
+ '-Wno-deprecated-register',
+ '-Wno-narrowing',
+ '-Wno-psabi',
+ '-Wno-unused-local-typedefs',
+ # Various #defines are hardcoded near the top of
+ # build_config.h to ensure that they'll be set both when
+ # libchrome is built and when other packages include
+ # libchrome's headers.
+ '-I%s' % CHROME_INCLUDE_PATH]
+
+env.Append(
+ CXXFLAGS=['-std=c++11']
+)
+
+# Flags for clang taken from build/common.gypi in the clang==1 section.
+CLANG_FLAGS = (
+ '-Wno-char-subscripts',
+)
+
+env['CCFLAGS'] += ['-Xclang-only=%s' % x for x in CLANG_FLAGS]
+
+# Fix issue with scons not passing some vars through the environment.
+for key in Split('PKG_CONFIG SYSROOT'):
+ if os.environ.has_key(key):
+ env['ENV'][key] = os.environ[key]
+
+all_base_libs = []
+all_pc_libs = ''
+all_libs = []
+all_scons_libs = []
+
+# Build all the shared libraries.
+for lib in base_libs:
+ pc_libs = lib['pc_libs'].replace('${bslot}', BASE_VER)
+ all_pc_libs += ' ' + pc_libs
+
+ libs = Split(lib['libs'].replace('${bslot}', BASE_VER))
+ all_libs += libs
+
+ name = '%s-%s-%s' % (base_name, lib['name'], BASE_VER)
+ all_base_libs += [name]
+ corename = '%s-core-%s' % (base_name, BASE_VER)
+ # Automatically link the sub-libs against the main core lib.
+ # This is to keep from having to explicitly mention it in the
+ # table above (i.e. lazy).
+ if name != corename:
+ libs += [corename]
+
+ e = env.Clone()
+ e.Append(
+ LIBS = Split(libs),
+ LIBPATH = ['.'],
+ LINKFLAGS = ['-Wl,--as-needed', '-Wl,-z,defs',
+ '-Wl,-soname,lib%s.so' % name],
+ )
+ if pc_libs:
+ e.ParseConfig(PKG_CONFIG + ' --cflags --libs %s' % pc_libs)
+
+ # Prepend prefix to source filenames.
+ sources = [os.path.join(lib['prefix'], x) for x in Split(lib['sources'])]
+
+ all_scons_libs += [ e.SharedLibrary(name, sources) ]
+
+
+# Build a static library of mocks for unittests to link against.
+# Being static allows us to mask this library out of the image.
+
+all_base_test_libs = []
+all_test_pc_libs = ''
+all_test_libs = []
+
+test_libs = [
+ {
+ 'name': 'base_test_support',
+ 'sources': """
+ simple_test_clock.cc
+ simple_test_tick_clock.cc
+ test_file_util.cc
+ test_file_util_linux.cc
+ test_switches.cc
+ test_timeouts.cc
+ """,
+ 'prefix': 'base/test',
+ 'libs': '',
+ 'pc_libs': '',
+ },
+ {
+ 'name': 'dbus_test_support',
+ 'sources': """
+ mock_bus.cc
+ mock_exported_object.cc
+ mock_object_manager.cc
+ mock_object_proxy.cc
+ """,
+ 'prefix': 'dbus',
+ 'libs': '', # TODO(wiley) what should go here?
+ 'pc_libs': 'dbus-1 protobuf-lite',
+ },
+ {
+ 'name': 'timer_test_support',
+ 'sources': """
+ mock_timer.cc
+ """,
+ 'prefix': 'base/timer',
+ 'libs': '',
+ 'pc_libs': '',
+ },
+]
+
+for lib in test_libs:
+ pc_libs = lib['pc_libs'].replace('${bslot}', BASE_VER)
+ all_test_pc_libs += ' ' + pc_libs
+
+ libs = Split(lib['libs'].replace('${bslot}', BASE_VER))
+ all_test_libs += libs
+
+ name = '%s-%s-%s' % (base_name, lib['name'], BASE_VER)
+ all_base_test_libs += [name]
+
+ static_env = env.Clone()
+ if pc_libs:
+ static_env.ParseConfig(PKG_CONFIG + ' --cflags --libs %s' % pc_libs)
+ sources = [os.path.join(lib['prefix'], x)
+ for x in Split(lib['sources'])]
+ static_env.StaticLibrary(name, sources)
+
+# Build the random text files (pkg-config and linker script).
+
+def lib_list(libs):
+ return ' '.join(['-l' + l for l in libs])
+
+prod_subst_dict = {
+ '@BSLOT@': BASE_VER,
+ '@PRIVATE_PC@': all_pc_libs,
+ '@BASE_LIBS@': lib_list(all_base_libs),
+ '@LIBS@': lib_list(all_libs),
+ '@NAME@': 'libchrome',
+ '@PKG_CFG_NAME@': 'libchrome-%s.pc' % BASE_VER,
+ '@LIB_NAME@': 'libbase-%s.so' % BASE_VER,
+ '@DESCRIPTION@': 'chrome base library',
+ # scons, in its infinite wisdom sees fit to expand this string if
+ # if we don't escape the $.
+ '@TARGET_LIB@': 'base-$${bslot}',
+}
+
+# Similarly, build text files related to the test libraries.
+test_subst_dict = {
+ '@BSLOT@': BASE_VER,
+ '@PRIVATE_PC@': all_test_pc_libs,
+ '@BASE_LIBS@': lib_list(all_base_test_libs),
+ '@LIBS@': lib_list(all_test_libs),
+ '@NAME@': 'libchrome-test',
+ '@PKG_CFG_NAME@': 'libchrome-test-%s.pc' % BASE_VER,
+ '@LIB_NAME@': 'libbase-test-%s.a' % BASE_VER,
+ '@DESCRIPTION@': 'chrome base test library',
+ # scons, in its infinite wisdom sees fit to expand this string if
+ # if we don't escape the $.
+ '@TARGET_LIB@': 'base-test-$${bslot}',
+}
+
+pc_file_contents = """
+prefix=/usr
+includedir=${prefix}/include
+bslot=@BSLOT@
+
+Name: @NAME@
+Description: @DESCRIPTION@
+Version: ${bslot}
+Requires:
+Requires.private: @PRIVATE_PC@
+Libs: -l@TARGET_LIB@
+Libs.private: @BASE_LIBS@ @LIBS@
+Cflags: -I${includedir}/@TARGET_LIB@ -Wno-c++11-extensions -Wno-unused-local-typedefs -DBASE_VER=${bslot}
+"""
+
+# https://sourceware.org/binutils/docs/ld/Scripts.html
+so_file_contents = """GROUP ( AS_NEEDED ( @BASE_LIBS@ ) )"""
+
+for subst_dict in (test_subst_dict, prod_subst_dict):
+ env = Environment(tools=['textfile'], SUBST_DICT=subst_dict)
+ env.Substfile(subst_dict['@LIB_NAME@'], [Value(so_file_contents)])
+ env.Substfile(subst_dict['@PKG_CFG_NAME@'], [Value(pc_file_contents)])
diff --git a/build/build_config.h b/build/build_config.h
index bf3f43ee4f..e152a66ba0 100644
--- a/build/build_config.h
+++ b/build/build_config.h
@@ -25,20 +25,32 @@
// hosts. Use __ANDROID__ and __ANDROID_HOST__ instead.
// - OS_ANDROID is a Chrome-specific define used to build Chrome for Android
// within the NDK.
-#if defined(__ANDROID__)
-#define __linux__ 1
-// The Chrome OS implementation of this library is currently built on Android.
+// Android targets and hosts don't use tcmalloc.
+#if defined(__ANDROID__) || defined(__ANDROID_HOST__)
+#define NO_TCMALLOC
+#endif // defined(__ANDROID__) || defined(__ANDROID_HOST__)
+
+// Use the Chrome OS version of the code for both Android targets and Chrome OS builds.
+#if !defined(__ANDROID_HOST__)
#define OS_CHROMEOS 1
+#endif // !defined(__ANDROID_HOST__)
+
+#if defined(__ANDROID__) // Android targets
+#define __linux__ 1
#if defined(__BIONIC__)
#define __UCLIBC__ 1
#endif // defined(__BIONIC__)
-#endif // defined(__ANDROID__)
-#if defined(__ANDROID__) || defined(__ANDROID_HOST__)
-#define NO_TCMALLOC
-#endif // defined(__ANDROID__) || defined(__ANDROID_HOST__)
+#elif !defined(__ANDROID_HOST__) // Chrome OS
+
+// TODO: Remove these once the GLib MessageLoopForUI isn't being used:
+// https://crbug.com/361635
+#define USE_GLIB 1
+#define USE_OZONE 1
+
+#endif // defined(__ANDROID__)
// A set of macros to use for platform detection.
#if defined(__native_client__)
@@ -52,6 +64,7 @@
#else
#define OS_NACL_SFI
#endif
+// Don't set OS_ANDROID; it's only used when building Chrome for Android.
#elif defined(__APPLE__)
// only include TargetConditions after testing ANDROID as some android builds
// on mac don't have this header available and it's not needed unless the target
@@ -84,8 +97,8 @@
#error Please add support for your platform in build/build_config.h
#endif
-#if defined(USE_OPENSSL) && defined(USE_NSS)
-#error Cannot use both OpenSSL and NSS
+#if defined(USE_OPENSSL_CERTS) && defined(USE_NSS_CERTS)
+#error Cannot use both OpenSSL and NSS for certificates
#endif
// For access to standard BSD features, use OS_BSD instead of a
diff --git a/third_party/libevent/event.h b/third_party/libevent/event.h
new file mode 100644
index 0000000000..4a91e4b50f
--- /dev/null
+++ b/third_party/libevent/event.h
@@ -0,0 +1,4 @@
+// The Chromium build contains its own checkout of libevent. This stub is used
+// when building the Chrome OS libchrome package to instead use the system
+// headers.
+#include <event.h>