| # 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", |
| "//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 = [ |
| "//mojo/public/cpp/system/tests/core_unittest.cc", |
| "//mojo/public/cpp/system/tests/macros_unittest.cc", |
| ] |
| deps = [ |
| "//mojo/public/c/system/tests:tests", |
| "//mojo/public/cpp/system:system", |
| "//testing/gtest:gtest", |
| "//testing/gtest:gtest_main", |
| ":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})", |
| ] |
| } |