Skip to content

Frontrider/JWebAssembly

 
 

Repository files navigation

JWebAssembly

Build Status License Coverage Status

JWebAssembly is a Java to WebAssembly compiler. It uses Java class files as input. That it can compile any language that compile to Java bytecode. As output it generates the binary format (.wasm file) or the text format (.wat file).

Status of the project

Finished Components

  • Java byte code parser
  • test framework
  • Public API of the Compiler
  • Gradle Plugin

Partially Finished

  • Binary format file writer (145 of 201 byte code instructions)
  • Text format file writer (145 of 201 byte code instructions)

Open Features

  • Support for native methods #2
  • Exception handling - required the next version of WebAssembly
  • Multiple threads - required the next version of WebAssembly
  • Memory Management - required the next version of WebAssembly with GC

Required Java Version

JWebAssembly requires Java SE 8 or higher. It is tested with Java SE 8 on travis-ci.org.

Usage

Exporting functions

To export a Java function to make it accessible from JavaScript you need add the annotation de.inetsoftware.jwebassembly.api.annotation.Export.

import de.inetsoftware.jwebassembly.api.annotation.Export;

@Export
public static int add( int a, int b ) {
    return a + b;
}

importing functions

To import a JavaScript function to make it accessible from Java you need add the annotation de.inetsoftware.jwebassembly.api.annotation.Import. The method can be declared native or can have a Java implementation which will be ignored on compiling.

import de.inetsoftware.jwebassembly.api.annotation.Import;

@Import( module = "global.Math", name = "max" )
static int max( int a, int b) {
    return Math.max( a, b );
}

Java Limits

In version 1 of WebAssembly you can only compile:

  • static methods
  • use the data types int, long float and double

Alternatives

For Tool Developer

If you want to develop some tools like plugins for a build system or an IDE, then you need

About

Java to WebAssembly compiler

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 99.1%
  • Other 0.9%