1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:24:45 -07:00

make Native Client support build again,

add README explaining how to try the
web demos.

Fixes #339.

R=r
CC=barry.d.silverman, bss, vadim
https://golang.org/cl/165057
This commit is contained in:
Russ Cox 2009-12-04 10:11:32 -08:00
parent 11384eecf8
commit 609eeee817
17 changed files with 161 additions and 23 deletions

11
src/all-nacl.bash Normal file → Executable file
View File

@ -5,6 +5,9 @@
# TODO(rsc): delete in favor of all.bash once nacl support is complete # TODO(rsc): delete in favor of all.bash once nacl support is complete
export GOARCH=386
export GOOS=nacl
set -e set -e
bash make.bash bash make.bash
@ -22,6 +25,14 @@ make install
make install make install
) || exit $? ) || exit $?
(xcd pkg/exp/4s
make
) || exit $?
(xcd pkg/exp/spacewar
make
) || exit $?
(xcd ../test (xcd ../test
./run-nacl ./run-nacl
) || exit $? ) || exit $?

View File

@ -82,7 +82,7 @@ bash clean.bash
for i in lib9 libbio libmach cmd pkg libcgo cmd/cgo cmd/ebnflint cmd/godoc cmd/gofmt cmd/goyacc cmd/hgpatch for i in lib9 libbio libmach cmd pkg libcgo cmd/cgo cmd/ebnflint cmd/godoc cmd/gofmt cmd/goyacc cmd/hgpatch
do do
case "$i-$GOOS" in case "$i-$GOOS" in
libcgo-nacl) libcgo-nacl | cmd/*-nacl)
;; ;;
*) *)
# The ( ) here are to preserve the current directory # The ( ) here are to preserve the current directory

View File

@ -50,6 +50,7 @@ DIRS=\
encoding/pem\ encoding/pem\
exec\ exec\
exp/datafmt\ exp/datafmt\
exp/draw\
exp/eval\ exp/eval\
exp/exception\ exp/exception\
exp/iterable\ exp/iterable\
@ -105,6 +106,7 @@ DIRS=\
NOTEST=\ NOTEST=\
debug/proc\ debug/proc\
exp/draw\
go/ast\ go/ast\
go/doc\ go/doc\
go/token\ go/token\

View File

@ -5,6 +5,8 @@
// This is a simple demo of Go running under Native Client. // This is a simple demo of Go running under Native Client.
// It is a tetris clone built on top of the exp/nacl/av and exp/draw // It is a tetris clone built on top of the exp/nacl/av and exp/draw
// packages. // packages.
//
// See ../nacl/README for how to run it.
package main package main
import ( import (

View File

@ -1,10 +1,26 @@
<html>
<head>
<title>Go in Native Client</title>
</head>
<body>
<h1>games/4s</h1>
<embed name="nacl_module" id="pluginobj" src="8.out" type="application/x-nacl-srpc" width=400 height=600>
</body>
</html>
<h1>games/4s</h1>
<table><tr><td valign=top>
<embed name="nacl_module" id="pluginobj" src="8.out" type="application/x-nacl-srpc" width=400 height=600>
<td valign=top>
This is a simple block stacking game, a port of Plan 9's
<a href="http://plan9.bell-labs.com/magic/man2html/1/games">games/4s</a>
<br><br>
To play using the keyboard:
as the blocks fall, the <i>a</i>, <i>s</i>, <i>d</i>, and <i>f</i> keys
move the block left, rotate the block left, rotate the block right,
anad move the block right, respectively.
To drop a block, type the space key.
<b>You may need to click on the game window to
focus the keyboard on it.</b>
<br><br>
To play using the mouse:
as the blocks fall, moving the mouse horizontally positions
the block; left or right clicks rotate the block left or right.
A middle click drops the block.
(Unfortunately, some environments seem to intercept
the middle click before it gets to Native Client.)
<br><br>
To pause the game, type <i>z</i>, <i>p</i>, or the escape key.
</table>

9
src/pkg/exp/4s/5s.go Normal file
View File

@ -0,0 +1,9 @@
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Hack to produce a binary that defaults to 5s.
package main
func init() { pieces4 = pieces5 }

26
src/pkg/exp/4s/5s.html Normal file
View File

@ -0,0 +1,26 @@
<h1>games/5s</h1>
<table><tr><td valign=top>
<embed name="nacl_module" id="pluginobj" src="8.5s" type="application/x-nacl-srpc" width=400 height=600>
<td valign=top>
This is a simple block stacking game, a port of Plan 9's
<a href="http://plan9.bell-labs.com/magic/man2html/1/games">games/5s</a>
<br><br>
To play using the keyboard:
as the blocks fall, the <i>a</i>, <i>s</i>, <i>d</i>, and <i>f</i> keys
move the block left, rotate the block left, rotate the block right,
anad move the block right, respectively.
To drop a block, type the space key.
<b>You may need to click on the game window to
focus the keyboard on it.</b>
<br><br>
To play using the mouse:
as the blocks fall, moving the mouse horizontally positions
the block; left or right clicks rotate the block left or right.
A middle click drops the block.
(Unfortunately, some environments seem to intercept
the middle click before it gets to Native Client.)
<br><br>
To pause the game, type <i>z</i>, <i>p</i>, or the escape key.
</table>

View File

@ -2,13 +2,19 @@
# Use of this source code is governed by a BSD-style # Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file. # license that can be found in the LICENSE file.
all: 8.out all: 8.out 8.5s
4s.8: 4s.go data.go xs.go 4s.8: 4s.go data.go xs.go
8g 4s.go data.go xs.go 8g 4s.go data.go xs.go
5s.8: 5s.go 4s.go data.go xs.go
8g 5s.go 4s.go data.go xs.go
8.out: 4s.8 8.out: 4s.8
8l 4s.8 8l 4s.8
8.5s: 5s.8
8l -o 8.5s 5s.8
clean: clean:
rm -f *.8 8.out rm -f *.8 8.out

View File

@ -726,7 +726,7 @@ func Play(pp []Piece, ctxt draw.Context) {
pieces = pp; pieces = pp;
N = len(pieces[0].d); N = len(pieces[0].d);
initPieces(); initPieces();
rand.Seed(int32(time.Nanoseconds() % (1e9 - 1))); rand.Seed(int64(time.Nanoseconds() % (1e9 - 1)));
whitemask = draw.White.SetAlpha(0x7F); whitemask = draw.White.SetAlpha(0x7F);
tsleep = 50; tsleep = 50;
timerc = time.Tick(int64(tsleep/2) * 1e6); timerc = time.Tick(int64(tsleep/2) * 1e6);

36
src/pkg/exp/nacl/README Normal file
View File

@ -0,0 +1,36 @@
Native Client support is still incomplete:
Native Client does not yet allow runtime code generation,
so Go's many uses of closures do not work.
To try Native Client by running 4s (tetris) or 5s or Spacewar:
1. Build the Go distribution for your native system.
2. Download Native Client and install it.
http://nativeclient.googlecode.com/svn/trunk/src/native_client/documentation/getting_started.html
* You can stop after step 4 on those instructions
(the ./scons --prebuilt firefox_install).
3. (optional) Install "./build/native_client/scons-out/opt-*/staging/sel_ldr"
from the Native Client distribution somewhere in your path as "nacl".
This will let you run binaries using "nacl 8.out".
4. Build the Go distribution again, this time for Native Client:
cd $GOROOT/src
./all-nacl.bash
* If you didn't do step 3, the tests at the end will fail, but that's okay.
* If you are on a Mac, your dock will flicker as the "nacl" binary
starts and stops while the tests run. You can stop the tests at any time.
5. Run "godoc --http=:5103".
* This will run the godoc built for your host OS, not Native Client,
because all-nacl.bash doesn't install a nacl godoc.
* Note that there is a colon before the 5103 in the argument
(shorthand for 0.0.0.0:5103).
* The port must be 5103: that's the only port that Native Client
trusts to run binaries from.
6. Open Firefox and visit one of:
* http://localhost:5103/src/pkg/exp/4s/4s.html
* http://localhost:5103/src/pkg/exp/4s/5s.html [sic]
* http://localhost:5103/src/pkg/exp/spacewar/spacewar.html

View File

@ -21,6 +21,7 @@
// This package and spacewar.go implement a simple PDP-1 emulator // This package and spacewar.go implement a simple PDP-1 emulator
// complete enough to run the original PDP-1 video game Spacewar! // complete enough to run the original PDP-1 video game Spacewar!
// See ../../nacl/README for details on running them.
// //
// They are a translation of the Java emulator pdp1.java in // They are a translation of the Java emulator pdp1.java in
// http://spacewar.oversigma.com/sources/sources.zip. // http://spacewar.oversigma.com/sources/sources.zip.

View File

@ -19,6 +19,8 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
// See ../../nacl/README.
package main package main
import ( import (

View File

@ -1,10 +1,21 @@
<html>
<head>
<title>Go in Native Client</title>
</head>
<body>
<h1>Spacewar</h1>
<embed name="nacl_module" id="pluginobj" src="8.out" type="application/x-nacl-srpc" width=512 height=512>
</body>
</html>
<h1>Spacewar</h1>
<table>
<tr><td valign=top>
<embed name="nacl_module" id="pluginobj" src="8.out" type="application/x-nacl-srpc" width=512 height=512>
<td valign=top>
This is a Go translation of the Java emulator pdp1.java in
<a href="http://spacewar.oversigma.com/sources/sources.zip">http://spacewar.oversigma.com/sources/sources.zip</a>.
See <a href="pdp1.go">pdp1.go</a>, <a href="spacewar.go">spacewar.go</a>,
and
<a href="http://spacewar.oversigma.com/readme.html">http://spacewar.oversigma.com/readme.html</a>.
<br><br>
The <i>a</i>, <i>s</i>, <i>d</i>, <i>f</i> keys control one of the spaceships. The <i>k</i>,
<i>l</i>, <i>;</i>, <i>'</i> keys control the other. The controls are spin one
way, spin the other, thrust, and fire.
<br>
<br>
<b>You may need to click on the game window to
focus the keyboard on it.</b>
</table>

View File

@ -236,7 +236,9 @@ const (
TCP_NODELAY; TCP_NODELAY;
WNOHANG; WNOHANG;
WSTOPPED; WSTOPPED;
_PTRACE_TRACEME; PTRACE_TRACEME;
SO_BROADCAST = 0;
SHUT_RDWR = 0;
) )
func Accept(fd int) (nfd int, sa Sockaddr, errno int) { func Accept(fd int) (nfd int, sa Sockaddr, errno int) {
@ -263,6 +265,16 @@ func SetsockoptInt(fd, level, opt int, value int) (errno int) {
return ENACL return ENACL
} }
func Shutdown(fd, how int) (errno int) { return ENACL }
func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, errno int) {
return 0, nil, ENACL
}
func Sendto(fd int, p []byte, flags int, to Sockaddr) (errno int) {
return ENACL
}
func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (errno int) { func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (errno int) {
return ENACL return ENACL
} }

View File

@ -50,7 +50,7 @@ enum {
$SYS_CHDIR = 0, $SYS_CHDIR = 0,
$SYS_DUP2 = 0, $SYS_DUP2 = 0,
$SYS_FCNTL = 0, $SYS_FCNTL = 0,
$SYS_EXECVE = 0 $SYS_EXECVE = 0,
}; };
// Basic types // Basic types

View File

@ -31,6 +31,7 @@ const (
O_SYNC = 0x1000; O_SYNC = 0x1000;
O_TRUNC = 0x200; O_TRUNC = 0x200;
O_CLOEXEC = 0; O_CLOEXEC = 0;
O_EXCL = 0;
F_GETFD = 0x1; F_GETFD = 0x1;
F_SETFD = 0x2; F_SETFD = 0x2;
F_GETFL = 0x3; F_GETFL = 0x3;

View File

@ -5,6 +5,9 @@
case X"$GOARCH" in case X"$GOARCH" in
X386) X386)
# After downloading the Native Client binary distribution,
# copy build/native_client/scons-out/opt-*/obj/src/trusted/service_runtime/sel_ldr
# into your path as "nacl"
export A=8 export A=8
export E=nacl export E=nacl
;; ;;