mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 00:04:10 -08:00
wasm gc: improve gradle plugin settings
This commit is contained in:
parent
312d8abee8
commit
1fadc71536
|
@ -50,7 +50,7 @@ val jsOutputPackageDir = jsOutputDir.map { it.dir("org/teavm/backend/wasm") }
|
||||||
val jsInputDir = layout.projectDirectory.dir("src/main/js/wasm-gc-runtime")
|
val jsInputDir = layout.projectDirectory.dir("src/main/js/wasm-gc-runtime")
|
||||||
val jsInput = jsInputDir.file("runtime.js")
|
val jsInput = jsInputDir.file("runtime.js")
|
||||||
|
|
||||||
fun registerRuntimeTasks(taskName: String, wrapperType: String, outputName: String) {
|
fun registerRuntimeTasks(taskName: String, wrapperType: String, outputName: String, module: Boolean) {
|
||||||
val generateTask by tasks.register<DefaultTask>("generate${taskName}Runtime") {
|
val generateTask by tasks.register<DefaultTask>("generate${taskName}Runtime") {
|
||||||
dependsOn(tasks.npmInstall)
|
dependsOn(tasks.npmInstall)
|
||||||
val wrapperFile = jsInputDir.file(wrapperType)
|
val wrapperFile = jsInputDir.file(wrapperType)
|
||||||
|
@ -80,7 +80,9 @@ fun registerRuntimeTasks(taskName: String, wrapperType: String, outputName: Stri
|
||||||
args.addAll(provider {
|
args.addAll(provider {
|
||||||
listOf(
|
listOf(
|
||||||
"--",
|
"--",
|
||||||
"-m", "--module", "--toplevel",
|
"-m", "--toplevel",
|
||||||
|
*(if (module) arrayOf("--module") else emptyArray()),
|
||||||
|
"--mangle", "reserved=['TeaVM']",
|
||||||
inputFiles.singleFile.absolutePath,
|
inputFiles.singleFile.absolutePath,
|
||||||
"-o", outputFile.get().asFile.absolutePath
|
"-o", outputFile.get().asFile.absolutePath
|
||||||
)
|
)
|
||||||
|
@ -93,8 +95,8 @@ fun registerRuntimeTasks(taskName: String, wrapperType: String, outputName: Stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerRuntimeTasks("Simple", "simple-wrapper.js", "wasm-gc-runtime")
|
registerRuntimeTasks("Simple", "simple-wrapper.js", "wasm-gc-runtime", module = false)
|
||||||
registerRuntimeTasks("Module", "module-wrapper.js", "wasm-gc-module-runtime")
|
registerRuntimeTasks("Module", "module-wrapper.js", "wasm-gc-module-runtime", module = true)
|
||||||
|
|
||||||
teavmPublish {
|
teavmPublish {
|
||||||
artifactId = "teavm-core"
|
artifactId = "teavm-core"
|
||||||
|
|
|
@ -371,7 +371,7 @@ public class WasmGCTarget implements TeaVMTarget, TeaVMWasmGCHost {
|
||||||
null, null, debugLines, null, WasmBinaryStatsCollector.EMPTY);
|
null, null, debugLines, null, WasmBinaryStatsCollector.EMPTY);
|
||||||
optimizeIndexes(module);
|
optimizeIndexes(module);
|
||||||
module.prepareForRendering();
|
module.prepareForRendering();
|
||||||
if (debugLocation == WasmDebugInfoLocation.EMBEDDED) {
|
if (debugLocation == WasmDebugInfoLocation.EMBEDDED && debugInfo) {
|
||||||
binaryRenderer.render(module, debugInfoBuilder::build);
|
binaryRenderer.render(module, debugInfoBuilder::build);
|
||||||
} else {
|
} else {
|
||||||
binaryRenderer.render(module);
|
binaryRenderer.render(module);
|
||||||
|
@ -380,7 +380,7 @@ public class WasmGCTarget implements TeaVMTarget, TeaVMWasmGCHost {
|
||||||
try (var output = buildTarget.createResource(outputName)) {
|
try (var output = buildTarget.createResource(outputName)) {
|
||||||
output.write(data);
|
output.write(data);
|
||||||
}
|
}
|
||||||
if (debugLocation == WasmDebugInfoLocation.EXTERNAL) {
|
if (debugLocation == WasmDebugInfoLocation.EXTERNAL && debugInfo) {
|
||||||
var debugInfoData = ExternalDebugFile.write(debugInfoBuilder.build());
|
var debugInfoData = ExternalDebugFile.write(debugInfoBuilder.build());
|
||||||
if (debugInfoData != null) {
|
if (debugInfoData != null) {
|
||||||
try (var output = buildTarget.createResource(outputName + ".teadbg")) {
|
try (var output = buildTarget.createResource(outputName + ".teadbg")) {
|
||||||
|
|
|
@ -54,7 +54,7 @@ teavm {
|
||||||
wasmGC {
|
wasmGC {
|
||||||
addedToWebApp = true
|
addedToWebApp = true
|
||||||
mainClass = "org.teavm.samples.benchmark.teavm.BenchmarkStarter"
|
mainClass = "org.teavm.samples.benchmark.teavm.BenchmarkStarter"
|
||||||
sourceMap = true
|
debugInformation = true
|
||||||
}
|
}
|
||||||
wasm {
|
wasm {
|
||||||
addedToWebApp = true
|
addedToWebApp = true
|
||||||
|
|
|
@ -22,7 +22,11 @@
|
||||||
</head>
|
</head>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function launch() {
|
function launch() {
|
||||||
TeaVM.wasmGC.load("wasm-gc/benchmark.wasm").then(teavm => teavm.exports.main([]));
|
TeaVM.wasmGC.load("wasm-gc/benchmark.wasm", {
|
||||||
|
stackDeobfuscator: {
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
}).then(teavm => teavm.exports.main([]));
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<body onload="launch()">
|
<body onload="launch()">
|
||||||
|
|
|
@ -16,9 +16,10 @@
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
`java-library`
|
`java-library`
|
||||||
|
`teavm-publish`
|
||||||
}
|
}
|
||||||
|
|
||||||
description = "JavaScript deobfuscator"
|
description = "WebAssembly deobfuscator"
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
val teavmCompile = create("teavmCompile")
|
val teavmCompile = create("teavmCompile")
|
||||||
|
@ -42,21 +43,18 @@ val generateWasm by tasks.register<JavaExec>("generateWasm") {
|
||||||
mainClass = "org.teavm.tooling.deobfuscate.wasmgc.Compiler"
|
mainClass = "org.teavm.tooling.deobfuscate.wasmgc.Compiler"
|
||||||
args(
|
args(
|
||||||
"org.teavm.tooling.deobfuscate.wasmgc.DeobfuscatorFactory",
|
"org.teavm.tooling.deobfuscate.wasmgc.DeobfuscatorFactory",
|
||||||
layout.buildDirectory.dir("teavm").get().asFile.absolutePath,
|
layout.buildDirectory.dir("teavm/org/teavm/backend/wasm/").get().asFile.absolutePath,
|
||||||
"deobfuscator.wasm"
|
"deobfuscator.wasm"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val zipWithWasm by tasks.register<Jar>("zipWithWasm") {
|
tasks.withType<Jar> {
|
||||||
dependsOn(generateWasm)
|
dependsOn(generateWasm)
|
||||||
archiveClassifier = "wasm"
|
from(layout.buildDirectory.dir("teavm"))
|
||||||
from(layout.buildDirectory.dir("teavm"), layout.buildDirectory.dir("teavm-lib"))
|
include("**/*.wasm")
|
||||||
include("*.wasm")
|
includeEmptyDirs = false
|
||||||
entryCompression = ZipEntryCompression.DEFLATED
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.assemble.configure {
|
teavmPublish {
|
||||||
dependsOn(zipWithWasm)
|
artifactId = "teavm-wasm-gc-deobfuscator"
|
||||||
}
|
}
|
||||||
|
|
||||||
artifacts.add("wasm", zipWithWasm)
|
|
|
@ -26,6 +26,7 @@ description = "TeaVM Gradle plugin"
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(":core"))
|
implementation(project(":core"))
|
||||||
implementation(project(":tools:core"))
|
implementation(project(":tools:core"))
|
||||||
|
implementation(project(":tools:deobfuscator-wasm-gc"))
|
||||||
}
|
}
|
||||||
|
|
||||||
gradlePlugin {
|
gradlePlugin {
|
||||||
|
|
|
@ -80,7 +80,7 @@ class TeaVMExtensionImpl extends TeaVMBaseExtensionImpl implements TeaVMExtensio
|
||||||
.orElse(OptimizationLevel.BALANCED));
|
.orElse(OptimizationLevel.BALANCED));
|
||||||
js.getSourceFilePolicy().convention(property("js.sourceFilePolicy")
|
js.getSourceFilePolicy().convention(property("js.sourceFilePolicy")
|
||||||
.map(SourceFilePolicy::valueOf)
|
.map(SourceFilePolicy::valueOf)
|
||||||
.orElse(SourceFilePolicy.DO_NOTHING));
|
.orElse(SourceFilePolicy.LINK_LOCAL_FILES));
|
||||||
js.getDevServer().getStackDeobfuscated().convention(property("js.devServer.stackDeobfuscated")
|
js.getDevServer().getStackDeobfuscated().convention(property("js.devServer.stackDeobfuscated")
|
||||||
.map(Boolean::parseBoolean));
|
.map(Boolean::parseBoolean));
|
||||||
js.getDevServer().getIndicator().convention(property("js.devServer.indicator").map(Boolean::parseBoolean));
|
js.getDevServer().getIndicator().convention(property("js.devServer.indicator").map(Boolean::parseBoolean));
|
||||||
|
@ -120,6 +120,11 @@ class TeaVMExtensionImpl extends TeaVMBaseExtensionImpl implements TeaVMExtensio
|
||||||
wasmGC.getDebugInfoLevel().convention(property("wasm-gc.debugInformation.level")
|
wasmGC.getDebugInfoLevel().convention(property("wasm-gc.debugInformation.level")
|
||||||
.map(v -> WasmDebugInfoLevel.valueOf(v.toUpperCase())).orElse(WasmDebugInfoLevel.DEOBFUSCATION));
|
.map(v -> WasmDebugInfoLevel.valueOf(v.toUpperCase())).orElse(WasmDebugInfoLevel.DEOBFUSCATION));
|
||||||
wasmGC.getSourceMap().convention(property("wasm-gc.sourceMap").map(Boolean::parseBoolean).orElse(false));
|
wasmGC.getSourceMap().convention(property("wasm-gc.sourceMap").map(Boolean::parseBoolean).orElse(false));
|
||||||
|
wasmGC.getSourceFilePolicy().convention(property("wasm-gc.sourceFilePolicy")
|
||||||
|
.map(SourceFilePolicy::valueOf)
|
||||||
|
.orElse(SourceFilePolicy.LINK_LOCAL_FILES));
|
||||||
|
wasmGC.getModularRuntime().convention(property("wasm-gc.modularRuntime")
|
||||||
|
.map(Boolean::parseBoolean).orElse(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupWasiDefaults() {
|
private void setupWasiDefaults() {
|
||||||
|
|
|
@ -57,6 +57,7 @@ public class TeaVMPlugin implements Plugin<Project> {
|
||||||
public static final String WASM_TASK_NAME = "generateWasm";
|
public static final String WASM_TASK_NAME = "generateWasm";
|
||||||
public static final String WASI_TASK_NAME = "generateWasi";
|
public static final String WASI_TASK_NAME = "generateWasi";
|
||||||
public static final String WASM_GC_TASK_NAME = "generateWasmGC";
|
public static final String WASM_GC_TASK_NAME = "generateWasmGC";
|
||||||
|
public static final String BUILD_WASM_GC_TASK_NAME = "buildWasmGC";
|
||||||
public static final String WASM_GC_COPY_RUNTIME_TASK_NAME = "copyWasmGCRuntime";
|
public static final String WASM_GC_COPY_RUNTIME_TASK_NAME = "copyWasmGCRuntime";
|
||||||
public static final String WASM_GC_DISASSEMBLY_TASK_NAME = "disasmWasmGC";
|
public static final String WASM_GC_DISASSEMBLY_TASK_NAME = "disasmWasmGC";
|
||||||
public static final String C_TASK_NAME = "generateC";
|
public static final String C_TASK_NAME = "generateC";
|
||||||
|
@ -219,6 +220,9 @@ public class TeaVMPlugin implements Plugin<Project> {
|
||||||
|
|
||||||
private void registerWasmGCTask(Project project, Configuration configuration) {
|
private void registerWasmGCTask(Project project, Configuration configuration) {
|
||||||
var extension = project.getExtensions().getByType(TeaVMExtension.class);
|
var extension = project.getExtensions().getByType(TeaVMExtension.class);
|
||||||
|
var buildTask = project.getTasks().create(BUILD_WASM_GC_TASK_NAME, task -> {
|
||||||
|
task.setGroup(TASK_GROUP);
|
||||||
|
});
|
||||||
project.getTasks().create(WASM_GC_TASK_NAME, GenerateWasmGCTask.class, task -> {
|
project.getTasks().create(WASM_GC_TASK_NAME, GenerateWasmGCTask.class, task -> {
|
||||||
var wasmGC = extension.getWasmGC();
|
var wasmGC = extension.getWasmGC();
|
||||||
applyToTask(wasmGC, task, configuration);
|
applyToTask(wasmGC, task, configuration);
|
||||||
|
@ -226,6 +230,9 @@ public class TeaVMPlugin implements Plugin<Project> {
|
||||||
task.getObfuscated().convention(wasmGC.getObfuscated());
|
task.getObfuscated().convention(wasmGC.getObfuscated());
|
||||||
task.getStrict().convention(wasmGC.getStrict());
|
task.getStrict().convention(wasmGC.getStrict());
|
||||||
task.getSourceMap().convention(wasmGC.getSourceMap());
|
task.getSourceMap().convention(wasmGC.getSourceMap());
|
||||||
|
task.getSourceFilePolicy().convention(wasmGC.getSourceFilePolicy());
|
||||||
|
setupSources(task.getSourceFiles(), project);
|
||||||
|
buildTask.dependsOn(task);
|
||||||
});
|
});
|
||||||
project.getTasks().create(WASM_GC_COPY_RUNTIME_TASK_NAME, CopyWasmGCRuntimeTask.class, task -> {
|
project.getTasks().create(WASM_GC_COPY_RUNTIME_TASK_NAME, CopyWasmGCRuntimeTask.class, task -> {
|
||||||
task.setGroup(TASK_GROUP);
|
task.setGroup(TASK_GROUP);
|
||||||
|
@ -234,6 +241,15 @@ public class TeaVMPlugin implements Plugin<Project> {
|
||||||
task.getOutputFile().convention(extension.getWasmGC().getOutputDir()
|
task.getOutputFile().convention(extension.getWasmGC().getOutputDir()
|
||||||
.flatMap(d -> d.dir(extension.getWasmGC().getRelativePathInOutputDir()))
|
.flatMap(d -> d.dir(extension.getWasmGC().getRelativePathInOutputDir()))
|
||||||
.flatMap(d -> d.file(fileName)));
|
.flatMap(d -> d.file(fileName)));
|
||||||
|
task.getDeobfuscator().convention(extension.getWasmGC().getDebugInformation());
|
||||||
|
var deobfuscatorFileName = extension.getWasmGC().getTargetFileName()
|
||||||
|
.map(x -> x + "-deobfuscator.wasm");
|
||||||
|
task.getDeobfuscatorOutputFile().convention(extension.getWasmGC().getOutputDir()
|
||||||
|
.flatMap(d -> d.dir(extension.getWasmGC().getRelativePathInOutputDir()))
|
||||||
|
.flatMap(d -> d.file(deobfuscatorFileName)));
|
||||||
|
task.getModular().convention(extension.getWasmGC().getModularRuntime());
|
||||||
|
task.getObfuscated().convention(extension.getWasmGC().getObfuscated());
|
||||||
|
buildTask.dependsOn(task);
|
||||||
});
|
});
|
||||||
project.getTasks().create(WASM_GC_DISASSEMBLY_TASK_NAME, DisasmWebAssemblyTask.class, task -> {
|
project.getTasks().create(WASM_GC_DISASSEMBLY_TASK_NAME, DisasmWebAssemblyTask.class, task -> {
|
||||||
task.setGroup(TASK_GROUP);
|
task.setGroup(TASK_GROUP);
|
||||||
|
@ -251,7 +267,9 @@ public class TeaVMPlugin implements Plugin<Project> {
|
||||||
});
|
});
|
||||||
task.getOutputFile().convention(project.getLayout().dir(genTask.getOutputDir())
|
task.getOutputFile().convention(project.getLayout().dir(genTask.getOutputDir())
|
||||||
.flatMap(d -> d.file(fileName)));
|
.flatMap(d -> d.file(fileName)));
|
||||||
|
buildTask.dependsOn(task);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCTask(Project project, Configuration configuration) {
|
private void registerCTask(Project project, Configuration configuration) {
|
||||||
|
@ -301,9 +319,7 @@ public class TeaVMPlugin implements Plugin<Project> {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (wasmGCAddedToWebApp) {
|
if (wasmGCAddedToWebApp) {
|
||||||
task.dependsOn(project.getTasks().named(WASM_GC_TASK_NAME));
|
task.dependsOn(project.getTasks().named(BUILD_WASM_GC_TASK_NAME));
|
||||||
task.dependsOn(project.getTasks().named(WASM_GC_COPY_RUNTIME_TASK_NAME));
|
|
||||||
task.dependsOn(project.getTasks().named(WASM_GC_DISASSEMBLY_TASK_NAME));
|
|
||||||
var outDir = extension.getWasmGC().getOutputDir();
|
var outDir = extension.getWasmGC().getOutputDir();
|
||||||
var relPath = extension.getWasmGC().getRelativePathInOutputDir();
|
var relPath = extension.getWasmGC().getRelativePathInOutputDir();
|
||||||
task.with(project.copySpec(spec -> {
|
task.with(project.copySpec(spec -> {
|
||||||
|
|
|
@ -33,4 +33,8 @@ public interface TeaVMWasmGCConfiguration extends TeaVMCommonConfiguration, TeaV
|
||||||
Property<WasmDebugInfoLevel> getDebugInfoLevel();
|
Property<WasmDebugInfoLevel> getDebugInfoLevel();
|
||||||
|
|
||||||
Property<Boolean> getSourceMap();
|
Property<Boolean> getSourceMap();
|
||||||
|
|
||||||
|
Property<SourceFilePolicy> getSourceFilePolicy();
|
||||||
|
|
||||||
|
Property<Boolean> getModularRuntime();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,20 +20,56 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
import org.gradle.api.DefaultTask;
|
import org.gradle.api.DefaultTask;
|
||||||
import org.gradle.api.file.RegularFileProperty;
|
import org.gradle.api.file.RegularFileProperty;
|
||||||
|
import org.gradle.api.provider.Property;
|
||||||
|
import org.gradle.api.tasks.Input;
|
||||||
import org.gradle.api.tasks.OutputFile;
|
import org.gradle.api.tasks.OutputFile;
|
||||||
import org.gradle.api.tasks.TaskAction;
|
import org.gradle.api.tasks.TaskAction;
|
||||||
|
|
||||||
public abstract class CopyWasmGCRuntimeTask extends DefaultTask {
|
public abstract class CopyWasmGCRuntimeTask extends DefaultTask {
|
||||||
|
public CopyWasmGCRuntimeTask() {
|
||||||
|
getModular().convention(false);
|
||||||
|
getObfuscated().convention(true);
|
||||||
|
getDeobfuscator().convention(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Input
|
||||||
|
public abstract Property<Boolean> getModular();
|
||||||
|
|
||||||
|
@Input
|
||||||
|
public abstract Property<Boolean> getObfuscated();
|
||||||
|
|
||||||
@OutputFile
|
@OutputFile
|
||||||
public abstract RegularFileProperty getOutputFile();
|
public abstract RegularFileProperty getOutputFile();
|
||||||
|
|
||||||
|
@Input
|
||||||
|
public abstract Property<Boolean> getDeobfuscator();
|
||||||
|
|
||||||
|
@OutputFile
|
||||||
|
public abstract RegularFileProperty getDeobfuscatorOutputFile();
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
public void copyRuntime() throws IOException {
|
public void copyRuntime() throws IOException {
|
||||||
var resourceName = "org/teavm/backend/wasm/wasm-gc-runtime.min.js";
|
var name = new StringBuilder("wasm-gc");
|
||||||
|
if (getModular().get()) {
|
||||||
|
name.append("-modular");
|
||||||
|
}
|
||||||
|
name.append("-runtime");
|
||||||
|
if (getObfuscated().get()) {
|
||||||
|
name.append(".min");
|
||||||
|
}
|
||||||
|
var resourceName = "org/teavm/backend/wasm/" + name + ".js";
|
||||||
var classLoader = CopyWasmGCRuntimeTask.class.getClassLoader();
|
var classLoader = CopyWasmGCRuntimeTask.class.getClassLoader();
|
||||||
var output = getOutputFile().get().getAsFile();
|
var output = getOutputFile().get().getAsFile();
|
||||||
try (var input = classLoader.getResourceAsStream(resourceName)) {
|
try (var input = classLoader.getResourceAsStream(resourceName)) {
|
||||||
Files.copy(input, output.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(input, output.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getDeobfuscator().get()) {
|
||||||
|
resourceName = "org/teavm/backend/wasm/deobfuscator.wasm";
|
||||||
|
output = getDeobfuscatorOutputFile().get().getAsFile();
|
||||||
|
try (var input = classLoader.getResourceAsStream(resourceName)) {
|
||||||
|
Files.copy(input, output.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import org.gradle.api.tasks.InputFiles;
|
||||||
import org.gradle.api.tasks.Optional;
|
import org.gradle.api.tasks.Optional;
|
||||||
import org.teavm.gradle.api.JSModuleType;
|
import org.teavm.gradle.api.JSModuleType;
|
||||||
import org.teavm.gradle.api.SourceFilePolicy;
|
import org.teavm.gradle.api.SourceFilePolicy;
|
||||||
import org.teavm.tooling.TeaVMSourceFilePolicy;
|
|
||||||
import org.teavm.tooling.TeaVMTargetType;
|
import org.teavm.tooling.TeaVMTargetType;
|
||||||
import org.teavm.tooling.builder.BuildStrategy;
|
import org.teavm.tooling.builder.BuildStrategy;
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ public abstract class GenerateJavaScriptTask extends TeaVMTask {
|
||||||
getStrict().convention(false);
|
getStrict().convention(false);
|
||||||
getModuleType().convention(JSModuleType.UMD);
|
getModuleType().convention(JSModuleType.UMD);
|
||||||
getSourceMap().convention(false);
|
getSourceMap().convention(false);
|
||||||
getSourceFilePolicy().convention(SourceFilePolicy.DO_NOTHING);
|
getSourceFilePolicy().convention(SourceFilePolicy.LINK_LOCAL_FILES);
|
||||||
getEntryPointName().convention("main");
|
getEntryPointName().convention("main");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,25 +90,7 @@ public abstract class GenerateJavaScriptTask extends TeaVMTask {
|
||||||
}
|
}
|
||||||
builder.setSourceMapsFileGenerated(getSourceMap().get());
|
builder.setSourceMapsFileGenerated(getSourceMap().get());
|
||||||
builder.setEntryPointName(getEntryPointName().get());
|
builder.setEntryPointName(getEntryPointName().get());
|
||||||
for (var file : getSourceFiles()) {
|
TaskUtils.applySourceFiles(getSourceFiles(), builder);
|
||||||
if (file.isFile()) {
|
TaskUtils.applySourceFilePolicy(getSourceFilePolicy(), builder);
|
||||||
if (file.getName().endsWith(".jar") || file.getName().endsWith(".zip")) {
|
|
||||||
builder.addSourcesJar(file.getAbsolutePath());
|
|
||||||
}
|
|
||||||
} else if (file.isDirectory()) {
|
|
||||||
builder.addSourcesDirectory(file.getAbsolutePath());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch (getSourceFilePolicy().get()) {
|
|
||||||
case DO_NOTHING:
|
|
||||||
builder.setSourceFilePolicy(TeaVMSourceFilePolicy.DO_NOTHING);
|
|
||||||
break;
|
|
||||||
case COPY:
|
|
||||||
builder.setSourceFilePolicy(TeaVMSourceFilePolicy.COPY);
|
|
||||||
break;
|
|
||||||
case LINK_LOCAL_FILES:
|
|
||||||
builder.setSourceFilePolicy(TeaVMSourceFilePolicy.LINK_LOCAL_FILES);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,12 @@
|
||||||
*/
|
*/
|
||||||
package org.teavm.gradle.tasks;
|
package org.teavm.gradle.tasks;
|
||||||
|
|
||||||
|
import org.gradle.api.file.ConfigurableFileCollection;
|
||||||
import org.gradle.api.provider.Property;
|
import org.gradle.api.provider.Property;
|
||||||
import org.gradle.api.tasks.Input;
|
import org.gradle.api.tasks.Input;
|
||||||
|
import org.gradle.api.tasks.InputFiles;
|
||||||
|
import org.gradle.api.tasks.Optional;
|
||||||
|
import org.teavm.gradle.api.SourceFilePolicy;
|
||||||
import org.teavm.gradle.api.WasmDebugInfoLevel;
|
import org.teavm.gradle.api.WasmDebugInfoLevel;
|
||||||
import org.teavm.gradle.api.WasmDebugInfoLocation;
|
import org.teavm.gradle.api.WasmDebugInfoLocation;
|
||||||
import org.teavm.tooling.TeaVMTargetType;
|
import org.teavm.tooling.TeaVMTargetType;
|
||||||
|
@ -26,10 +30,10 @@ public abstract class GenerateWasmGCTask extends TeaVMTask {
|
||||||
public GenerateWasmGCTask() {
|
public GenerateWasmGCTask() {
|
||||||
getStrict().convention(true);
|
getStrict().convention(true);
|
||||||
getObfuscated().convention(true);
|
getObfuscated().convention(true);
|
||||||
getDebugInfo().convention(true);
|
|
||||||
getDebugInfoLevel().convention(WasmDebugInfoLevel.DEOBFUSCATION);
|
getDebugInfoLevel().convention(WasmDebugInfoLevel.DEOBFUSCATION);
|
||||||
getDebugInfoLocation().convention(WasmDebugInfoLocation.EXTERNAL);
|
getDebugInfoLocation().convention(WasmDebugInfoLocation.EXTERNAL);
|
||||||
getSourceMap().convention(false);
|
getSourceMap().convention(false);
|
||||||
|
getSourceFilePolicy().convention(SourceFilePolicy.LINK_LOCAL_FILES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Input
|
@Input
|
||||||
|
@ -38,9 +42,6 @@ public abstract class GenerateWasmGCTask extends TeaVMTask {
|
||||||
@Input
|
@Input
|
||||||
public abstract Property<Boolean> getObfuscated();
|
public abstract Property<Boolean> getObfuscated();
|
||||||
|
|
||||||
@Input
|
|
||||||
public abstract Property<Boolean> getDebugInfo();
|
|
||||||
|
|
||||||
@Input
|
@Input
|
||||||
public abstract Property<WasmDebugInfoLevel> getDebugInfoLevel();
|
public abstract Property<WasmDebugInfoLevel> getDebugInfoLevel();
|
||||||
|
|
||||||
|
@ -50,11 +51,18 @@ public abstract class GenerateWasmGCTask extends TeaVMTask {
|
||||||
@Input
|
@Input
|
||||||
public abstract Property<Boolean> getSourceMap();
|
public abstract Property<Boolean> getSourceMap();
|
||||||
|
|
||||||
|
@InputFiles
|
||||||
|
public abstract ConfigurableFileCollection getSourceFiles();
|
||||||
|
|
||||||
|
@Input
|
||||||
|
@Optional
|
||||||
|
public abstract Property<SourceFilePolicy> getSourceFilePolicy();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setupBuilder(BuildStrategy builder) {
|
protected void setupBuilder(BuildStrategy builder) {
|
||||||
builder.setStrict(getStrict().get());
|
builder.setStrict(getStrict().get());
|
||||||
builder.setObfuscated(getObfuscated().get());
|
builder.setObfuscated(getObfuscated().get());
|
||||||
builder.setDebugInformationGenerated(getDebugInfo().get());
|
builder.setDebugInformationGenerated(getDebugInformation().get());
|
||||||
builder.setSourceMapsFileGenerated(getSourceMap().get());
|
builder.setSourceMapsFileGenerated(getSourceMap().get());
|
||||||
switch (getDebugInfoLevel().get()) {
|
switch (getDebugInfoLevel().get()) {
|
||||||
case FULL:
|
case FULL:
|
||||||
|
@ -73,5 +81,7 @@ public abstract class GenerateWasmGCTask extends TeaVMTask {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
builder.setTargetType(TeaVMTargetType.WEBASSEMBLY_GC);
|
builder.setTargetType(TeaVMTargetType.WEBASSEMBLY_GC);
|
||||||
|
TaskUtils.applySourceFiles(getSourceFiles(), builder);
|
||||||
|
TaskUtils.applySourceFilePolicy(getSourceFilePolicy(), builder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 konsoletyper.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.teavm.gradle.tasks;
|
||||||
|
|
||||||
|
import org.gradle.api.file.ConfigurableFileCollection;
|
||||||
|
import org.gradle.api.provider.Property;
|
||||||
|
import org.teavm.gradle.api.SourceFilePolicy;
|
||||||
|
import org.teavm.tooling.TeaVMSourceFilePolicy;
|
||||||
|
import org.teavm.tooling.builder.BuildStrategy;
|
||||||
|
|
||||||
|
final class TaskUtils {
|
||||||
|
private TaskUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
|
static void applySourceFiles(ConfigurableFileCollection sourceFiles, BuildStrategy builder) {
|
||||||
|
for (var file : sourceFiles) {
|
||||||
|
if (file.isFile()) {
|
||||||
|
if (file.getName().endsWith(".jar") || file.getName().endsWith(".zip")) {
|
||||||
|
builder.addSourcesJar(file.getAbsolutePath());
|
||||||
|
}
|
||||||
|
} else if (file.isDirectory()) {
|
||||||
|
builder.addSourcesDirectory(file.getAbsolutePath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void applySourceFilePolicy(Property<SourceFilePolicy> policy, BuildStrategy builder) {
|
||||||
|
switch (policy.get()) {
|
||||||
|
case DO_NOTHING:
|
||||||
|
builder.setSourceFilePolicy(TeaVMSourceFilePolicy.DO_NOTHING);
|
||||||
|
break;
|
||||||
|
case COPY:
|
||||||
|
builder.setSourceFilePolicy(TeaVMSourceFilePolicy.COPY);
|
||||||
|
break;
|
||||||
|
case LINK_LOCAL_FILES:
|
||||||
|
builder.setSourceFilePolicy(TeaVMSourceFilePolicy.LINK_LOCAL_FILES);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,7 +31,7 @@ dependencies {
|
||||||
implementation(project(":core"))
|
implementation(project(":core"))
|
||||||
implementation(project(":tools:core"))
|
implementation(project(":tools:core"))
|
||||||
implementation(project(":tools:browser-runner"))
|
implementation(project(":tools:browser-runner"))
|
||||||
runtimeOnly(project(":tools:deobfuscator-wasm-gc", "wasm"))
|
runtimeOnly(project(":tools:deobfuscator-wasm-gc"))
|
||||||
}
|
}
|
||||||
|
|
||||||
teavmPublish {
|
teavmPublish {
|
||||||
|
|
|
@ -169,7 +169,7 @@ class WebAssemblyGCPlatformSupport extends TestPlatformSupport<WasmGCTarget> {
|
||||||
getExtension() + "-deobfuscator.wasm");
|
getExtension() + "-deobfuscator.wasm");
|
||||||
try {
|
try {
|
||||||
TestUtil.resourceToFile("org/teavm/backend/wasm/wasm-gc-runtime.js", testPath, Map.of());
|
TestUtil.resourceToFile("org/teavm/backend/wasm/wasm-gc-runtime.js", testPath, Map.of());
|
||||||
TestUtil.resourceToFile("deobfuscator.wasm", testDeobfuscatorPath, Map.of());
|
TestUtil.resourceToFile("org/teavm/backend/wasm/deobfuscator.wasm", testDeobfuscatorPath, Map.of());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user