Skip to content

Commit

Permalink
attempt to link lib
Browse files Browse the repository at this point in the history
  • Loading branch information
xpenatan committed Dec 25, 2023
1 parent 7bf8b3b commit f8eb086
Show file tree
Hide file tree
Showing 18 changed files with 195 additions and 10 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ out/
**/webapp/**
**/lib/core/src/**
**/lib/desktop/src/main/**
**/lib-ext/ext-core/src/**
**/lib-ext/ext-desktop/src/main/**
**/lib/teavm/src/main/java/emu/**
**/lib/teavm/src/main/resources/*.js
**/lib/teavm/src/main/resources/*.wasm
Expand Down
2 changes: 1 addition & 1 deletion example/app/core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
dependencies {
implementation(project(":example:lib:core"))
implementation(project(":example:lib:core-ext"))

implementation("com.badlogicgames.gdx:gdx:${LibExt.gdxVersion}")
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.github.xpenatan.jparser.example.lib.ReturnClass;
import com.github.xpenatan.jparser.example.lib.idl.helper.IDLFloat;
import com.github.xpenatan.jparser.example.lib.idl.helper.IDLFloatArray;
import com.lib.ext.CustomLib;

public class AppTest extends ApplicationAdapter {
private boolean init = false;
Expand Down Expand Up @@ -90,6 +91,8 @@ private void initLib() {
System.out.println("operatorClass1 copy: " + operatorClass1.get_value());

testPrimitive();

CustomLib.print();
}

private void testPrimitive() {
Expand Down
3 changes: 3 additions & 0 deletions example/lib-ext/ext-base/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
dependencies {
implementation(project(":example:lib:core"))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.lib.ext;

public class CustomLib {
/*[-C++;-NATIVE]
#include "CustomLib.h"
*/
}
14 changes: 14 additions & 0 deletions example/lib-ext/ext-core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
plugins {
id("java")
}

dependencies {
implementation(project(":example:lib:core"))
}

tasks.named("clean") {
doFirst {
val srcPath = "$projectDir/src/main/"
project.delete(files(srcPath))
}
}
21 changes: 21 additions & 0 deletions example/lib-ext/ext-generator/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
plugins {
id("java")
}

val mainClassName = "Main"

dependencies {
implementation(project(":example:lib:core"))
implementation(project(":jParser:core"))
implementation(project(":jParser:idl"))
implementation(project(":jParser:teavm"))
implementation(project(":jParser:cpp"))
implementation(project(":jParser:builder"))
}

tasks.register<JavaExec>("build_project") {
group = "gen"
description = "Generate native project"
mainClass.set(mainClassName)
classpath = sourceSets["main"].runtimeClasspath
}
3 changes: 3 additions & 0 deletions example/lib-ext/ext-generator/src/main/cpp/ExtLib.idl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
interface CustomLib {
static void print();
};
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "CustomLib.h"
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#pragma once

#include <iostream>

class CustomLib {

private:

public:

static void print() {
std::cout << " PRINT " << std::endl;
}
};
72 changes: 72 additions & 0 deletions example/lib-ext/ext-generator/src/main/java/BuildCustomCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import com.github.xpenatan.jparser.builder.BuildConfig;
import com.github.xpenatan.jparser.builder.BuildMultiTarget;
import com.github.xpenatan.jparser.builder.BuildTarget;
import com.github.xpenatan.jparser.builder.JBuilder;
import com.github.xpenatan.jparser.builder.targets.WindowsTarget;
import com.github.xpenatan.jparser.core.JParser;
import com.github.xpenatan.jparser.core.util.FileHelper;
import com.github.xpenatan.jparser.cpp.CppCodeParser;
import com.github.xpenatan.jparser.cpp.CppGenerator;
import com.github.xpenatan.jparser.cpp.NativeCPPGenerator;
import com.github.xpenatan.jparser.idl.IDLReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;

public class BuildCustomCode {

public static void build() throws Exception {
String libName = "extlib";
String basePackage = "com.lib.ext";

String libPath = new File("../../lib").getCanonicalPath().replace("\\", "/");
String idlPath = new File("src/main/cpp/ExtLib.idl").getCanonicalPath();
IDLReader idlReader = IDLReader.readIDL(idlPath);
String baseJavaDir = new File(".").getAbsolutePath() + "./ext-base/src/main/java";

String cppSourceDir = new File("./src/main/cpp/cpp-source//source/").getCanonicalPath();
String libsDir = new File("./build/c++/libs/").getCanonicalPath();
String libBuildPath = new File("./build/c++/").getCanonicalPath();
String cppDestinationPath = libBuildPath + "/src";
String libDestinationPath = cppDestinationPath + "/extlib";

FileHelper.copyDir(cppSourceDir, libDestinationPath);

Path copyOut = new File(libDestinationPath).toPath();
FileHelper.copyDir(new File("src/main/cpp/cpp-source/custom").toPath(), copyOut);

JParser.CREATE_IDL_HELPER = false;

CppGenerator cppGenerator = new NativeCPPGenerator(libDestinationPath, false);
CppCodeParser cppParser = new CppCodeParser(cppGenerator, idlReader, basePackage, cppSourceDir);
cppParser.generateClass = true;
JParser.generate(cppParser, baseJavaDir, "../ext-core/src/main/java");

BuildConfig buildConfig = new BuildConfig(cppDestinationPath, libBuildPath, libsDir, libName);

ArrayList<BuildMultiTarget> targets = new ArrayList<>();
if(BuildTarget.isWindows() || BuildTarget.isUnix()) {
targets.add(getWindowBuildTarget(libPath));
}

JBuilder.build(buildConfig, targets);
}

private static BuildMultiTarget getWindowBuildTarget(String libPath) throws IOException {
BuildMultiTarget multiTarget = new BuildMultiTarget();

String libCppPath = libPath + "/generator/build/c++";

WindowsTarget windowsTarget = new WindowsTarget();
windowsTarget.headerDirs.add("-I" + libCppPath + "/src/imgui");
windowsTarget.isStatic = true;
windowsTarget.addJNI = true;
windowsTarget.headerDirs.add("-Isrc/extlib/");
windowsTarget.cppInclude.add("**/extlib/*.cpp");
multiTarget.add(windowsTarget);

return multiTarget;
}

}
5 changes: 5 additions & 0 deletions example/lib-ext/ext-generator/src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
public class Main {
public static void main(String[] args) throws Exception {
BuildCustomCode.build();
}
}
17 changes: 17 additions & 0 deletions example/lib-ext/ext-teavm/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
plugins {
id("java")
}


dependencies {
implementation(project(":example:lib:core"))
implementation("org.teavm:teavm-jso:${LibExt.teaVMVersion}")
implementation("org.teavm:teavm-classlib:${LibExt.teaVMVersion}")
}

tasks.named("clean") {
doFirst {
val srcPath = "$projectDir/src/main/java/gen"
project.delete(files(srcPath))
}
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mapPackageHierarchy|gen.com=com
8 changes: 8 additions & 0 deletions example/lib/core-ext/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
plugins {
id("java-library")
}

dependencies {
api(project(":example:lib:core"))
api(project(":example:lib-ext:ext-core"))
}
26 changes: 17 additions & 9 deletions example/lib/generator/src/main/java/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.github.xpenatan.jparser.idl.IDLReader;
import com.github.xpenatan.jparser.teavm.TeaVMCodeParser;
import java.io.File;
import java.io.IOException;

public class Main {

Expand Down Expand Up @@ -77,24 +78,31 @@ private static void generateAndBuild() throws Exception {
// iosTarget.headerDirs.add("-Isrc/exampleLib");
// iosTarget.cppIncludes.add("**/src/exampleLib/**.cpp");

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

private static BuildMultiTarget getWindowTarget() {
private static BuildMultiTarget getWindowTarget() throws IOException {
BuildMultiTarget multiTarget = new BuildMultiTarget();

// Make a static library
WindowsTarget windowsTarget = new WindowsTarget();
windowsTarget.isStatic = true;
windowsTarget.addJNI = false;
windowsTarget.headerDirs.add("-Isrc/exampleLib");
windowsTarget.cppInclude.add("**/src/exampleLib/**.cpp");
multiTarget.add(windowsTarget);
String libPath = new File("../../lib-ext/").getCanonicalPath().replace("\\", "/");
String libCPPPath = libPath + "/ext-generator/build/c++";

// // Make a static library
// WindowsTarget windowsTarget = new WindowsTarget();
// windowsTarget.isStatic = true;
// windowsTarget.addJNI = false;
// windowsTarget.headerDirs.add("-Isrc/exampleLib");
// windowsTarget.cppInclude.add("**/src/exampleLib/**.cpp");
// multiTarget.add(windowsTarget);

WindowsTarget glueTarget = new WindowsTarget();
glueTarget.linkerFlags.add("../../libs/windows/exampleLib64.a");
glueTarget.linkerFlags.add(libCPPPath + "/libs/windows/extlib64.a");
glueTarget.headerDirs.add("-include" + libCPPPath + "/src/extlib/CustomLib.h");
glueTarget.headerDirs.add("-Isrc/exampleLib");
glueTarget.headerDirs.add("-I" + libCPPPath + "src/extlib");
multiTarget.add(glueTarget);

return multiTarget;
Expand Down
6 changes: 6 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ include(":jParser:loader:loader-teavm")
include(":example:lib:generator")
include(":example:lib:base")
include(":example:lib:core")
include(":example:lib:core-ext")
include(":example:lib:desktop")
include(":example:lib:teavm")
include(":example:lib:android")

include(":example:lib-ext:ext-generator")
include(":example:lib-ext:ext-base")
include(":example:lib-ext:ext-core")
include(":example:lib-ext:ext-teavm")

include(":example:app:core")
include(":example:app:desktop")
include(":example:app:teavm")
Expand Down

0 comments on commit f8eb086

Please sign in to comment.