blob: acb2d8abc26f7f43adf6a7aefdb7c88203d4dbe6 [file] [view]
# NOTE: THIS IS QUITE OBSOLETE
please go here instead:
http://dev.chromium.org/nativeclient/native-client-documentation-index/building-and-testing-portable-native-client
# Building Native Client Modules For ARM Plaforms
NOTE: ARM development is only supported for linux systems
## Configure Your System For Emulation Voa QEMU
**You only need to do this once per machine**
As root, edit /etc/sysctl.conf, e.g.
sudo vi /etc/sysctl.conf
Add a line to the end of the file reading
vm.mmap\_min\_addr = 16384
Alternatively run:
everytime you reboot:
echo "16384" > /proc/sys/vm/mmap\_min\_addr
## Obtaining Toolchains
**You need to do this once for every checkout of the tree**
You will need two toolchains: a trusted one and an untrusted one which live in
* .../native\_client/toolchain/linux\_arm-trusted/
* ../native\_client/toolchain/linux\_arm-untrusted/
The trusted toolchain builds browser plugins, sel\_ldr, etc. The untrusted
toolchain builds nacl modules.
You can download working toolchains using `./scons --download platform=arm
sdl=none
`
You can also build the toolchains yourself using:
```
cd .../native_client/
tools/llvm/trusted-toolchain-creator.sh trusted_sdk
tools/llvm/untrusted-toolchain-creator.sh untrusted_sdk
```
NOTE: * this requires network access * there will be an error messages about $1
being undefined - ignore it * the last step will take for ever
## Running Simple Tests
## Build an ARM Validator Running on X86
```
./scons targetplatform=arm sdl=none arm-ncval-core
```
### Exercise the trusted toolchain
```
cd .../native_client/
./scons MODE=nacl,opt-linux platform=arm sdl=none naclsdk_validate=0 sel_ldr
```
### Exercise the untrusted toolchain
```
cd .../native_client/
./scons MODE=nacl,opt-linux platform=arm sdl=none naclsdk_validate=0 barebones_hello_world.nexe
```
### Running a Simple Test In the Harness
```
cd .../native_client/
./scons MODE=nacl,opt-linux platform=arm sdl=none naclsdk_validate=0 run_barebones_hello_world_test
```
To see what goes on under the hood here add **--verbose** to the commandline
(and maybe **sysinfo=** to suppress some other messages) `./scons
MODE=nacl,opt-linux platform=arm sdl=none naclsdk_mode=manual naclsdk_validate=0
run_barebones_hello_world_test --verbose sysinfo=
`
You should see something like: `...
/usr/local/google/ArmHardwareImages/gclients/gclient-nacl1/native_client/compiler/linux_arm-trusted/qemu-arm
-cpu cortex-a8 -L
/usr/local/google/ArmHardwareImages/gclients/gclient-nacl1/native_client/compiler/linux_arm-trusted/arm-2009q3/arm-none-linux-gnueabi/libc
/usr/local/google/ArmHardwareImages/gclients/gclient-nacl1/native_client/scons-out/opt-linux-arm/staging/sel_ldr
-f
/usr/local/google/ArmHardwareImages/gclients/gclient-nacl1/native_client/scons-out/nacl-arm/obj/tests/sysbasic/barebones_hello_world.nexe
...
`
You should be able to run this very same command line from your shell. Notice,
that we are using qemu to run this test. If you want to run this test on real
hardware you need to copy **sel\_ldr** and **barebones\_hello\_world.nexe** to
the ARM machine and run `.../sel_ldr -f .../barebones_hello_world.nexe
`
If you do run inside QEMU, using the options: **-d cpu,in\_asm,exec** generates
a trace file into: /tmp/qemu.log
### Running Lots of Tests In the Harness
```
./scons MODE=nacl,opt-linux platform=arm sdl=none naclsdk_validate=0 run_barebones_hello_world_test smoke_tests
```
## Advanced Topics
### Rebuilding Newlib
NOTE: this may or may not work, it is always safer to build the entire TC from
scratch `tools/llvm/untrusted-toolchain-creator.sh newlib
`
### Rebuilding Other Base Libraries
NOTE: this may or may not work, it is always safer to build the entire TC from
scratch `tools/llvm/untrusted-toolchain-creator.sh extrasdk
`