# Copyright 2018 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/nacl/config.gni") import("//testing/test.gni") component("embedder_internal") { output_name = "mojo_core_embedder_internal" public_deps = [ ":impl_for_embedder", ] visibility = [ ":test_sources", "//mojo:*", "//mojo/core/embedder", ] } # Bits of the EDK library which do not depend on public API linkage. It is # not allowed for this target or any of its transitive dependencies to depend # on anything under //mojo/public beyond strict C type definitions. # # This is templated because it's consumed by both the ":embedder_internal" # component library as well as the ":mojo_core" shared library. In the former # case we want to export symbols, but in the latter case we don't. The template # stamps out two nearly identical targets which differ only in what symbols they # export. template("core_impl_source_set") { source_set(target_name) { if (invoker.for_shared_library) { visibility = [ ":shared_library" ] } else { visibility = [ ":embedder_internal" ] } public = [ "channel.h", "configuration.h", "connection_params.h", "core.h", "data_pipe_consumer_dispatcher.h", "data_pipe_control_message.h", "data_pipe_producer_dispatcher.h", "dispatcher.h", "embedder/configuration.h", "embedder/process_error_callback.h", "entrypoints.h", "handle_signals_state.h", "handle_table.h", "invitation_dispatcher.h", "message_pipe_dispatcher.h", "node_controller.h", "options_validation.h", "platform_handle_dispatcher.h", "platform_handle_utils.h", "platform_shared_memory_mapping.h", "request_context.h", "scoped_process_handle.h", "shared_buffer_dispatcher.h", "user_message_impl.h", ] sources = [ "atomic_flag.h", "broker.h", "broker_win.cc", "channel.cc", "channel_win.cc", "configuration.cc", "connection_params.cc", "core.cc", "data_pipe_consumer_dispatcher.cc", "data_pipe_control_message.cc", "data_pipe_producer_dispatcher.cc", "dispatcher.cc", "entrypoints.cc", "handle_table.cc", "invitation_dispatcher.cc", "message_pipe_dispatcher.cc", "node_channel.cc", "node_channel.h", "node_controller.cc", "platform_handle_dispatcher.cc", "platform_handle_in_transit.cc", "platform_handle_in_transit.h", "platform_handle_utils.cc", "platform_shared_memory_mapping.cc", "request_context.cc", "scoped_process_handle.cc", "shared_buffer_dispatcher.cc", "user_message_impl.cc", "watch.cc", "watch.h", "watcher_dispatcher.cc", "watcher_dispatcher.h", "watcher_set.cc", "watcher_set.h", ] public_deps = [ "//base", "//mojo/core/ports", "//mojo/public/c/system:headers", "//mojo/public/cpp/platform", ] if (is_fuchsia) { sources += [ "channel_fuchsia.cc" ] public_deps += [ "//third_party/fuchsia-sdk:fdio" ] } if (is_posix) { if (!is_nacl || is_nacl_nonsfi) { sources += [ "broker_posix.cc", "channel_posix.cc", ] } } if (is_mac && !is_ios) { sources += [ "mach_port_relay.cc", "mach_port_relay.h", ] } if (!is_nacl || is_nacl_nonsfi) { sources += [ "broker_host.cc", "broker_host.h", ] } defines = [] if (invoker.for_shared_library) { defines += [ "MOJO_CORE_SHARED_LIBRARY" ] } else { defines += [ "MOJO_SYSTEM_IMPL_IMPLEMENTATION" ] } deps = [] if (is_android) { deps += [ "//third_party/ashmem" ] } if (!is_nacl) { deps += [ "//crypto" ] } if (is_win) { cflags = [ "/wd4324" ] # Structure was padded due to __declspec(align()), # which is uninteresting. } # Use target_os == "chromeos" instead of is_chromeos because we need to # build NaCl targets (i.e. IRT) for ChromeOS the same as the rest of ChromeOS. if (is_android || target_os == "chromeos") { defines += [ "MOJO_CORE_LEGACY_PROTOCOL" ] } } } core_impl_source_set("impl_for_embedder") { for_shared_library = false } if (is_chromeos || is_linux || is_android || is_win) { core_impl_source_set("impl_for_shared_library") { for_shared_library = true } shared_library("shared_library") { output_name = "mojo_core" sources = [ "mojo_core.cc", ] defines = [ "MOJO_CORE_SHARED_LIBRARY" ] deps = [ ":impl_for_shared_library", "//mojo/public/c/system:headers", ] if (is_win) { inputs = [ "mojo_core.def", ] ldflags = [ "/DEF:" + rebase_path("mojo_core.def", root_build_dir) ] } else { configs += [ ":export_only_thunks_api" ] } } if (is_chromeos) { if (target_cpu == "arm" || target_cpu == "arm64") { android32_toolchain = "android_clang_arm" android64_toolchain = "android_clang_arm64" } else { android32_toolchain = "android_clang_x86" android64_toolchain = "android_clang_x64" } group("shared_libraries_for_arc") { deps = [ ":shared_library_arc32", ":shared_library_arc64", ] } copy("shared_library_arc32") { sources = [ "${root_out_dir}/${android32_toolchain}/libmojo_core.so", ] outputs = [ "${root_out_dir}/libmojo_core_arc32.so", ] deps = [ ":shared_library(//build/toolchain/android:${android32_toolchain})", ] } copy("shared_library_arc64") { sources = [ "${root_out_dir}/${android64_toolchain}/libmojo_core.so", ] outputs = [ "${root_out_dir}/libmojo_core_arc64.so", ] deps = [ ":shared_library(//build/toolchain/android:${android64_toolchain})", ] } } config("export_only_thunks_api") { ldflags = [ "-Wl,--version-script=" + rebase_path("//mojo/core/export_only_thunks_api.lst", root_build_dir) ] } if (is_chromeos || is_linux || is_win) { test("mojo_core_unittests") { sources = [ "mojo_core_unittest.cc", "run_all_core_unittests.cc", ] deps = [ "//base", "//base/test:test_support", "//mojo/public/c/system", "//testing/gtest", ] data_deps = [ ":shared_library", ] } } } source_set("test_utils") { testonly = true sources = [ "test_utils.cc", "test_utils.h", ] public_deps = [ "//mojo/public/c/system", "//mojo/public/cpp/system", ] deps = [ "//base", "//base/test:test_support", "//mojo/core/test:test_support", "//testing/gtest:gtest", ] } source_set("test_sources") { testonly = true sources = [ "channel_unittest.cc", "core_test_base.cc", "core_test_base.h", "core_unittest.cc", "embedder_unittest.cc", "handle_table_unittest.cc", "message_pipe_unittest.cc", "message_unittest.cc", "options_validation_unittest.cc", "platform_handle_dispatcher_unittest.cc", "quota_unittest.cc", "shared_buffer_dispatcher_unittest.cc", "shared_buffer_unittest.cc", "signals_unittest.cc", "trap_unittest.cc", ] if (!is_ios) { sources += [ "data_pipe_unittest.cc", "invitation_unittest.cc", "multiprocess_message_pipe_unittest.cc", "platform_wrapper_unittest.cc", ] } deps = [ ":test_utils", "//base", "//base/test:test_support", "//mojo/core:embedder_internal", "//mojo/core/embedder", "//mojo/core/ports:tests", "//mojo/core/test:run_all_unittests", "//mojo/core/test:test_support", "//mojo/public/cpp/system", "//testing/gmock", "//testing/gtest", ] }