Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: native_client_sdk/src/build_tools/build_app.py

Issue 13488007: [NaCl SDK] Make the SDK examples buildable as a packaged app. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix license headers Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | native_client_sdk/src/build_tools/build_utils.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: native_client_sdk/src/build_tools/build_app.py
diff --git a/native_client_sdk/src/build_tools/build_app.py b/native_client_sdk/src/build_tools/build_app.py
new file mode 100755
index 0000000000000000000000000000000000000000..d90fdffc799ccd31817007c644b299b1016429e0
--- /dev/null
+++ b/native_client_sdk/src/build_tools/build_app.py
@@ -0,0 +1,147 @@
+#!/usr/bin/env python
+# 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.
+
+import optparse
+import os
+import re
+import sys
+
+if sys.version_info < (2, 6, 0):
+ sys.stderr.write("python 2.6 or later is required run this script\n")
+ sys.exit(1)
+
+import buildbot_common
+import build_sdk
+import build_utils
+import easy_template
+import generate_make
+
+sys.path.append(os.path.join(build_sdk.SDK_SRC_DIR, 'tools'))
+import getos
+import oshelpers
+
+# HACK: A few examples don't work properly as a packaged app right now.
+EXAMPLE_LIST = [
+# 'debugging',
+ 'dlopen',
+ 'file_histogram',
+ 'file_io',
+ 'gamepad',
+ 'geturl',
+ 'hello_nacl_io',
+ 'hello_world_stdio',
+ 'hello_world',
+ 'hello_world_gles',
+# 'hello_world_instance3d',
+ 'hello_world_interactive',
+ 'input_events',
+ 'load_progress',
+# 'mouselock',
+ 'pi_generator',
+ 'sine_synth',
+ 'websocket',
+]
+
+
+def GenerateMake(outdir, toolchains):
+ args = ['--dstroot=%s' % outdir, '--master', '--config=Release',
+ '--first-valid-toolchain']
+ for toolchain in toolchains:
+ args.append('--' + toolchain)
+
+ for example in EXAMPLE_LIST:
+ dsc = os.path.join(build_sdk.SDK_EXAMPLE_DIR, example, 'example.dsc')
+ args.append(dsc)
+
+ print "Generating Makefiles: %s" % str(args)
+ if generate_make.main(args):
+ buildbot_common.ErrorExit('Failed to build examples.')
+
+
+def RemoveBuildCruft(outdir):
+ for root, _, files in os.walk(outdir):
+ for f in files:
+ path = os.path.join(root, f)
+ ext = os.path.splitext(path)[1]
+ if ext in ('.d', '.o'):
+ buildbot_common.RemoveFile(path)
+ elif f == 'dir.stamp':
+ buildbot_common.RemoveFile(path)
+
+
+def StripNexes(outdir, platform, pepperdir):
+ for root, _, files in os.walk(outdir):
+ for f in files:
+ path = os.path.join(root, f)
+ m = re.search(r'lib(32|64).*\.so', path)
+ arch = None
+ if m:
+ # System .so file. Must be x86, because ARM doesn't support glibc yet.
+ arch = 'x86_' + m.group(1)
+ else:
+ basename, ext = os.path.splitext(f)
+ if ext in ('.nexe', '.so'):
+ # We can get the arch from the filename...
+ valid_arches = ('x86_64', 'x86_32', 'arm')
+ for a in valid_arches:
+ if basename.endswith(a):
+ arch = a
+ break
+ if not arch:
+ continue
+
+ strip = GetStrip(pepperdir, platform, arch, 'newlib')
+ buildbot_common.Run([strip, path])
+
+
+def GetStrip(pepperdir, platform, arch, toolchain):
+ base_arch = {'x86_32': 'x86', 'x86_64': 'x86', 'arm': 'arm'}[arch]
+ bin_dir = os.path.join(pepperdir, 'toolchain',
+ '%s_%s_%s' % (platform, base_arch, toolchain), 'bin')
+ strip_prefix = {'x86_32': 'i686', 'x86_64': 'x86_64', 'arm': 'arm'}[arch]
+ strip_name = '%s-nacl-strip' % strip_prefix
+ return os.path.join(bin_dir, strip_name)
+
+
+def main(args):
+ parser = optparse.OptionParser()
+ _, args = parser.parse_args(args[1:])
+
+ toolchains = ['newlib', 'glibc']
+
+ pepper_ver = str(int(build_utils.ChromeMajorVersion()))
+ pepperdir = os.path.join(build_sdk.OUT_DIR, 'pepper_' + pepper_ver)
+ app_dir = os.path.join(build_sdk.OUT_DIR, 'naclsdk_app')
+ app_examples_dir = os.path.join(app_dir, 'examples')
+ sdk_resources_dir = os.path.join(build_sdk.SDK_EXAMPLE_DIR, 'resources')
+ platform = getos.GetPlatform()
+
+ buildbot_common.RemoveDir(app_dir)
+ buildbot_common.MakeDir(app_dir)
+ GenerateMake(app_dir, toolchains)
+
+ easy_template.RunTemplateFile(
+ os.path.join(sdk_resources_dir, 'manifest.json.template'),
+ os.path.join(app_examples_dir, 'manifest.json'),
+ {'version': build_utils.ChromeVersionNoTrunk()})
+ buildbot_common.CopyFile(os.path.join(sdk_resources_dir, 'background.js'),
+ os.path.join(app_examples_dir, 'background.js'))
+
+ os.environ['NACL_SDK_ROOT'] = pepperdir
+ build_sdk.BuildStepMakeAll(app_dir, platform, 'examples', 'Build Examples',
+ False, False, 'Release')
+
+ RemoveBuildCruft(app_dir)
+ StripNexes(app_dir, platform, pepperdir)
+
+ app_zip = os.path.join(app_dir, 'examples.zip')
+ os.chdir(app_examples_dir)
+ oshelpers.Zip([app_zip, '-r', '*'])
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
« no previous file with comments | « no previous file | native_client_sdk/src/build_tools/build_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698