| # Copyright 2015 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. |
| |
| # Trusted code |
| if (!is_nacl) { |
| # 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", |
| "//nacl_bindings:monacl_sel", |
| ] |
| |
| data_deps = |
| [ "//nacl_bindings:irt_mojo(//build/toolchain/nacl:irt_${target_cpu})" ] |
| } |
| |
| if (current_cpu == "x86" || current_cpu == "arm") { |
| # Non-SFI NaCl currently supports x86-32 and ARMv7, but not anything 64-bit. |
| # Additionally, PNaCl pexes assume 32-bit pointers. |
| executable("monacl_shell_nonsfi") { |
| testonly = true |
| sources = [ |
| "monacl_shell_nonsfi.cc", |
| ] |
| deps = [ |
| ":irt_mojo_nonsfi", |
| "//mojo/edk/system", |
| "//native_client/src/nonsfi/loader:elf_loader", |
| ] |
| } |
| } |
| } |
| |
| group("monacl_shell_nonsfi_x86") { |
| testonly = true |
| deps = [] |
| if ((target_cpu == "x64" || target_cpu == "x86") && is_linux) { |
| # Even when Mojo is built for x86-64 by default, we want to use x86-32 |
| # for running programs under Non-SFI NaCl. |
| # The toolchain is hardcoded as 32-bit clang here -- although it must |
| # be 32 bit (for nonsfi), it assumes clang. Ideally, the toolchain would |
| # be defined as the 32 bit variant of whatever is being used (be it clang, |
| # gcc, or something else). |
| deps += [ ":monacl_shell_nonsfi(//build/toolchain/linux:clang_x86)" ] |
| } |
| } |
| |
| # Untrusted code |
| if (is_nacl) { |
| # 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", |
| "//mojo/public/platform/nacl:mojo", |
| "//testing/gtest:gtest", |
| "//testing/gtest:gtest_main", |
| ] |
| } |
| |
| group("mojo_nacl_tests_untrusted") { |
| testonly = true |
| deps = [ |
| ":monacl_test", |
| "//examples/apptest", |
| "//examples/wget", |
| "//services/clipboard", |
| "//services/clipboard:apptests", |
| "//services/files:apptests", |
| "//services/http_server", |
| "//services/http_server:apptests", |
| "//services/view_manager:mojo_view_manager_client_apptests", |
| "//services/view_manager:view_manager_service_apptests", |
| "//services/window_manager:window_manager_apptests", |
| "//shell:apptests", |
| ] |
| } |
| } |
| |
| static_library("irt_mojo_nonsfi") { |
| sources = [ |
| "irt_mojo_nonsfi.cc", |
| "irt_mojo_nonsfi.h", |
| "nexe_launcher_nonsfi.cc", |
| ] |
| |
| deps = [ |
| "//base", |
| "//mojo/public/c/system", |
| "//mojo/public/platform/nacl:mojo_irt_header", |
| "//native_client/src/nonsfi/irt:irt_interfaces", |
| ] |
| } |
| |
| group("mojo_nacl") { |
| deps = [ |
| "//services/nacl:nacl_content_handler", |
| ] |
| } |
| |
| group("mojo_nacl_nonsfi") { |
| deps = [ |
| "//services/nacl:nacl_content_handler_nonsfi", |
| ] |
| } |
| |
| group("mojo_pnacl_tests") { |
| testonly = true |
| deps = [ |
| ":monacl_test(//build/toolchain/nacl:newlib_pnacl)", |
| ] |
| } |
| |
| action("translate_mojo_pnacl_tests_to_native") { |
| testonly = true |
| |
| # Leaving default as linux for OSes which are similar to linux, but do |
| # not self-identify as linux through host_os. |
| nacl_toolchain_host_os = "linux" |
| if (host_os == "mac") { |
| nacl_toolchain_host_os = "mac" |
| } |
| script = rebase_path("//") + "native_client/toolchain/${nacl_toolchain_host_os}_x86/pnacl_newlib/bin/pydir/loader.py" |
| input = rebase_path(root_build_dir) + "/newlib_pnacl/monacl_test.pexe" |
| inputs = [ |
| input, |
| ] |
| output = "monacl_test_nonsfi.nexe" |
| outputs = [ |
| "$root_out_dir/${output}", |
| ] |
| args = [ |
| "pnacl-translate", |
| "$input", |
| "-o", |
| "$output", |
| "-arch", |
| ] |
| if (target_cpu == "x86" || target_cpu == "x64") { |
| args += [ "x86-32-nonsfi" ] |
| } else if (target_cpu == "arm") { |
| args += [ "arm-nonsfi" ] |
| } else { |
| assert(false, "Unrecognized target CPU for Non-SFI NaCl translation") |
| } |
| deps = [ |
| ":mojo_pnacl_tests", |
| ] |
| } |
| |
| action("prepend_shebang_to_nexe") { |
| testonly = true |
| |
| script = rebase_path("//") + "mojo/public/tools/prepend.py" |
| nexe_path = "$root_out_dir/monacl_test_nonsfi" |
| input = "${nexe_path}.nexe" |
| inputs = [ |
| input, |
| ] |
| output = "${nexe_path}.mojo" |
| outputs = [ |
| output, |
| ] |
| |
| line = "#!mojo mojo:nacl_content_handler_nonsfi" |
| args = [ |
| "--input=" + rebase_path(input, root_build_dir), |
| "--output=" + rebase_path(output, root_build_dir), |
| "--line=$line", |
| ] |
| deps = [ |
| ":translate_mojo_pnacl_tests_to_native", |
| ] |
| } |
| |
| group("monacl_test_nonsfi_nexes") { |
| testonly = true |
| deps = [ |
| ":translate_mojo_pnacl_tests_to_native", |
| ":prepend_shebang_to_nexe", |
| ] |
| } |
| |
| group("mojo_nacl_tests") { |
| testonly = true |
| deps = [ |
| ":mojo_nacl_tests_untrusted(//build/toolchain/nacl:clang_newlib_${current_cpu})", |
| ":monacl_shell", |
| ] |
| } |
| |
| group("mojo_nacl_tests_nonsfi") { |
| testonly = true |
| deps = [ |
| ":monacl_shell_nonsfi_x86", |
| ":monacl_test_nonsfi_nexes", |
| ] |
| } |