diff options
author | sbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-25 23:35:38 +0000 |
---|---|---|
committer | sbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-25 23:35:38 +0000 |
commit | 1d16e036a7969bb36de234c7e69f40ed68de6aad (patch) | |
tree | 39b86df274d0db553b35a1536219d8c5a3c386a0 /native_client_sdk/src/gonacl_appengine | |
parent | ef7cb527912d5b37a73e0b43dcd49623bd2ab482 (diff) | |
download | chromium_src-1d16e036a7969bb36de234c7e69f40ed68de6aad.zip chromium_src-1d16e036a7969bb36de234c7e69f40ed68de6aad.tar.gz chromium_src-1d16e036a7969bb36de234c7e69f40ed68de6aad.tar.bz2 |
[NaCl SDK] Add lua demo to appengine site.
I pushed an initial version of lua here:
http://gsdview.appspot.com/gonacl/demos/continuous/231022/lua/
But the static content is not yet pushed to appengine
pending the ability to push without clobbering what is
there.
R=binji@chromium.org
Review URL: https://codereview.chromium.org/45223002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231150 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'native_client_sdk/src/gonacl_appengine')
8 files changed, 335 insertions, 10 deletions
diff --git a/native_client_sdk/src/gonacl_appengine/src/Makefile b/native_client_sdk/src/gonacl_appengine/src/Makefile index 0bb6320..aef5995 100644 --- a/native_client_sdk/src/gonacl_appengine/src/Makefile +++ b/native_client_sdk/src/gonacl_appengine/src/Makefile @@ -53,7 +53,7 @@ all: # # All projects built by this Makefile # -PROJECTS = earth voronoi life bullet +PROJECTS = earth voronoi life bullet lua GS_URL_CONTINUOUS = gs://gonacl/demos/continuous GS_URL_PUBLISH = gs://gonacl/demos/publish @@ -74,9 +74,9 @@ GS_URL_PUBLISH = gs://gonacl/demos/publish # # Earth # -earth_SRC_DIR = $(CURDIR)/earth -earth_TGT_DIR = $(CURDIR)/earth/pnacl/Release -earth_JPG_DIR = $(CURDIR)/../../examples/demo/earth +earth_SRC_DIR = earth +earth_TGT_DIR = earth/pnacl/Release +earth_JPG_DIR = ../../examples/demo/earth earth_SRCS = $(earth_SRC_DIR)/earth.cc \ $(earth_SRC_DIR)/Makefile earth_TGTS = $(earth_TGT_DIR)/earth.pexe \ @@ -86,21 +86,35 @@ earth_JPGS = $(earth_JPG_DIR)/earth.jpg \ earth_EXTRA_UPLOADS = $(earth_JPGS) $(earth_TGTS): $(earth_SRCS) - $(MAKE) -C $(CURDIR)/earth TOOLCHAIN=pnacl CONFIG=Release + $(MAKE) -C earth TOOLCHAIN=pnacl CONFIG=Release # # Bullet # -bullet_SRC_DIR = $(CURDIR)/bullet -bullet_TGT_DIR = $(CURDIR)/bullet/out +bullet_SRC_DIR = bullet +bullet_TGT_DIR = bullet/out bullet_SRCS = $(bullet_SRC_DIR)/build.sh \ $(bullet_SRC_DIR)/Makefile bullet_TGTS = $(bullet_TGT_DIR)/NaClAMBullet.pexe \ $(bullet_TGT_DIR)/NaClAMBullet.nmf $(bullet_TGTS): $(bullet_SRCS) - $(CURDIR)/bullet/build.sh + bullet/build.sh + +# +# Lua +# +lua_SRC_DIR = lua +lua_TGT_DIR = lua/out/naclports/src/out/publish/lua/pnacl +lua_SRCS = $(lua_SRC_DIR)/build.sh +lua_TGTS = $(lua_TGT_DIR)/lua.pexe \ + $(lua_TGT_DIR)/luadata.tar \ + $(lua_TGT_DIR)/lua.nmf \ + $(lua_TGT_DIR)/hterm.concat.js + +$(lua_TGTS): $(lua_SRCS) + lua/build.sh # # Voronoi diff --git a/native_client_sdk/src/gonacl_appengine/src/bullet/build.sh b/native_client_sdk/src/gonacl_appengine/src/bullet/build.sh index 837f1a7..5ac2185 100755 --- a/native_client_sdk/src/gonacl_appengine/src/bullet/build.sh +++ b/native_client_sdk/src/gonacl_appengine/src/bullet/build.sh @@ -7,7 +7,9 @@ set -o nounset set -o errexit SCRIPT_DIR="$(cd $(dirname $0) && pwd)" -OUT_DIR=${SCRIPT_DIR}/out +cd ${SCRIPT_DIR} + +OUT_DIR=out NACLPORTS_URL=https://chromium.googlesource.com/external/naclports NACLPORTS_SHA=0096083c0fa71c014f6218bb14d7e1742d9a6b0c NACLPORTS_DIR=${OUT_DIR}/naclports @@ -75,7 +77,7 @@ Banner Cloning NaClAMBase Clone ${NACLAM_URL} ${NACLAM_DIR} ${NACLAM_SHA} Banner Building NaClAM -LogExecute cp ${SCRIPT_DIR}/Makefile ${NACLAM_DIR} +LogExecute cp Makefile ${NACLAM_DIR} pushd ${NACLAM_DIR} LogExecute make -j${OS_JOBS} popd diff --git a/native_client_sdk/src/gonacl_appengine/src/earth/.gitignore b/native_client_sdk/src/gonacl_appengine/src/earth/.gitignore new file mode 100644 index 0000000..b370218 --- /dev/null +++ b/native_client_sdk/src/gonacl_appengine/src/earth/.gitignore @@ -0,0 +1 @@ +pnacl diff --git a/native_client_sdk/src/gonacl_appengine/src/lua/.gitignore b/native_client_sdk/src/gonacl_appengine/src/lua/.gitignore new file mode 100644 index 0000000..1fcb152 --- /dev/null +++ b/native_client_sdk/src/gonacl_appengine/src/lua/.gitignore @@ -0,0 +1 @@ +out diff --git a/native_client_sdk/src/gonacl_appengine/src/lua/build.sh b/native_client_sdk/src/gonacl_appengine/src/lua/build.sh new file mode 100755 index 0000000..8aef2f9 --- /dev/null +++ b/native_client_sdk/src/gonacl_appengine/src/lua/build.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# Copyright (c) 2012 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. + +set -o nounset +set -o errexit + +SCRIPT_DIR="$(cd $(dirname $0) && pwd)" + +cd ${SCRIPT_DIR} + +OUT_DIR=out +NACLPORTS_URL=https://chromium.googlesource.com/external/naclports.git +NACLPORTS_REV=58a6ab9 +NACLPORTS_DIR=${OUT_DIR}/naclports + +if [ -z "${NACL_SDK_ROOT:-}" ]; then + echo "-------------------------------------------------------------------" + echo "NACL_SDK_ROOT is unset." + echo "This environment variable needs to be pointed at some version of" + echo "the Native Client SDK (the directory containing toolchain/)." + echo "NOTE: set this to an absolute path." + echo "-------------------------------------------------------------------" + exit -1 +fi + +Banner() { + echo "######################################################################" + echo $* + echo "######################################################################" +} + +# echo a command to stdout and then execute it. +LogExecute() { + echo $* + $* +} + +Clone() { + local url=$1 + local dir=$2 + local sha=$3 + if [ ! -d $dir ]; then + LogExecute git clone $url $dir + else + pushd $dir + LogExecute git fetch origin + popd + fi + + pushd $dir + LogExecute git checkout $sha + popd +} + +Banner Cloning naclports +if [ ! -d ${NACLPORTS_DIR} ]; then + mkdir -p ${NACLPORTS_DIR} + pushd ${NACLPORTS_DIR} + gclient config --name=src ${NACLPORTS_URL} + popd +fi + +pushd ${NACLPORTS_DIR}/src +gclient sync -r ${NACLPORTS_REV} + +Banner Building lua +make NACL_ARCH=pnacl lua_ppapi +popd + +Banner Done! diff --git a/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/index.html b/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/index.html new file mode 100644 index 0000000..c0371d2 --- /dev/null +++ b/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/index.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>Lua</title> + <script type="text/javascript" src="http://commondatastorage.googleapis.com/gonacl/demos/publish/231022/lua/hterm.concat.js"></script> + <script type="text/javascript" src="naclterm.js"></script> + <script type="text/javascript" src="lua.js"></script> + + <style type="text/css"> + body { + position: absolute; + padding: 0; + margin: 0; + height: 100%; + width: 100%; + overflow: hidden; + } + + #terminal { + display: block; + position: static; + width: 100%; + height: 100%; + } + </style> + </head> + <body> + <div id="terminal"></div> + </body> +</html> diff --git a/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/lua.js b/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/lua.js new file mode 100644 index 0000000..18b8427 --- /dev/null +++ b/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/lua.js @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2013 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. + */ + +NaClTerm.prefix = 'lua' +NaClTerm.nmf = 'http://commondatastorage.googleapis.com/gonacl/demos/publish/231022/lua/lua.nmf' diff --git a/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/naclterm.js b/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/naclterm.js new file mode 100644 index 0000000..d272a0b --- /dev/null +++ b/native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/naclterm.js @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2013 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. + */ + +'use strict'; + +lib.rtdep('lib.f', + 'hterm'); + +// CSP means that we can't kick off the initialization from the html file, +// so we do it like this instead. +window.onload = function() { + lib.init(function() { + NaClTerm.init(); + }); +}; + +/** + * The hterm-powered terminal command. + * + * This class defines a command that can be run in an hterm.Terminal instance. + * + * @param {Object} argv The argument object passed in from the Terminal. + */ +function NaClTerm(argv) { + this.argv_ = argv; + this.io = null; +}; + +var embed; + +/** + * Static initialier called from index.html. + * + * This constructs a new Terminal instance and instructs it to run the NaClTerm + * command. + */ +NaClTerm.init = function() { + var profileName = lib.f.parseQuery(document.location.search)['profile']; + var terminal = new hterm.Terminal(profileName); + terminal.decorate(document.querySelector('#terminal')); + + // Useful for console debugging. + window.term_ = terminal; + + // We don't properly support the hterm bell sound, so we need to disable it. + terminal.prefs_.definePreference('audible-bell-sound', ''); + + terminal.setAutoCarriageReturn(true); + terminal.setCursorPosition(0, 0); + terminal.setCursorVisible(true); + terminal.runCommandClass(NaClTerm, document.location.hash.substr(1)); + + return true; +}; + +/** + * Handle messages sent to us from NaCl. + * + * @private + */ +NaClTerm.prototype.handleMessage_ = function(e) { + if (e.data.indexOf(NaClTerm.prefix) != 0) return; + var msg = e.data.substring(NaClTerm.prefix.length); + if (!this.loaded) { + this.bufferedOutput += msg; + } else { + term_.io.print(msg); + } +} + +/** + * Handle load error event from NaCl. + */ +NaClTerm.prototype.handleLoadAbort_ = function(e) { + term_.io.print("Load aborted.\n"); +} + +/** + * Handle load abort event from NaCl. + */ +NaClTerm.prototype.handleLoadError_ = function(e) { + term_.io.print(embed.lastError + '\n'); +} + +/** + * Handle load end event from NaCl. + */ +NaClTerm.prototype.handleLoad_ = function(e) { + if (typeof(this.lastUrl) != 'undefined') + term_.io.print("\n"); + term_.io.print("Loaded.\n"); + + // Now that have completed loading and displaying + // loading messages we output any messages from the + // NaCl module that were buffered up unto this point + this.loaded = true; + term_.io.print(this.bufferedOutput); + this.bufferedOutput = '' +} + +/** + * Handle load progress event from NaCl. + */ +NaClTerm.prototype.handleProgress_ = function(e) { + var url = e.url.substring(e.url.lastIndexOf('/') + 1); + if (this.lastUrl != url) { + if (url != '') { + if (this.lastUrl) + term_.io.print("\n"); + term_.io.print("Loading " + url + " ."); + } + } else { + term_.io.print("."); + } + if (url) + this.lastUrl = url; +} + +/** + * Handle crash event from NaCl. + */ +NaClTerm.prototype.handleCrash_ = function(e) { + if (embed.exitStatus == -1) { + term_.io.print("Program crashed (exit status -1)\n") + } else { + term_.io.print("Program exited (status=" + embed.exitStatus + ")\n"); + } +} + + +NaClTerm.prototype.onTerminalResize_ = function() { + var width = term_.io.terminal_.screenSize.width; + var height = term_.io.terminal_.screenSize.height; + embed.postMessage({'tty_resize': [ width, height ]}); +} + +NaClTerm.prototype.onVTKeystroke_ = function(str) { + var message = {}; + message[NaClTerm.prefix] = str; + embed.postMessage(message); +} + +/* + * This is invoked by the terminal as a result of terminal.runCommandClass(). + */ +NaClTerm.prototype.run = function() { + this.io = this.argv_.io.push(); + this.bufferedOutput = ''; + this.loaded = false; + + embed = document.createElement('object'); + embed.width = 0; + embed.height = 0; + embed.data = NaClTerm.nmf; + embed.type = 'application/x-pnacl'; + embed.addEventListener('message', this.handleMessage_.bind(this)); + embed.addEventListener('progress', this.handleProgress_.bind(this)); + embed.addEventListener('load', this.handleLoad_.bind(this)); + embed.addEventListener('error', this.handleLoadError_.bind(this)); + embed.addEventListener('abort', this.handleLoadAbort_.bind(this)); + embed.addEventListener('crash', this.handleCrash_.bind(this)); + + function addParam(name, value) { + var param = document.createElement('param'); + param.name = name; + param.value = value; + embed.appendChild(param); + } + + addParam('ps_tty_prefix', NaClTerm.prefix); + addParam('ps_tty_resize', 'tty_resize'); + addParam('ps_stdin', '/dev/tty'); + addParam('ps_stdout', '/dev/tty'); + addParam('ps_stderr', '/dev/tty'); + addParam('ps_verbosity', '2'); + addParam('TERM', 'xterm-256color'); + + var args = lib.f.parseQuery(document.location.search); + var argn = 1; + while (true) { + var argname = 'arg' + argn; + var arg = args[argname]; + if (typeof(arg) === 'undefined') + break; + addParam(argname, arg); + argn = argn + 1; + } + + term_.io.print("Loading NaCl module.\n") + document.body.appendChild(embed); + + this.io.onVTKeystroke = this.onVTKeystroke_.bind(this); + this.io.onTerminalResize = this.onTerminalResize_.bind(this); +}; |