JWebAssembly/README.md

76 lines
3.1 KiB
Markdown
Raw Normal View History

2017-03-19 11:54:29 +01:00
JWebAssembly
======
2017-03-20 22:07:39 +01:00
[![Build Status](https://travis-ci.org/i-net-software/JWebAssembly.svg)](https://travis-ci.org/i-net-software/JWebAssembly)
2017-03-20 20:19:47 +01:00
[![License](https://img.shields.io/github/license/i-net-software/jwebassembly.svg)](https://github.com/i-net-software/jwebassembly/blob/master/LICENSE.txt)
2018-05-20 12:51:03 +02:00
[![Coverage Status](https://coveralls.io/repos/github/i-net-software/JWebAssembly/badge.svg?branch=master)](https://coveralls.io/github/i-net-software/JWebAssembly?branch=master)
2017-03-19 11:54:29 +01:00
2018-05-06 11:39:50 +02:00
JWebAssembly is a Java to [WebAssembly](http://webassembly.org/) 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).
2017-03-19 11:54:29 +01:00
Status of the project
----
2018-03-28 20:09:35 +02:00
### Finished Components
* Java byte code parser
* test framework
* Public API of the Compiler
### Partially Finished
* Binary format file writer (145 of 201 byte code instructions)
* Text format file writer (145 of 201 byte code instructions)
2018-03-31 19:26:22 +02:00
### Open Features
2018-08-11 16:29:16 +02:00
* Support for native methods [#2](https://github.com/i-net-software/JWebAssembly/issues/2)
2018-03-31 19:26:22 +02:00
* Exception handling - required the next version of WebAssembly
* Multiple threads - required the next version of WebAssembly
* Memory Management - required the next version of WebAssembly
* Gradle plugin to easy integrate it in the build process
* Eclipse build command to see compiler errors in in the IDE.
2017-03-19 11:54:29 +01:00
Required Java Version
----
JWebAssembly requires Java SE 8 or higher. It is tested with Java SE 8 on [travis-ci.org](https://travis-ci.org/i-net-software/jwebassembly).
2017-04-11 21:40:53 +02:00
## Usage
2017-03-19 11:54:29 +01:00
2017-04-11 21:40:53 +02:00
### Exporting functions
2018-07-09 17:16:57 +02:00
To export a Java function to make it accessible from JavaScript you need add the annotation de.inetsoftware.jwebassembly.api.annotation.Export.
2017-04-11 21:40:53 +02:00
```java
2018-07-09 17:16:57 +02:00
import de.inetsoftware.jwebassembly.api.annotation.Export;
2017-04-11 21:40:53 +02:00
@Export
public static int add( int a, int b ) {
return a + b;
}
```
2018-07-09 17:16:57 +02:00
### 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.
```java
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 );
}
```
2017-04-11 21:40:53 +02:00
### Java Limits
2017-04-14 11:06:57 +02:00
In version 1 of WebAssembly you can only compile:
2017-04-11 21:40:53 +02:00
* static methods
* use the data types int, long float and double
2017-04-14 11:06:57 +02:00
### Alternatives
* [TeaVM](https://github.com/konsoletyper/teavm)
2018-05-06 11:39:50 +02:00
## For Tool Developer
If you want to develop some tools like plugins for a build system or an IDE, then you need
* to include the full contents of the packages [de.inetsoftware.jwebassembly](https://github.com/i-net-software/JWebAssembly/tree/master/src/de/inetsoftware/jwebassembly) and [de.inetsoftware.classparser](https://github.com/i-net-software/JWebAssembly/tree/master/src/de/inetsoftware/classparser) and its subpackages.
* Create an instance of [de.inetsoftware.jwebassembly.JWebAssembly](https://github.com/i-net-software/JWebAssembly/blob/master/src/de/inetsoftware/jwebassembly/JWebAssembly.java) class and use its API.