~ubuntu-branches/ubuntu/vivid/golang/vivid

« back to all changes in this revision

Viewing changes to misc/nacl/README

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2014-11-18 15:12:26 UTC
  • mfrom: (14.2.12 vivid-proposed)
  • Revision ID: package-import@ubuntu.com-20141118151226-zug7vn93mn3dtiz3
Tags: 2:1.3.2-1ubuntu1
* Merge from Debian unstable.  Remaining changes:
  - 016-armhf-elf-header.patch: Use correct ELF header for armhf binaries.
  - Support co-installability with gccgo-go tool:
    - d/rules,golang-go.install: Rename bin/go -> bin/golang-go
    - d/golang-go.{postinst,prerm}: Install/remove /usr/bin/go using
      alternatives.
  - d/copyright: Amendments for full compiliance with copyright format.
  - d/control: Demote golang-go.tools to Suggests to support Ubuntu MIR.
  - dropped patches (now upstream):
    - d/p/issue27650045_40001_50001.diff
    - d/p/issue28050043_60001_70001.diff
    - d/p/issue54790044_100001_110001.diff

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Native Client
 
2
=============
 
3
 
 
4
This document outlines the basics of building and developing the Go runtime and programs in the Native Client (NaCl) environment.
 
5
 
 
6
Go 1.3 supports two architectures
 
7
 
 
8
 * nacl/386 which is standard 386.
 
9
 * nacl/amd64p32 which is a 64 bit architecture, where the address space is limited to a 4gb window. 
 
10
 
 
11
For background it is recommended that you read http://golang.org/s/go13nacl.
 
12
 
 
13
Prerequisites
 
14
-------------
 
15
 
 
16
Native Client programs are executed inside a sandbox, the NaCl runtime. This runtime must be installed before you can use NaCl programs.
 
17
 
 
18
The NaCl distribution comes with an installer which ensures you have access to the latest version of the runtime. The version tracks the Chrome numbering scheme.
 
19
 
 
20
# Download NaCl
 
21
 
 
22
Download nacl_sdk.zip file from https://developers.google.com/native-client/dev/sdk/download, and unpack it. I chose /opt/nacl_sdk
 
23
 
 
24
# Update
 
25
 
 
26
The zip file contains a small skeleton that can be used to download the correct sdk. These are released every 6-8 weeks, in line with Chrome releases.
 
27
        
 
28
        % cd /opt/nacl_sdk
 
29
        % ./naclsdk update
 
30
 
 
31
At this time pepper_33 is the stable version. If naclsdk downloads a later version, please adjust accordingly.
 
32
 
 
33
The cmd/go helper scripts expect that the runtime loaders, sel_ldr_x86_{32,64} are in your path. I find it easiest to make a symlink from the NaCl distribution to my $GOPATH/bin directory.
 
34
 
 
35
        % ln -nfs /opt/nacl_sdk/pepper_33/tools/sel_ldr_x86_32 $GOPATH/bin/sel_ldr_x86_32
 
36
        % ln -nfs /opt/nacl_sdk/pepper_33/tools/sel_ldr_x86_64 $GOPATH/bin/sel_ldr_x86_64
 
37
 
 
38
Support scripts
 
39
---------------
 
40
 
 
41
Symlink the two scripts in this directory into your $PATH, just as you did with NaCl sdk above.
 
42
 
 
43
        % ln -nfs $GOROOT/go/misc/nacl/go_nacl_amd64p32_exec $GOPATH/bin/go_nacl_amd64p32_exec
 
44
        % ln -nfs $GOROOT/go/misc/nacl/go_nacl_386_exec $GOPATH/bin/go_nacl_386_exec
 
45
 
 
46
Building and testing
 
47
--------------------
 
48
 
 
49
Building for NaCl is similar to cross compiling for other platforms. However, as it is not possible to ever build in a `native` NaCl environment, the cmd/go tool has been enhanced to allow the full build, all.bash, to be executed, rather than just the compile stage, make.bash.
 
50
 
 
51
The cmd/go tool knows that if GOOS is set to `nacl` it should not try to execute any binaries itself. Instead it passes their execution to a support script which sets up a Native Client environment and invokes the NaCl sandbox.
 
52
 
 
53
The script's name has a special format, go_$GOOS_$GOARCH_exec, so cmd/go can find it.
 
54
 
 
55
In short, if the support scripts are in place, the cmd/go tool can be used as per normal.
 
56
 
 
57
# Build and test Go for NaCl
 
58
 
 
59
NaCl does not permit direct file system access. Instead, package syscall provides a simulated file system served by in-memory data. The script nacltest.bash is the NaCl equivalent of all.bash. It builds NaCl with an in-memory file system containing files needed for tests, and then it runs the tests.
 
60
 
 
61
        % cd go/src
 
62
        % env GOARCH=amd64p32 ./nacltest.bash
 
63