After installing some basic dependencies via
$ sudo yum install vala clang jsand a bit of glue (see below) and you can quickly run code written in vala using a JavaScript interpreter. All this can be done with all code clang compiles, so there is no more magic than normal involved.
$ cd /tmp $ git clone https://github.com/kripken/emscripten.git $ wget http://closure-compiler.googlecode.com/files/compiler-latest.zip $ unzip compiler-latest.zip
Now that all software is in place, do some configurations by editing
~/.emscripten:
$ cat <<EOF ~/.emscripten
# path where you cloned emscripten
EMSCRIPTEN_ROOT=os.path.expanduser("~/tmp/emscripten")
# I needed to link EMSCRIPTEN_ROOT/src/tmp to this path e.g.
TEMP_DIR='/tmp'
LLVM_ROOT=os.path.expanduser('/usr/bin/')
#LLVM_GCC=... # we don't have that on fedora
COMPILER_OPTS = ['-m64'] # Change to your arch!
SPIDERMONKEY_ENGINE = [os.path.expanduser('/usr/bin/js'), '-m']
COMPILER_ENGINE=SPIDERMONKEY_ENGINE
JS_ENGINE=SPIDERMONKEY_ENGINE
CLOSURE_COMPILER = os.path.expanduser('~/tmp/emscripten/closure-compiler.jar')
TIMEOUT=None
EOF
Basically now everything is in place. Using the following snippet
struct FooBar
{
int m;
public void wtf ()
{
stdout.printf ("Wtf!\n"); // The \n is important.
}
}
void main()
{
FooBar f = FooBar ();
f.wtf ();
}
... we can compile and execute the whoole thing using the following lines:
$ valac --profile=posix --ccode vaem.vala $ clang -emit-llvm -S -o vaem.ll vaem.c $ ./emscripten.py va/vaem.ll -o vaem.js $ js -m vaem.js Wtf! $
We need to use the posix profile, otherwise we need to compile the whole glib/gobject system using emscripten. Another way of creating JavaScript from vala code is using maja.
No comments:
Post a Comment