UNIXwork

LLVM-Bitcode mit GraalVM nutzen

20. April 2018

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