blob: 0b626bcba98357d049fb28c11e0a84647483559e [file] [log] [blame]
# All toolchains use the same generated code.
gen_dir = "$root_build_dir/gen/mojo/nacl"
# Only allow the generator to be run by one toolchain.
if (current_toolchain == default_toolchain) {
# Generate the code to plumb the Mojo public API into the NaCl sandbox.
action("mojo_nacl_codegen") {
script = "generator/generate_nacl_bindings.py"
args = [
"-d",
rebase_path(gen_dir, root_build_dir),
]
inputs = [
script,
"generator/interface.py",
"generator/interface_dsl.py",
"generator/mojo_syscall.cc.tmpl",
"generator/libmojo.cc.tmpl",
]
outputs = [
"$gen_dir/mojo_irt.c",
"$gen_dir/mojo_irt.h",
"$gen_dir/mojo_syscall.cc",
"$gen_dir/libmojo.cc",
]
}
}
# Trusted code
if (!is_nacl) {
# A library for launching a NaCl sandbox connected to a Mojo embedder.
static_library("monacl_sel") {
sources = [
"mojo_syscall_internal.h",
"$gen_dir/mojo_syscall.cc",
"monacl_sel_main.cc",
]
deps = [
# This target makes sure we have all the pre-processor defines needed to
# use NaCl's headers.
"//native_client/build/config/nacl:nacl_base",
"//native_client/src/trusted/desc:nrd_xfer",
"//native_client/src/trusted/service_runtime:sel_main_chrome",
":mojo_nacl_codegen($default_toolchain)",
]
}
# A simple shell for running untrusted binaries that talk to the Mojo
# embedder. (No services.)
executable("monacl_shell") {
testonly = true
sources = [
"monacl_shell.cc",
]
deps = [
"//base:base",
"//third_party/mojo/src/mojo/edk/system:system",
":monacl_sel",
]
}
}
# Untrusted code
if (is_nacl) {
# Thunk mapping the Mojo public API onto NaCl syscalls.
static_library("mojo") {
sources = [
"$gen_dir/libmojo.cc",
"$gen_dir/mojo_irt.h",
]
include_dirs = [ "$root_build_dir/gen" ]
deps = [
":mojo_nacl_codegen($default_toolchain)",
]
}
# Unit test for the Mojo public API.
executable("monacl_test") {
testonly = true
sources = [
"//third_party/mojo/src/mojo/public/cpp/system/tests/core_unittest.cc",
"//third_party/mojo/src/mojo/public/cpp/system/tests/macros_unittest.cc",
]
deps = [
"//testing/gtest:gtest",
"//testing/gtest:gtest_main",
"//third_party/mojo/src/mojo/public/c/system/tests:tests",
"//third_party/mojo/src/mojo/public/cpp/system:system",
":mojo",
]
}
executable("irt_mojo") {
cflags_c = [ "-std=c99" ]
sources = [
"irt_entry_mojo.c",
"$gen_dir/mojo_irt.c",
"$gen_dir/mojo_irt.h",
]
include_dirs = [ "$root_build_dir/gen" ]
deps = [
"//native_client/build/config/nacl:nacl_base",
"//native_client/src/untrusted/irt:irt_core_lib",
"//native_client/src/untrusted/nacl:imc_syscalls",
":mojo_nacl_codegen($default_toolchain)",
]
}
}
group("mojo_nacl") {
deps = [
":irt_mojo(//native_client/build/toolchain/nacl:irt_${cpu_arch})",
]
}
group("mojo_nacl_tests") {
testonly = true
deps = [
":monacl_shell",
":monacl_test(//native_client/build/toolchain/nacl:clang_newlib_${cpu_arch})",
]
}