Bug 43: Add TeaVM support to Open Eggbert
This commit is contained in:
parent
916002bd1f
commit
3cfbd07654
@ -18,6 +18,7 @@ This project was generated with a template including simple application launcher
|
|||||||
- `lwjgl3`: Primary desktop platform using LWJGL3.
|
- `lwjgl3`: Primary desktop platform using LWJGL3.
|
||||||
- `android`: Android mobile platform. Needs Android SDK.
|
- `android`: Android mobile platform. Needs Android SDK.
|
||||||
- `html`: Web platform using GWT and WebGL. Supports only Java projects.
|
- `html`: Web platform using GWT and WebGL. Supports only Java projects.
|
||||||
|
- `teavm`: Experimental web platform using TeaVM and WebGL.
|
||||||
|
|
||||||
## Gradle
|
## Gradle
|
||||||
|
|
||||||
@ -40,6 +41,8 @@ Useful Gradle tasks and flags:
|
|||||||
- `idea`: generates IntelliJ project data.
|
- `idea`: generates IntelliJ project data.
|
||||||
- `lwjgl3:jar`: builds application's runnable jar, which can be found at `lwjgl3/build/lib`.
|
- `lwjgl3:jar`: builds application's runnable jar, which can be found at `lwjgl3/build/lib`.
|
||||||
- `lwjgl3:run`: starts the application.
|
- `lwjgl3:run`: starts the application.
|
||||||
|
- `teavm:build`: builds the JavaScript application into the build/dist/webapp folder.
|
||||||
|
- `teavm:run`: serves the JavaScript application at http://localhost:8080 via a local Jetty server.
|
||||||
- `test`: runs unit tests (if any).
|
- `test`: runs unit tests (if any).
|
||||||
|
|
||||||
Note that most tasks that are not specific to a single project can be run with `name:` prefix, where the `name` should be replaced with the ID of a specific project.
|
Note that most tasks that are not specific to a single project can be run with `name:` prefix, where the `name` should be replaced with the ID of a specific project.
|
||||||
|
@ -70,6 +70,7 @@ subprojects {
|
|||||||
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
|
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
|
||||||
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' }
|
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' }
|
||||||
maven { url 'https://jitpack.io' }
|
maven { url 'https://jitpack.io' }
|
||||||
|
maven { url 'https://teavm.org/maven/repository/' }
|
||||||
|
|
||||||
maven { url 'https://repo.openeggbert.com' }
|
maven { url 'https://repo.openeggbert.com' }
|
||||||
maven { url 'https://repo.openeggbert.com/releases/' }
|
maven { url 'https://repo.openeggbert.com/releases/' }
|
||||||
|
@ -19,4 +19,7 @@ gwtFrameworkVersion=2.11.0
|
|||||||
gwtPluginVersion=1.1.29
|
gwtPluginVersion=1.1.29
|
||||||
gdxVersion=1.12.1
|
gdxVersion=1.12.1
|
||||||
pixelVersion=0.0.0-SNAPSHOT
|
pixelVersion=0.0.0-SNAPSHOT
|
||||||
|
gdxTeaVMVersion=1.0.3
|
||||||
|
teaVMVersion=0.10.2
|
||||||
netbeans.hint.jdkPlatform=JDK_17
|
netbeans.hint.jdkPlatform=JDK_17
|
||||||
|
shapeDrawerVersion=2.6.0
|
||||||
|
@ -21,12 +21,12 @@ package com.openeggbert.lwjgl3.debugging;
|
|||||||
|
|
||||||
import com.pixelgamelibrary.api.Pixel;
|
import com.pixelgamelibrary.api.Pixel;
|
||||||
import com.pixelgamelibrary.backend.libgdx.PixelBackendLibGDX;
|
import com.pixelgamelibrary.backend.libgdx.PixelBackendLibGDX;
|
||||||
import com.pixelgamelibrary.backend.libgdx.assets.AssetsTxt;
|
import com.pixelgamelibrary.api.utils.AssetsTxt;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*f
|
||||||
* @author robertvokac
|
* @author robertvokac
|
||||||
*/
|
*/
|
||||||
public class DebuggingAssetsTxt {
|
public class DebuggingAssetsTxt {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// A list of which subprojects to load as part of the same larger project.
|
// A list of which subprojects to load as part of the same larger project.
|
||||||
// You can remove Strings from the list and reload the Gradle project
|
// You can remove Strings from the list and reload the Gradle project
|
||||||
// if you want to temporarily disable a subproject.
|
// if you want to temporarily disable a subproject.
|
||||||
include 'lwjgl3', 'android', 'html', 'core'
|
include 'lwjgl3', 'android', 'html', 'teavm', 'core'
|
||||||
|
47
teavm/build.gradle
Normal file
47
teavm/build.gradle
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
plugins {
|
||||||
|
id 'java'
|
||||||
|
id 'org.gretty' version '3.1.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
gretty {
|
||||||
|
contextPath = '/'
|
||||||
|
extraResourceBase 'build/dist/webapp'
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets.main.resources.srcDirs += [ rootProject.file('assets').path ]
|
||||||
|
project.ext.mainClassName = 'com.openeggbert.teavm.TeaVMBuilder'
|
||||||
|
eclipse.project.name = appName + '-teavm'
|
||||||
|
|
||||||
|
// This must be at least 11, and no higher than the JDK version this project is built with.
|
||||||
|
java.targetCompatibility = "11"
|
||||||
|
// This should probably be equal to targetCompatibility, above. This only affects the TeaVM module.
|
||||||
|
java.sourceCompatibility = "11"
|
||||||
|
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation "com.github.xpenatan.gdx-teavm:backend-teavm:$gdxTeaVMVersion"
|
||||||
|
implementation "org.teavm:teavm-classlib:$teaVMVersion"
|
||||||
|
implementation "org.teavm:teavm-core:$teaVMVersion"
|
||||||
|
implementation "org.teavm:teavm-jso-apis:$teaVMVersion"
|
||||||
|
implementation "org.teavm:teavm-jso-impl:$teaVMVersion"
|
||||||
|
implementation "org.teavm:teavm-jso:$teaVMVersion"
|
||||||
|
implementation "org.teavm:teavm-tooling:$teaVMVersion"
|
||||||
|
implementation project(':core')
|
||||||
|
implementation "com.pixelgamelibrary:pixel:$pixelVersion:sources"
|
||||||
|
api "com.pixelgamelibrary:pixel-backend-libgdx:$pixelVersion"
|
||||||
|
implementation "com.pixelgamelibrary:pixel-backend-libgdx:$pixelVersion:sources"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register('buildJavaScript', JavaExec) {
|
||||||
|
dependsOn classes
|
||||||
|
setDescription("Transpile bytecode to JavaScript via TeaVM")
|
||||||
|
mainClass.set(project.mainClassName)
|
||||||
|
setClasspath(sourceSets.main.runtimeClasspath)
|
||||||
|
}
|
||||||
|
build.dependsOn buildJavaScript
|
||||||
|
|
||||||
|
tasks.register("run") {
|
||||||
|
description = "Run the JavaScript application hosted via a local Jetty server at http://localhost:8080/"
|
||||||
|
dependsOn(buildJavaScript, tasks.named("jettyRun"))
|
||||||
|
}
|
35
teavm/src/main/java/com/openeggbert/teavm/TeaVMBuilder.java
Normal file
35
teavm/src/main/java/com/openeggbert/teavm/TeaVMBuilder.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package com.openeggbert.teavm;
|
||||||
|
|
||||||
|
import com.github.xpenatan.gdx.backends.teavm.config.AssetFileHandle;
|
||||||
|
import com.github.xpenatan.gdx.backends.teavm.config.TeaBuildConfiguration;
|
||||||
|
import com.github.xpenatan.gdx.backends.teavm.config.TeaBuilder;
|
||||||
|
import com.github.xpenatan.gdx.backends.teavm.config.plugins.TeaReflectionSupplier;
|
||||||
|
import com.github.xpenatan.gdx.backends.teavm.gen.SkipClass;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import org.teavm.tooling.TeaVMTool;
|
||||||
|
import org.teavm.vm.TeaVMOptimizationLevel;
|
||||||
|
|
||||||
|
/** Builds the TeaVM/HTML application. */
|
||||||
|
@SkipClass
|
||||||
|
public class TeaVMBuilder {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
TeaBuildConfiguration teaBuildConfiguration = new TeaBuildConfiguration();
|
||||||
|
teaBuildConfiguration.assetsPath.add(new AssetFileHandle("../assets"));
|
||||||
|
teaBuildConfiguration.webappPath = new File("build/dist").getCanonicalPath();
|
||||||
|
|
||||||
|
// Register any extra classpath assets here:
|
||||||
|
// teaBuildConfiguration.additionalAssetsClasspathFiles.add("com/openeggbert/asset.extension");
|
||||||
|
|
||||||
|
// Register any classes or packages that require reflection here:
|
||||||
|
// TeaReflectionSupplier.addReflectionClass("com.openeggbert.reflect");
|
||||||
|
|
||||||
|
TeaVMTool tool = TeaBuilder.config(teaBuildConfiguration);
|
||||||
|
tool.setMainClass(TeaVMLauncher.class.getName());
|
||||||
|
// For many (or most) applications, using the highest optimization won't add much to build time.
|
||||||
|
// If your builds take too long, and runtime performance doesn't matter, you can change FULL to SIMPLE .
|
||||||
|
tool.setOptimizationLevel(TeaVMOptimizationLevel.FULL);
|
||||||
|
tool.setObfuscated(true);
|
||||||
|
TeaBuilder.build(tool);
|
||||||
|
}
|
||||||
|
}
|
28
teavm/src/main/java/com/openeggbert/teavm/TeaVMLauncher.java
Normal file
28
teavm/src/main/java/com/openeggbert/teavm/TeaVMLauncher.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package com.openeggbert.teavm;
|
||||||
|
|
||||||
|
import com.github.xpenatan.gdx.backends.teavm.TeaApplicationConfiguration;
|
||||||
|
import com.github.xpenatan.gdx.backends.teavm.TeaApplication;
|
||||||
|
import com.openeggbert.core.main.OpenEggbertApplication;
|
||||||
|
import com.pixelgamelibrary.api.Pixel;
|
||||||
|
import com.pixelgamelibrary.backend.libgdx.PixelBackendLibGDX;
|
||||||
|
import com.pixelgamelibrary.backend.libgdx.game.LibGdxGame;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Launches the TeaVM/HTML application.
|
||||||
|
*/
|
||||||
|
public class TeaVMLauncher {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TeaApplicationConfiguration config = new TeaApplicationConfiguration("canvas");
|
||||||
|
//// If width and height are each greater than 0, then the app will use a fixed size.
|
||||||
|
//config.width = 640;
|
||||||
|
//config.height = 480;
|
||||||
|
//// If width and height are both 0, then the app will use all available space.
|
||||||
|
//config.width = 0;
|
||||||
|
//config.height = 0;
|
||||||
|
//// If width and height are both -1, then the app will fill the canvas size.
|
||||||
|
config.width = -1;
|
||||||
|
config.height = -1;
|
||||||
|
if(!Pixel.isBackendSet()) {Pixel.initBackend(new PixelBackendLibGDX());}
|
||||||
|
TeaApplication application = new TeaApplication(new LibGdxGame(new OpenEggbertApplication().createGame()), config);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user