Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Killing Ant. Replacing with java support for executing compilation linking and packaging. Also MSVC toolchain target #69

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.badlogic.gdx.jnigen.commons;

public enum AndroidABI {

ABI_ARMEABI_V7A("armeabi-v7a"),
ABI_x86("x86"),
ABI_x86_64("x86_64"),
ABI_ARM64_V8A("arm64-v8a");

private final String abiString;

AndroidABI (String abiString) {
this.abiString = abiString;
}

public String getAbiString () {
return abiString;
}
}

Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
package com.badlogic.gdx.jnigen.commons;

public enum Architecture {
x86, ARM, RISCV,LOONGARCH;

x86("x86"),
ARM("Arm"),
RISCV("Riscv"),
LOONGARCH("LoongArch");

private final String displayName;

Architecture (String displayName) {
this.displayName = displayName;
}

public String getDisplayName () {
return displayName;
}

public String toSuffix() {
if (this == x86) return "";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.badlogic.gdx.jnigen.commons;

public enum CompilerABIType {
GCC_CLANG,
MSVC
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.badlogic.gdx.jnigen.commons;

public class HostDetection {

static public Os os;
static public Architecture.Bitness bitness = Architecture.Bitness._32;
static public Architecture architecture = Architecture.x86;

static {
if (System.getProperty("os.name").contains("Windows"))
os = Os.Windows;
else if (System.getProperty("os.name").contains("Linux"))
os = Os.Linux;
else if (System.getProperty("os.name").contains("Mac"))
os = Os.MacOsX;

if (System.getProperty("os.arch").startsWith("arm") || System.getProperty("os.arch").startsWith("aarch64"))
architecture = Architecture.ARM;
else if (System.getProperty("os.arch").startsWith("riscv"))
architecture = Architecture.RISCV;
else if (System.getProperty("os.arch").startsWith("loongarch"))
architecture = Architecture.LOONGARCH;

if (System.getProperty("os.arch").contains("64") || System.getProperty("os.arch").startsWith("armv8"))
bitness = Architecture.Bitness._64;
else if (System.getProperty("os.arch").contains("128"))
bitness = Architecture.Bitness._128;

boolean isMOEiOS = System.getProperty("moe.platform.name") != null;
String vm = System.getProperty("java.runtime.name");
if (vm != null && vm.contains("Android Runtime")) {
os = Os.Android;
bitness = Architecture.Bitness._32;
architecture = Architecture.x86;
}
if (isMOEiOS || (os != Os.Android && os != Os.Windows && os != Os.Linux && os != Os.MacOsX)) {
os = Os.IOS;
bitness = Architecture.Bitness._32;
architecture = Architecture.x86;
}
}

/**
* @deprecated Use {@link #os} as {@code SharedLibraryLoader.os == Os.Windows} instead.
*/
@Deprecated
static public boolean isWindows = os == Os.Windows;
/**
* @deprecated Use {@link #os} as {@code SharedLibraryLoader.os == Os.Linux} instead.
*/
@Deprecated
static public boolean isLinux = os == Os.Linux;
/**
* @deprecated Use {@link #os} as {@code SharedLibraryLoader.os == Os.MacOsX} instead.
*/
@Deprecated
static public boolean isMac = os == Os.MacOsX;
/**
* @deprecated Use {@link #os} as {@code SharedLibraryLoader.os == Os.IOS} instead.
*/
@Deprecated
static public boolean isIos = os == Os.IOS;
/**
* @deprecated Use {@link #os} as {@code SharedLibraryLoader.os == Os.Android} instead.
*/
@Deprecated
static public boolean isAndroid = os == Os.Android;
/**
* @deprecated Use {@link #architecture} as {@code SharedLibraryLoader.architecture == Architecture.ARM} instead.
*/
@Deprecated
static public boolean isARM = architecture == Architecture.ARM;
/**
* @deprecated Use {@link #bitness} as {@code SharedLibraryLoader.bitness == Architecture.Bitness._64} instead.
*/
@Deprecated
static public boolean is64Bit = bitness == Architecture.Bitness._64;

}
Original file line number Diff line number Diff line change
@@ -1,28 +1,47 @@
package com.badlogic.gdx.jnigen.commons;

/** The target operating system of a build target. */

/**
* The target operating system of a build target.
*/
public enum Os {
Windows, Linux, MacOsX, Android, IOS;

public String getJniPlatform () {
if (this == Os.Windows) return "win32";
if (this == Os.Linux) return "linux";
if (this == Os.MacOsX) return "mac";
return "";
}

public String getLibPrefix () {
if (this == Os.Linux || this == Os.Android || this == Os.MacOsX) {
return "lib";
}
return "";
}

public String getLibExtension () {
if (this == Os.Windows) return "dll";
if (this == Os.Linux) return "so";
if (this == Os.MacOsX) return "dylib";
if (this == Os.Android) return "so";
return "";
}

Windows(Platform.Desktop),
Linux(Platform.Desktop),
MacOsX(Platform.Desktop),
Android(Platform.Android),
IOS(Platform.IOS);

private final Platform platform;

Os (Platform platform) {
this.platform = platform;
}

public Platform getPlatform () {
return platform;
}

public String getJniPlatform () {
if (this == Os.Windows) return "win32";
if (this == Os.Linux) return "linux";
if (this == Os.MacOsX) return "mac";
if (this == Os.IOS) return "mac";
return "";
}

public String getLibPrefix () {
if (this == Os.Linux || this == Os.Android || this == Os.MacOsX) {
return "lib";
}
return "";
}

public String getLibExtension () {
if (this == Os.Windows) return "dll";
if (this == Os.Linux) return "so";
if (this == Os.MacOsX) return "dylib";
if (this == Os.Android) return "so";
return "";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.badlogic.gdx.jnigen.commons;

public enum Platform {
Desktop,
Android,
IOS
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.badlogic.gdx.jnigen.commons;

public enum TargetType {

SIMULATOR("simulator", "iphoneos"),
DEVICE("device", "iphonesimulator");

private final String targetTypeBuildDirName;
private final String platformName;

TargetType (String device, String xcodeDeviceTypeArg) {
this.targetTypeBuildDirName = device;
this.platformName = xcodeDeviceTypeArg;
}

public String getTargetTypeBuildDirName () {
return targetTypeBuildDirName;
}

public String getPlatformName () {
return platformName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,14 @@ public String patchMethodNative(MethodDeclaration method, String nativeCode, Str
String methodString = method.toString(new DefaultPrinterConfiguration().removeOption(new DefaultConfigurationOption(
ConfigOption.PRINT_COMMENTS)));

String lineToPatch = Arrays.stream(classString.split("\n"))
String lineToPatch = Arrays.stream(classString.split("\r\n|\n"))
.filter(line -> line.contains(methodString)).findFirst().orElse(null);
if (lineToPatch == null)
throw new IllegalArgumentException("Failed to find native method: " + method.toString() + " in " + classString);

String offset = lineToPatch.replace(lineToPatch.trim(), "");
String newLine = lineToPatch + "/*\n";
newLine += Arrays.stream(nativeCode.split("\n"))
newLine += Arrays.stream(nativeCode.split("\r\n|\n"))
.map(s -> offset + "\t" + s)
.collect(Collectors.joining("\n"));

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,26 +1,70 @@
package com.badlogic.gdx.jnigen.gradle;

import javax.inject.Inject;

import com.badlogic.gdx.jnigen.BuildConfig;
import com.badlogic.gdx.jnigen.BuildTarget;
import com.badlogic.gdx.jnigen.FileDescriptor;
import com.badlogic.gdx.jnigen.RobovmBuildConfig;
import com.badlogic.gdx.jnigen.build.PlatformBuilder;
import com.badlogic.gdx.jnigen.commons.Os;
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.inject.Inject;
import java.util.Collections;

/**
* @author Desu
*/
public class JnigenBuildTask extends DefaultTask {
JnigenExtension ext;

@Inject
public JnigenBuildTask(JnigenExtension ext) {
this.ext = ext;

setGroup("jnigen");
setDescription("Executes all available jnigen build scripts for the current platform.");
}

@TaskAction
public void run() {
// Empty task
}
}
public class JnigenBuildTask extends DefaultTask {

private static final Logger logger = LoggerFactory.getLogger(JnigenBuildTask.class);

private final JnigenExtension ext;

private BuildTarget buildTarget;
private Os osToBuild;

@Inject
public JnigenBuildTask (JnigenExtension ext) {
this.ext = ext;

setGroup("jnigen");
setDescription("Builds native libraries");
}

public void setBuildTarget (BuildTarget buildTarget) {
this.buildTarget = buildTarget;
}


public void setOsToBuild (Os osToBuild) {
this.osToBuild = osToBuild;
}

@TaskAction
public void run () {
RobovmBuildConfig robovmBuildConfig = new RobovmBuildConfig();
if (ext.robovm != null) {
ext.robovm.execute(robovmBuildConfig);
}

BuildConfig buildConfig = new BuildConfig(ext.sharedLibName, ext.subProjectDir + ext.temporaryDir, ext.subProjectDir + ext.libsDir, ext.subProjectDir + ext.jniDir, robovmBuildConfig, new FileDescriptor(ext.subProjectDir));

buildConfig.multiThreadedCompile = ext.multiThreadedCompile;

//Build the build target!
//If we have no build target, its OS level build target build

//If we have build target, its a specific build

PlatformBuilder platformBuilder = new PlatformBuilder();

if (buildTarget != null) {
platformBuilder.build(buildTarget.os, buildConfig, Collections.singletonList(buildTarget));
} else {
platformBuilder.build(osToBuild, buildConfig, ext.targets);
}
}
}
Loading