blob: 49a537bcb7492573671b6349109a1c9fb7095ea7 [file] [log] [blame]
# 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",
]
}