summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-25 23:35:38 +0000
committersbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-25 23:35:38 +0000
commit1d16e036a7969bb36de234c7e69f40ed68de6aad (patch)
tree39b86df274d0db553b35a1536219d8c5a3c386a0
parentef7cb527912d5b37a73e0b43dcd49623bd2ab482 (diff)
downloadchromium_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
-rw-r--r--native_client_sdk/src/gonacl_appengine/src/Makefile30
-rwxr-xr-xnative_client_sdk/src/gonacl_appengine/src/bullet/build.sh6
-rw-r--r--native_client_sdk/src/gonacl_appengine/src/earth/.gitignore1
-rw-r--r--native_client_sdk/src/gonacl_appengine/src/lua/.gitignore1
-rwxr-xr-xnative_client_sdk/src/gonacl_appengine/src/lua/build.sh72
-rw-r--r--native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/index.html30
-rw-r--r--native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/lua.js8
-rw-r--r--native_client_sdk/src/gonacl_appengine/static/pnacl-demo-lua/naclterm.js197
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);
+};