Skip to content

Commit

Permalink
improvement
Browse files Browse the repository at this point in the history
  • Loading branch information
xpenatan committed Oct 20, 2023
1 parent 87ccc34 commit 414865a
Show file tree
Hide file tree
Showing 11 changed files with 115 additions and 144 deletions.
56 changes: 28 additions & 28 deletions example/lib/generator/src/main/java/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ private static void generateClassOnly() throws Exception {
String genDir = "../core/src/main/java";
String cppSourceDir = new File("./src/main/cpp/exampleLib/src/").getCanonicalPath();

IDLReader idlReader = IDLReader.readIDL(idlPath, cppSourceDir);
IDLDefaultCodeParser idlParser = new IDLDefaultCodeParser(basePackage, "IDL-Test", idlReader);
IDLReader idlReader = IDLReader.readIDL(idlPath);
IDLDefaultCodeParser idlParser = new IDLDefaultCodeParser(basePackage, "IDL-Test", idlReader, cppSourceDir);
idlParser.generateClass = true;
JParser.generate(idlParser, baseJavaDir, genDir);
}
Expand All @@ -44,7 +44,7 @@ private static void generateAndBuild() throws Exception {
String cppSourceDir = new File("./src/main/cpp/source/exampleLib/src/").getCanonicalPath();
String customSourceDir = new File("./src/main/cpp/custom/").getCanonicalPath();

IDLReader idlReader = IDLReader.readIDL(idlPath, cppSourceDir);
IDLReader idlReader = IDLReader.readIDL(idlPath);

String libsDir = new File("./build/c++/libs/").getCanonicalPath();
String genDir = "../core/src/main/java";
Expand All @@ -59,7 +59,7 @@ private static void generateAndBuild() throws Exception {
FileHelper.copyDir(customSourceDir, libDestinationPath);

CppGenerator cppGenerator = new NativeCPPGenerator(libDestinationPath);
CppCodeParser cppParser = new CppCodeParser(cppGenerator, idlReader, basePackage);
CppCodeParser cppParser = new CppCodeParser(cppGenerator, idlReader, basePackage, customSourceDir);
cppParser.generateClass = true;
JParser.generate(cppParser, baseJavaDir, genDir);

Expand All @@ -71,15 +71,15 @@ private static void generateAndBuild() throws Exception {
);

String teaVMgenDir = "../teavm/src/main/java/";
TeaVMCodeParser teavmParser = new TeaVMCodeParser(idlReader, libName, basePackage);
TeaVMCodeParser teavmParser = new TeaVMCodeParser(idlReader, libName, basePackage, customSourceDir);
JParser.generate(teavmParser, baseJavaDir, teaVMgenDir);

// IOSTarget iosTarget = new IOSTarget();
// iosTarget.headerDirs.add("-Isrc/exampleLib");
// iosTarget.cppIncludes.add("**/src/exampleLib/**.cpp");

// JBuilder.build(buildConfig, getWindowTarget(), getEmscriptenTarget(idlPath), getAndroidTarget());
JBuilder.build(buildConfig, getEmscriptenTarget(idlPath));
JBuilder.build(buildConfig, getWindowTarget(), getEmscriptenTarget(idlReader), getAndroidTarget());
// JBuilder.build(buildConfig, getEmscriptenTarget(idlReader));
}

private static BuildMultiTarget getWindowTarget() {
Expand All @@ -100,33 +100,33 @@ private static BuildMultiTarget getWindowTarget() {
return multiTarget;
}

private static BuildMultiTarget getEmscriptenTarget(String idlPath) {
private static BuildMultiTarget getEmscriptenTarget(IDLReader idlReader) {
BuildMultiTarget multiTarget = new BuildMultiTarget();

// EmscriptenLibTarget emscriptenTarget = new EmscriptenLibTarget(idlPath);
// emscriptenTarget.libName = "exampleLibside";
// emscriptenTarget.headerDirs.add("-Isrc/exampleLib");
// emscriptenTarget.headerDirs.add("-includesrc/exampleLib/CustomCode.h");
// emscriptenTarget.cppIncludes.add("**/src/exampleLib/**.cpp");
// emscriptenTarget.cppFlags.add("-v");
// emscriptenTarget.cppFlags.add("-fPIC");
// emscriptenTarget.cppFlags.add("-sSIDE_MODULE=1");
// emscriptenTarget.cppFlags.add("-sEXPORT_ALL=1");
// emscriptenTarget.linkerFlags.add("-v");
// emscriptenTarget.linkerFlags.add("-fPIC");
// emscriptenTarget.linkerFlags.add("-sSIDE_MODULE=1");
// emscriptenTarget.linkerFlags.add("-sEXPORT_ALL=1");
// emscriptenTarget.libSuffix = ".wasm";

// multiTarget.add(emscriptenTarget);

EmscriptenTarget mainTarget = new EmscriptenTarget(idlPath);
EmscriptenLibTarget emscriptenTarget = new EmscriptenLibTarget();
emscriptenTarget.libName = "exampleLibside";
emscriptenTarget.headerDirs.add("-Isrc/exampleLib");
emscriptenTarget.headerDirs.add("-includesrc/exampleLib/CustomCode.h");
emscriptenTarget.cppIncludes.add("**/src/exampleLib/**.cpp");
emscriptenTarget.cppFlags.add("-fPIC");
emscriptenTarget.cppFlags.add("-sEXPORT_ALL=1");
emscriptenTarget.linkerFlags.add("-v");
emscriptenTarget.linkerFlags.add("-fPIC");
emscriptenTarget.linkerFlags.add("-sSIDE_MODULE=1");
emscriptenTarget.linkerFlags.add("-sEXPORT_ALL=1");
emscriptenTarget.libSuffix = ".wasm";
multiTarget.add(emscriptenTarget);

EmscriptenTarget mainTarget = new EmscriptenTarget(idlReader);
mainTarget.headerDirs.add("-Isrc/exampleLib");
mainTarget.headerDirs.add("-includesrc/exampleLib/CustomCode.h");
mainTarget.cppIncludes.add("**/src/exampleLib/**.cpp");
mainTarget.cppFlags.add("-fPIC");
mainTarget.linkerFlags.add("-sMAIN_MODULE=2");
mainTarget.linkerFlags.add("-fPIC");
mainTarget.linkerFlags.add("-ERROR_ON_UNDEFINED_SYMBOLS=0");
mainTarget.linkerFlags.add("../../libs/emscripten/exampleLibside.wasm");
multiTarget.add(mainTarget);


return multiTarget;
}

Expand Down
2 changes: 1 addition & 1 deletion example/lib/teavm/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ plugins {
id("java")
}

val emscriptenFile = "$projectDir/../generator/build/c++/libs/emscripten/exampleLib.wasm.js"
val emscriptenFile = "$projectDir/../generator/build/c++/libs/emscripten/"

tasks.jar {
from(emscriptenFile)
Expand Down
1 change: 1 addition & 0 deletions jParser/builder/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ val moduleName = "builder"
dependencies {
implementation(project(":jParser:core"))
implementation(project(":jParser:base"))
implementation(project(":jParser:idl"))
}

publishing {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,20 @@

import com.github.xpenatan.jparser.builder.BuildConfig;
import com.github.xpenatan.jparser.builder.BuildTarget;
import com.github.xpenatan.jparser.core.JParser;
import com.github.xpenatan.jparser.core.util.CustomFileDescriptor;
import java.io.File;
import java.util.ArrayList;

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

private CustomFileDescriptor idlFile;

String EMSCRIPTEN_ROOT = System.getenv("EMSDK") + "/upstream/emscripten/";
String WEBIDL_BINDER_SCRIPT = EMSCRIPTEN_ROOT + "tools/webidl_binder.py";

public EmscriptenLibTarget(String idlFile) {
public EmscriptenLibTarget() {
this.libDirSuffix = "emscripten/";
this.tempBuildDir = "target/emscripten";
this.idlFile = new CustomFileDescriptor(idlFile);

if(!this.idlFile.exists()) {
throw new RuntimeException("IDL file does not exist: " + idlFile);
}

long initialMemory = 64 * 1024 * 1024;

Expand Down Expand Up @@ -78,14 +70,6 @@ protected boolean build(BuildConfig config) {
jsglueDir.mkdirs();
}

// CustomFileDescriptor mergedIDLFile = mergeIDLFile(jsglueDir);

// CustomFileDescriptor idlHelperCPP = new CustomFileDescriptor("IDLHelper.h", CustomFileDescriptor.FileType.Classpath);
// idlHelperCPP.copyTo(jsglueDir, false);

// CustomFileDescriptor cppFile = jsglueDir.child(idlHelperCPP.name());
// headerDirs.add("-include" + cppFile.path());

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

CustomFileDescriptor postFile = new CustomFileDescriptor("emscripten/post.js", CustomFileDescriptor.FileType.Classpath);
Expand All @@ -102,44 +86,11 @@ protected boolean build(BuildConfig config) {
postJS.writeString(s, false);
String postPath = postJS.path();

// linkerFlags.add("--post-js");
// linkerFlags.add(jsGluePath + "glue.js");
linkerFlags.add("--extern-post-js");
linkerFlags.add(postPath);
linkerFlags.add("-s");
linkerFlags.add("EXPORT_NAME='" + libName + "'");

String pythonCmd = "python";
if(isUnix()) {
pythonCmd = "python3";
}

ArrayList<String> generateGlueCommand = new ArrayList<>();
generateGlueCommand.add(pythonCmd);
generateGlueCommand.add(WEBIDL_BINDER_SCRIPT);
// generateGlueCommand.add(mergedIDLFile.toString());
generateGlueCommand.add("glue");
// if(!JProcess.startProcess(jsglueDir.file(), generateGlueCommand)) {
// return false;
// }

cppFlags.add("-c");

return super.build(config);
}

private CustomFileDescriptor mergeIDLFile(CustomFileDescriptor jsglueDir) {
String idlStr = idlFile.readString();

if(!JParser.CREATE_IDL_HELPER) {
return idlFile;
}

CustomFileDescriptor idlHelper = new CustomFileDescriptor("IDLHelper.idl", CustomFileDescriptor.FileType.Classpath);
String idlHelperStr = idlHelper.readString();
String mergedIdlStr = idlStr + "\n\n" + idlHelperStr;
CustomFileDescriptor mergedIdlFile = jsglueDir.child(idlFile.name());
mergedIdlFile.writeString(mergedIdlStr, false);
return mergedIdlFile;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,22 @@
import com.github.xpenatan.jparser.builder.BuildConfig;
import com.github.xpenatan.jparser.builder.BuildTarget;
import com.github.xpenatan.jparser.builder.JProcess;
import com.github.xpenatan.jparser.core.JParser;
import com.github.xpenatan.jparser.core.util.CustomFileDescriptor;
import com.github.xpenatan.jparser.idl.IDLReader;
import java.io.File;
import java.util.ArrayList;

public class EmscriptenTarget extends BuildTarget {

private CustomFileDescriptor idlFile;
private IDLReader idlReader;

String EMSCRIPTEN_ROOT = System.getenv("EMSDK") + "/upstream/emscripten/";
String WEBIDL_BINDER_SCRIPT = EMSCRIPTEN_ROOT + "tools/webidl_binder.py";

public EmscriptenTarget(String idlFile) {
public EmscriptenTarget(IDLReader idlReader) {
this.libDirSuffix = "emscripten/";
this.tempBuildDir = "target/emscripten";
this.idlFile = new CustomFileDescriptor(idlFile);

if(!this.idlFile.exists()) {
throw new RuntimeException("IDL file does not exist: " + idlFile);
}
this.idlReader = idlReader;

long initialMemory = 64 * 1024 * 1024;

Expand Down Expand Up @@ -128,17 +124,9 @@ protected boolean build(BuildConfig config) {
}

private CustomFileDescriptor mergeIDLFile(CustomFileDescriptor jsglueDir) {
String idlStr = idlFile.readString();

if(!JParser.CREATE_IDL_HELPER) {
return idlFile;
}

CustomFileDescriptor idlHelper = new CustomFileDescriptor("IDLHelper.idl", CustomFileDescriptor.FileType.Classpath);
String idlHelperStr = idlHelper.readString();
String mergedIdlStr = idlStr + "\n\n" + idlHelperStr;
CustomFileDescriptor mergedIdlFile = jsglueDir.child(idlFile.name());
mergedIdlFile.writeString(mergedIdlStr, false);
String idlStr = idlReader.mergeIDLFiles();
CustomFileDescriptor mergedIdlFile = jsglueDir.child("IDLMerged.idl");
mergedIdlFile.writeString(idlStr, false);
return mergedIdlFile;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -133,16 +133,12 @@ public class CppCodeParser extends IDLDefaultCodeParser {

private final CppGenerator cppGenerator;

public CppCodeParser(CppGenerator cppGenerator) {
this(cppGenerator, null);
public CppCodeParser(CppGenerator cppGenerator, String cppDir) {
this(cppGenerator, null, "", cppDir);
}

public CppCodeParser(CppGenerator cppGenerator, IDLReader idlReader) {
this(cppGenerator, idlReader, "");
}

public CppCodeParser(CppGenerator cppGenerator, IDLReader idlReader, String basePackage) {
super(basePackage, HEADER_CMD, idlReader);
public CppCodeParser(CppGenerator cppGenerator, IDLReader idlReader, String basePackage, String cppDir) {
super(basePackage, HEADER_CMD, idlReader, cppDir);
this.cppGenerator = cppGenerator;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,27 @@
* @author xpenatan
*/
public class IDLFile {

public final String idlName;

public ArrayList<String> lines = new ArrayList<>();

public final ArrayList<IDLClassOrEnum> classArray = new ArrayList<>();

public IDLFile(String idlName) {
this.idlName = idlName;
}

public String getIDLStr() {
String idlStr = "";
for(String line : lines) {
if(!line.trim().isEmpty()) {
idlStr += line + "\n";
}
}
return idlStr;
}

public IDLClass getClass(String name) {
int size = classArray.size();
for(int i = 0; i < size; i++) {
Expand Down

0 comments on commit 414865a

Please sign in to comment.