aboutsummaryrefslogtreecommitdiffstats
path: root/testing/emscripten
diff options
context:
space:
mode:
authorJakub Jirutka <jakub@jirutka.cz>2017-03-30 00:44:07 +0200
committerJakub Jirutka <jakub@jirutka.cz>2017-03-31 12:58:10 +0200
commita0a7e548470fb9aacbcf101c370e431b32704294 (patch)
treee500d7bc15ba658e4ed9895de11a6b936db6cd13 /testing/emscripten
parent5dc3bb2b38d3e0793437bc6027f433f7e76414d1 (diff)
downloadaports-a0a7e548470fb9aacbcf101c370e431b32704294.tar.bz2
aports-a0a7e548470fb9aacbcf101c370e431b32704294.tar.xz
testing/emscripten: new aport
https://kripken.github.io/emscripten-site/ An LLVM-to-JavaScript Compiler
Diffstat (limited to 'testing/emscripten')
-rw-r--r--testing/emscripten/APKBUILD96
-rw-r--r--testing/emscripten/add-system-level-config.patch85
-rw-r--r--testing/emscripten/emscripten.cfg17
-rw-r--r--testing/emscripten/fix-python-shebang.patch104
-rw-r--r--testing/emscripten/move-emcc-txt.patch12
-rw-r--r--testing/emscripten/settings_template-paths.patch36
6 files changed, 350 insertions, 0 deletions
diff --git a/testing/emscripten/APKBUILD b/testing/emscripten/APKBUILD
new file mode 100644
index 0000000000..60b80333a4
--- /dev/null
+++ b/testing/emscripten/APKBUILD
@@ -0,0 +1,96 @@
+# Contributor: Jakub Jirutka <jakub@jirutka.cz>
+# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
+
+# Note: This software is total mess and it seems to be nearly impossible to
+# create a clean distribution package.
+pkgname=emscripten
+# Keep with sync with pkg emscrypten-fastcomp!
+pkgver=1.37.9
+pkgrel=0
+pkgdesc="An LLVM-to-JavaScript Compiler"
+url="https://kripken.github.io/emscripten-site/"
+arch="all"
+license="MIT UOI-NCSA"
+depends="$pkgname-optimizer=$pkgver-r$pkgrel emscripten-fastcomp>=$pkgver
+ nodejs python2"
+makedepends="cmake clang"
+subpackages="$pkgname-optimizer"
+source="$pkgname-$pkgver.tar.gz::https://github.com/kripken/$pkgname/archive/$pkgver.tar.gz
+ fix-python-shebang.patch
+ settings_template-paths.patch
+ add-system-level-config.patch
+ move-emcc-txt.patch
+ emscripten.cfg"
+builddir="$srcdir/$pkgname-$pkgver"
+
+build() {
+ cd "$builddir"/tools/optimizer
+
+ cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_CXX_FLAGS="$CXXFLAGS" \
+ -DCMAKE_C_FLAGS="$CFLAGS" \
+ -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_VERBOSE_MAKEFILE=ON
+ make
+}
+
+check() {
+ cd "$builddir"
+
+ sed "s|/usr/share/emscripten|$builddir|" "$srcdir"/emscripten.cfg \
+ > tests/.emscripten
+
+ ./emcc --em-config tests/.emscripten \
+ --cache "$srcdir"/.cache \
+ -o tests/hello_world.js tests/hello_world.c
+ node tests/hello_world.js
+}
+
+package() {
+ local destdir="$pkgdir/usr/share/$pkgname"
+ local name
+
+ mkdir -p "$destdir"
+ cp -r "$builddir"/* "$destdir"/
+
+ cd "$destdir"
+
+ # This is read from emcc.py for --help.
+ cp site/build/text/docs/tools_reference/emcc.txt .
+
+ find . -name "*.bat" -delete
+ rm -r docs # there are only few PDFs and TeX sources
+ rm -r media # media for website
+ rm -r site # a website (?)
+ rm -r tests # looks more like a dump of random sources than decent tests
+ rm -r third_party # bundled stuff
+ rm -r tools/optimizer # we've already built it
+ rm AUTHORS LICENSE *.md *.markdown package.json
+ rm system/lib/build_cxx_natively.sh
+
+ mkdir -p "$pkgdir"/usr/bin
+ for name in em++ em-config emar embuilder.py emcc emcmake \
+ emconfigure emlink.py emmake emrun emscons
+ do
+ ln -s ../share/$pkgname/$name "$pkgdir"/usr/bin/$name
+ done
+
+ install -D -m 644 "$srcdir"/emscripten.cfg "$pkgdir"/etc/emscripten.cfg
+}
+
+optimizer() {
+ pkgdesc="Emscripten's optimizer for asm.js code"
+ depends=""
+
+ install -D -m 755 "$builddir"/tools/optimizer/optimizer \
+ "$subpkgdir"/usr/bin/emoptimizer
+}
+
+sha512sums="0efd9035d3dce0726025b5b8e30129885eef30f915c502b8957150e4ffc11fd0e9a2b605854cdf69ca3eb05e5102bf34341b7edd2116f5fa29fd170a28e7f07f emscripten-1.37.9.tar.gz
+a61e172ced6b72adb53a840255a9753905a0c7a1c9f8965345781b9cdcc8a596c4dc88f036e91bd5c05d8b3eb2908bbb7d991c4e1abcf35a46be67b9765e546a fix-python-shebang.patch
+ec0dc4a5c562fb85d861c37f5b3168351921dfd7865754ff117f757f15c45ec4474c56b71cd6f50beed71d91a270f3c7ad9d27db205be8eb6637b72b0c9fca8a settings_template-paths.patch
+10a7a545f468a5f71fdf1cca0e0be983db5d21387202b851bd11f811c2a0a74f4e4c8733ae9ff933df4ea49c3f5e8e4e16fc3651bc98bb8c37a0828bb29eca7e add-system-level-config.patch
+6613ef4cf41bcf0ecc13a0415cdc847f4ec112f07dd19573000ea6a9a6f2360aee6b2db01f822d117d5022dc58b2421be89fe3421c46fd6857737d07ce489c1e move-emcc-txt.patch
+e485c974c465fc60ff0c81ba0a7e2c68bd2f653fff6861007d4ce29dd20c7163ba63ac1a3c449b870a8fa4642ad3ef1c8d1e6380add2db58f65553b58f626c9e emscripten.cfg"
diff --git a/testing/emscripten/add-system-level-config.patch b/testing/emscripten/add-system-level-config.patch
new file mode 100644
index 0000000000..b57860941c
--- /dev/null
+++ b/testing/emscripten/add-system-level-config.patch
@@ -0,0 +1,85 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Wed, 29 Mar 2017 22:02:00 +0200
+Subject: [PATCH] Add system-level config /etc/emscripten.cfg
+
+If ~/.emscripten does not exist and /etc/emscripten.cfg do exist, then
+/etc/emscripten.cfg will be used.
+
+--- a/emscripten.py
++++ b/emscripten.py
+@@ -1791,7 +1791,7 @@
+ help='Where to write the output; defaults to stdout.')
+ parser.add_option('-c', '--compiler',
+ default=None,
+- help='Which JS engine to use to run the compiler; defaults to the one in ~/.emscripten.')
++ help='Which JS engine to use to run the compiler; defaults to the one in ~/.emscripten or /etc/emscripten.cfg.')
+ parser.add_option('-s', '--setting',
+ dest='settings',
+ default=[],
+
+--- a/tools/file_packager.py
++++ b/tools/file_packager.py
+@@ -24,8 +24,8 @@
+ it knows that closure is not run.
+
+ --crunch=X Will compress dxt files to crn with quality level X. The crunch commandline tool must be present
+- and CRUNCH should be defined in ~/.emscripten that points to it. JS crunch decompressing code will
+- be added to convert the crn to dds in the browser.
++ and CRUNCH should be defined in ~/.emscripten or /etc/emscripten.cfg that points to it. JS crunch
++ decompressing code will be added to convert the crn to dds in the browser.
+ crunch-worker.js will be generated in the current directory. You should include that file when
+ packaging your site.
+ DDS files will not be crunched if the .crn is more recent than the .dds. This prevents a lot of
+--- a/tools/scons/site_scons/site_tools/emscripten/emscripten.py
++++ b/tools/scons/site_scons/site_tools/emscripten/emscripten.py
+@@ -10,6 +10,8 @@
+ EM_CONFIG = os.environ.get('EM_CONFIG')
+ if not EM_CONFIG:
+ EM_CONFIG = os.path.expanduser('~/.emscripten')
++ if not os.path.exists(EM_CONFIG) and os.path.exists('/etc/emscripten.cfg'):
++ EM_CONFIG = '/etc/emscripten.cfg'
+
+ if emscripten_path is None:
+
+--- a/tools/shared.py
++++ b/tools/shared.py
+@@ -209,7 +209,10 @@
+ EM_CONFIG = EM_CONFIG.replace(';', '\n') + '\n'
+
+ if not EM_CONFIG:
+- EM_CONFIG = '~/.emscripten'
++ if not os.path.exists(os.path.expanduser('~/.emscripten')) and os.path.exists('/etc/emscripten.cfg'):
++ EM_CONFIG = '/etc/emscripten.cfg'
++ else:
++ EM_CONFIG = '~/.emscripten'
+ if '\n' in EM_CONFIG:
+ CONFIG_FILE = None
+ logging.debug('EM_CONFIG is specified inline without a file')
+@@ -271,7 +274,7 @@
+ # without a file, this hints to "default" location at ~/.emscripten)
+ def hint_config_file_location():
+ if CONFIG_FILE: return CONFIG_FILE
+- else: return '~/.emscripten'
++ else: return '~/.emscripten' if os.path.exists(os.path.expanduser('~/.emscripten')) else '/etc/emscripten.cfg'
+
+ def listify(x):
+ if type(x) is not list: return [x]
+@@ -515,6 +515,8 @@
+ sanity_file = CONFIG_FILE + '_sanity'
+ if get_llvm_target() == WASM_TARGET:
+ sanity_file += '_wasm'
++ if not os.access(os.path.dirname(sanity_file), os.W_OK):
++ sanity_file = os.path.join('/var/tmp', os.path.basename(sanity_file))
+ if os.path.exists(sanity_file):
+ try:
+ sanity_mtime = os.stat(sanity_file).st_mtime
+@@ -580,7 +580,8 @@
+
+ if not force:
+ # Only create/update this file if the sanity check succeeded, i.e., we got here
+- f = open(sanity_file, 'w')
++ f = open(sanity_file, 'w+')
+ f.write(generate_sanity())
++ os.chmod(sanity_file, 0o666)
+ f.close()
+
diff --git a/testing/emscripten/emscripten.cfg b/testing/emscripten/emscripten.cfg
new file mode 100644
index 0000000000..495334a771
--- /dev/null
+++ b/testing/emscripten/emscripten.cfg
@@ -0,0 +1,17 @@
+import os
+
+EMSCRIPTEN_ROOT = '/usr/share/emscripten'
+LLVM_ROOT = '/usr/lib/emscripten-fastcomp/bin'
+BINARYEN_ROOT = os.getenv('BINARYEN', '')
+
+CLOSURE_COMPILER = os.getenv('CLOSURE', '/usr/bin/closure-compiler')
+CRUNCH = os.getenv('CRUNCH', 'crunch')
+EMSCRIPTEN_NATIVE_OPTIMIZER = '/usr/bin/emoptimizer'
+JAVA = os.path.join(os.getenv('JAVA_HOME', '/usr/lib/jvm/default-jvm'), 'bin/java')
+NODE_JS = os.getenv('NODE', 'node')
+PYTHON = '/usr/bin/python2'
+
+TEMP_DIR = '/tmp'
+
+COMPILER_ENGINE = NODE_JS
+JS_ENGINES = [NODE_JS]
diff --git a/testing/emscripten/fix-python-shebang.patch b/testing/emscripten/fix-python-shebang.patch
new file mode 100644
index 0000000000..4cb0c3d6a8
--- /dev/null
+++ b/testing/emscripten/fix-python-shebang.patch
@@ -0,0 +1,104 @@
+--- a/em++
++++ b/em++
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # This script should work in python 2 *or* 3. It loads emcc.py, which needs python 2.
+ # It also tells emcc.py that we want C++ and not C by default
+--- a/em++.py
++++ b/em++.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # This script should work in python 2 *or* 3. It loads emcc.py, which needs python 2.
+ # It also tells emcc.py that we want C++ and not C by default
+--- a/emar
++++ b/emar
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # This script should work in python 2 *or* 3. It loads emar.py, which needs python 2.
+
+--- a/emcc
++++ b/emcc
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # This script should work in python 2 *or* 3. It loads emcc.py, which needs python 2.
+
+--- a/emcmake
++++ b/emcmake
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # This script should work in python 2 *or* 3. It loads emcmake.py, which needs python 2.
+
+--- a/emconfigure
++++ b/emconfigure
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # This script should work in python 2 *or* 3. It loads emconfigure.py, which needs python 2.
+
+--- a/emmake
++++ b/emmake
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # This script should work in python 2 *or* 3. It loads emmake.py, which needs python 2.
+
+--- a/emranlib
++++ b/emranlib
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ '''
+ emcc - ranlib helper script
+--- a/emrun
++++ b/emrun
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ # emrun: Implements machinery that allows running a .html page as if it was a standard executable file.
+ # Usage: emrun <options> filename.html <args to program>
+--- a/system/bin/sdl-config
++++ b/system/bin/sdl-config
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ from __future__ import print_function
+ import sys
+--- a/system/bin/sdl2-config
++++ b/system/bin/sdl2-config
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ from __future__ import print_function
+ import sys
+--- a/tools/emprofile.py
++++ b/tools/emprofile.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ import sys, shutil, os, json, tempfile, time
+
+--- a/tools/ffdb.py
++++ b/tools/ffdb.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2
+
+ import socket, json, sys, uuid, datetime, time, logging, cgi, zipfile, os, tempfile, atexit, subprocess, re, base64, struct, imghdr
+
diff --git a/testing/emscripten/move-emcc-txt.patch b/testing/emscripten/move-emcc-txt.patch
new file mode 100644
index 0000000000..8875288310
--- /dev/null
+++ b/testing/emscripten/move-emcc-txt.patch
@@ -0,0 +1,12 @@
+emcc.txt is read from emcc.py for --help. Move it to more reasonable location.
+--- a/emcc.py
++++ b/emcc.py
+@@ -153,7 +153,7 @@
+
+ emcc: supported targets: llvm bitcode, javascript, NOT elf
+ (autoconf likes to see elf above to enable shared object support)
+-''' % (open(shared.path_from_root('site', 'build', 'text', 'docs', 'tools_reference', 'emcc.txt')).read())
++''' % (open(shared.path_from_root('emcc.txt')).read())
+ exit(0)
+
+ elif sys.argv[1] == '--version':
diff --git a/testing/emscripten/settings_template-paths.patch b/testing/emscripten/settings_template-paths.patch
new file mode 100644
index 0000000000..2407f23e3a
--- /dev/null
+++ b/testing/emscripten/settings_template-paths.patch
@@ -0,0 +1,36 @@
+--- a/tools/settings_template_readonly.py
++++ b/tools/settings_template_readonly.py
+@@ -7,19 +7,18 @@
+ import os
+
+ # this helps projects using emscripten find it
+-EMSCRIPTEN_ROOT = os.path.expanduser(os.getenv('EMSCRIPTEN') or '{{{ EMSCRIPTEN_ROOT }}}') # directory
+-LLVM_ROOT = os.path.expanduser(os.getenv('LLVM') or '{{{ LLVM_ROOT }}}') # directory
++EMSCRIPTEN_ROOT = os.path.expanduser(os.getenv('EMSCRIPTEN') or '/usr/share/emscripten') # directory
++LLVM_ROOT = os.path.expanduser(os.getenv('LLVM') or '/usr/lib/emscripten-fastcomp/bin') # directory
+ BINARYEN_ROOT = os.path.expanduser(os.getenv('BINARYEN') or '{{{ BINARYEN_ROOT }}}') # directory
+
+ # If not specified, defaults to sys.executable.
+-#PYTHON = 'python'
++PYTHON = 'python2'
+
+-# Add this if you have manually built the JS optimizer executable (in Emscripten/tools/optimizer) and want to run it from a custom location.
+ # Alternatively, you can set this as the environment variable EMSCRIPTEN_NATIVE_OPTIMIZER.
+-# EMSCRIPTEN_NATIVE_OPTIMIZER='/path/to/custom/optimizer(.exe)'
++EMSCRIPTEN_NATIVE_OPTIMIZER='/usr/bin/emoptimizer'
+
+ # See below for notes on which JS engine(s) you need
+-NODE_JS = os.path.expanduser(os.getenv('NODE') or '{{{ NODE }}}') # executable
++NODE_JS = os.path.expanduser(os.getenv('NODE') or '/usr/bin/node') # executable
+ SPIDERMONKEY_ENGINE = [os.path.expanduser(os.getenv('SPIDERMONKEY') or 'js')] # executable
+ V8_ENGINE = os.path.expanduser(os.getenv('V8') or 'd8') # executable
+
+@@ -29,7 +28,7 @@
+
+ CRUNCH = os.path.expanduser(os.getenv('CRUNCH') or 'crunch') # executable
+
+-#CLOSURE_COMPILER = '..' # define this to not use the bundled version
++CLOSURE_COMPILER = '/usr/bin/closure-compiler' # define this to not use the bundled version
+
+ ########################################################################################################
+