# -*- 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/allocator_extension.cc
                allocator/allocator_shim.cc
                allocator/allocator_shim_default_dispatch_to_glibc.cc
                at_exit.cc
                base64.cc
                base64url.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/memory_mapped_file.cc
                files/memory_mapped_file_posix.cc
                files/scoped_file.cc
                files/scoped_temp_dir.cc
                guid.cc
                hash.cc
                json/json_file_value_serializer.cc
                json/json_parser.cc
                json/json_reader.cc
                json/json_string_value_serializer.cc
                json/json_value_converter.cc
                json/json_writer.cc
                json/string_escape.cc
                lazy_instance.cc
                location.cc
                logging.cc
                md5.cc
                memory/aligned_memory.cc
                memory/ref_counted.cc
                memory/ref_counted_memory.cc
                memory/shared_memory_posix.cc
                memory/singleton.cc
                memory/weak_ptr.cc
                message_loop/incoming_task_queue.cc
                message_loop/message_loop.cc
                message_loop/message_loop_task_runner.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/metrics_hashes.cc
                metrics/histogram_base.cc
                metrics/histogram.cc
                metrics/histogram_samples.cc
                metrics/histogram_snapshot_manager.cc
                metrics/persistent_histogram_allocator.cc
                metrics/persistent_memory_allocator.cc
                metrics/persistent_sample_map.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/global_descriptors.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/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/pattern.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/read_write_lock_posix.cc
                synchronization/waitable_event_posix.cc
                synchronization/waitable_event_watcher_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
                task_scheduler/scheduler_lock_impl.cc
                task_scheduler/sequence.cc
                task_scheduler/sequence_sort_key.cc
                task_scheduler/task.cc
                task_scheduler/task_traits.cc
                third_party/icu/icu_utf.cc
                third_party/nspr/prtime.cc
                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_task_runner_handle.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/thread_task_runner_handle.cc
                threading/worker_pool.cc
                threading/worker_pool_posix.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/heap_profiler_allocation_context.cc
                trace_event/heap_profiler_allocation_context_tracker.cc
                trace_event/heap_profiler_allocation_register.cc
                trace_event/heap_profiler_allocation_register_posix.cc
                trace_event/heap_profiler_heap_dump_writer.cc
                trace_event/heap_profiler_stack_frame_deduplicator.cc
                trace_event/heap_profiler_type_name_deduplicator.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_request_args.cc
                trace_event/memory_dump_session_state.cc
                trace_event/memory_infra_background_whitelist.cc
                trace_event/process_memory_dump.cc
                trace_event/process_memory_maps.cc
                trace_event/process_memory_totals.cc
                trace_event/trace_buffer.cc
                trace_event/trace_config.cc
                trace_event/trace_event_argument.cc
                trace_event/trace_event_impl.cc
                trace_event/trace_event_memory_overhead.cc
                trace_event/trace_event_synthetic_delay.cc
                trace_event/trace_log.cc
                trace_event/trace_log_constants.cc
                trace_event/trace_sampling_thread.cc
                tracked_objects.cc
                tracking_info.cc
                values.cc
                version.cc
                vlog.cc
                """,
    'prefix' : 'base',
    'libs' : 'pthread rt libmodp_b64',
    '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
                openssl_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.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 openssl',
  },
  {
    '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/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',
                   '-DNO_TCMALLOC',
                   '-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)])
