1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# 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_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",
]
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 = [
"//native_client/src/untrusted/nacl:imc_syscalls",
"//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",
]
}
}
group("mojo_nacl") {
deps = [
"//native_client/src/untrusted/irt:irt_core(//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})",
]
}
|