UNIXwork

LLVM-Bitcode mit GraalVM nutzen

2018-04-20 00:05:00.0

Neben Java bzw JVM-Bytecode unterstützt GraalVM auch die Ausführung von LLVM-Bitcode.

$ cat > test.c
#include <stdio.h>

int main(void) {
    printf("Hello World!\n");
    return 0;
}
$ clang -c -emit-llvm test.c
$ $GRAALVM/bin/lli test.bc
Hello World!

Schon mal interessant, lustig wird es aber erst, wenn man dies mit Java kombiniert. Mit der Polyglot-API kann die Bitcode-Datei geladen, und einzelne Funktionen daraus ausgeführt werden.

import org.graalvm.polyglot.*;
import java.io.*;

public class HelloPolyglot {
    public static void main(String[] args) {
        try {
            // create a polyglot context that can access the native interface
            Context ctx = Context.newBuilder().allowAllAccess(true).build();

            // load an llvm bitcode file
            File file = new File("test.bc");
            Source source = Source.newBuilder("llvm", file).build();
            Value c = ctx.eval(source);

            // get the main function and execute it
            c.getMember("main").execute();


        } catch (IOException e) {
            System.err.println(e);
        }
    }
}

Ich hab auch ein etwas größeres Beispielprogramm.

Links:

Autor: Olaf | 0 Kommentare | Tags: graalvm, llvm, java

Kommentare


Name
Webseite (optional)
Captcha: 3x=12   x=?
Kommentar