All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.xpenatan.jparser.builder.targets.EmscriptenLibTarget Maven / Gradle / Ivy

The newest version!
package com.github.xpenatan.jparser.builder.targets;

import com.github.xpenatan.jparser.builder.BuildConfig;
import com.github.xpenatan.jparser.builder.DefaultBuildTarget;
import com.github.xpenatan.jparser.core.util.CustomFileDescriptor;
import java.io.File;
import static com.github.xpenatan.jparser.builder.BuildTarget.isWindows;

// Test Target
@Deprecated
public class EmscriptenLibTarget extends DefaultBuildTarget {

    String EMSCRIPTEN_ROOT = System.getenv("EMSDK") + "/upstream/emscripten/";

    public EmscriptenLibTarget() {
        this.libDirSuffix = "emscripten/";
        this.tempBuildDir = "target/emscripten";

        long initialMemory = 64 * 1024 * 1024;

        cppCompiler.clear();
        linkerCompiler.clear();

        String cppCompilerr = EMSCRIPTEN_ROOT + "em++";
        if(isWindows()) {
            cppCompilerr += ".bat";
        }
        cppCompiler.add(cppCompilerr);
        linkerCompiler.add(cppCompilerr);

        linkerFlags.add("-O3");
        linkerFlags.add("-std=c++17");
        linkerFlags.add("--llvm-lto");
        linkerFlags.add("1");
        linkerFlags.add("-s");
        linkerFlags.add("ALLOW_MEMORY_GROWTH=1");
        linkerFlags.add("-s");
        linkerFlags.add("ALLOW_TABLE_GROWTH=1");
        linkerFlags.add("-s");
        linkerFlags.add("MODULARIZE=1");
        linkerFlags.add("-s");
        linkerFlags.add("NO_FILESYSTEM=0");
        linkerFlags.add("-s");
        linkerFlags.add("INITIAL_MEMORY=" + initialMemory);
        linkerFlags.add("-s");
        linkerFlags.add("EXPORTED_FUNCTIONS=['_free','_malloc']");
        linkerFlags.add("-s");
        linkerFlags.add("EXPORTED_RUNTIME_METHODS=['UTF8ToString']");
        linkerFlags.add("-s");
        linkerFlags.add("WASM=1");
        linkerFlags.add("-s");
        linkerFlags.add("SINGLE_FILE=1");

        libSuffix = ".wasm.js";
    }

    @Override
    protected boolean build(BuildConfig config) {
        CustomFileDescriptor childTarget = config.buildDir.child(tempBuildDir);
        if(childTarget.exists()) {
            childTarget.delete();
        }
        childTarget.mkdirs();

        CustomFileDescriptor jsglueDir = config.sourceDir.child("jsglue");
        if(!jsglueDir.exists()) {
            jsglueDir.mkdirs();
        }

        String jsGluePath = jsglueDir.path() + File.separator;

        CustomFileDescriptor postFile = new CustomFileDescriptor("emscripten/post.js", CustomFileDescriptor.FileType.Classpath);
        String s = postFile.readString();

        String libName = this.libName;
        if(libName.isEmpty()) {
            libName = config.libName;
        }

        s = s.replace("[MODULE_NAME]", libName);

        CustomFileDescriptor postJS = new CustomFileDescriptor(jsGluePath + "post.js");
        postJS.writeString(s, false);
        String postPath = postJS.path();

        linkerFlags.add("--extern-post-js");
        linkerFlags.add(postPath);
        linkerFlags.add("-s");
        linkerFlags.add("EXPORT_NAME='" + libName + "'");
        cppFlags.add("-c");
        return super.build(config);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy