blob: 8fec9f82bda79752b285d251d4efcff4cf3ce01c [file] [view]
About
=====
This directory contains the necessary components to run Non-SFI NaCl
nexes (native executables) from within Mojo.
Using
=====
The Non-SFI NaCl and accompanying tests should be built by default for Linux.
The boolean indicating if they are built is "mojo_use_nacl_nonsfi", defined
inside the BUILD files.
Build Mojo (all following commands assume you are in the root of the mojo
repository):
```
$ ./mojo/tools/mojob.py gn
$ ./mojo/tools/mojob.py build
```
Doing this build step will automatically create a pexe of unit tests, at
`./out/Debug/newlib_pnacl/monacl_test.pexe`. To translate a pexe into a
non-SFI nexe:
```
$ ./native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-translate \
./out/Debug/newlib_pnacl/FOOBAR.pexe -o FOOBAR.nexe -arch x86-32-nonsfi
```
Now, you should have the fully translated nexe (called
"FOOBAR.nexe"). You can run the nexe through the monacl shell
(a minimal, "nexe-only" shell, which loads the nexe ELF file -- see
monacl_shell_nonsfi.cc):
```
$ ./out/Debug/clang_x86/monacl_shell_nonsfi FOOBAR.nexe
```
This monacl_shell_nonsfi is the easiest way to run nexes in Mojo -- however, it
is not the only way. Usually, applications are launched through the
"mojo_shell", but some additional information is required to know how to handle
this content (i.e., how does the mojo_shell know it is dealing with a nonsfi
nexe?).
The BUILD.gn files in Mojo automatically make this pexe, translate it to a
nexe, and prepend a line ("#!mojo mojo:nacl_content_handler_nonsfi") to the
front of the file, at which point it is also runnable through the mojo_shell.
These files, which start with this "#!" line, are ".mojo" files. The nexes can
be run like this:
```
$ ./out/Debug/mojo_shell --enable-multiprocess out/Debug/FOOBAR.mojo
```
TODO
====
* Enable content handling of Non-SFI pexes, which should be translated and run
as nexes.
* Use subzero (a NaCl project to improve translation speed) for pexe
translation.
* Enable caching of translated pexes.