Add support for java 8, 9. Add support for ppc64, s390x, armhf

This commit is contained in:
Andrea Cavalli 2021-09-15 14:53:23 +02:00
parent 229694ec51
commit fb7042d44f
9 changed files with 113 additions and 92 deletions

View File

@ -34,11 +34,11 @@ jobs:
echo "REVISION=$REVISION" >> $GITHUB_ENV echo "REVISION=$REVISION" >> $GITHUB_ENV
echo "IMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" >> $GITHUB_ENV echo "IMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" >> $GITHUB_ENV
- name: Set up JDK 15 - name: Set up JDK 11
if: ${{ startsWith(github.ref, 'refs/tags/v') }} if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: actions/setup-java@v1 uses: actions/setup-java@v1
with: with:
java-version: 15 java-version: 11
server-id: mchv-release-distribution server-id: mchv-release-distribution
server-username: MAVEN_USERNAME server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD server-password: MAVEN_PASSWORD

View File

@ -1,14 +1,14 @@
package it.tdlight.common.utils; package it.tdlight.common.utils;
public final class LibraryVersion { public final class LibraryVersion {
public static final String VERSION = "${project.version}"; public static final String VERSION = "${project.version}";
public static final String NATIVES_VERSION = "${natives-version}"; public static final String NATIVES_VERSION = "${natives-version}";
public static final String IMPLEMENTATION_NAME = "tdlib"; public static final String IMPLEMENTATION_NAME = "tdlib";
public static final String LINUX_X86_CLASS = "it.tdlight.jni.tdlib.linux.x86.LoadLibrary"; public static final String LINUX_X86_CLASS = "it.tdlight.jni.tdlib.linux.x86.LoadLibrary";
public static final String LINUX_AMD64_CLASS = "it.tdlight.jni.tdlib.linux.amd64.LoadLibrary"; public static final String LINUX_AMD64_CLASS = "it.tdlight.jni.tdlib.linux.amd64.LoadLibrary";
public static final String LINUX_AARCH64_CLASS = "it.tdlight.jni.tdlib.linux.aarch64.LoadLibrary"; public static final String LINUX_AARCH64_CLASS = "it.tdlight.jni.tdlib.linux.aarch64.LoadLibrary";
public static final String LINUX_ARMV6_CLASS = "it.tdlight.jni.tdlib.linux.armv6.LoadLibrary"; public static final String LINUX_ARMHF_CLASS = "it.tdlight.jni.tdlib.linux.armhf.LoadLibrary";
public static final String LINUX_ARMV7_CLASS = "it.tdlight.jni.tdlib.linux.armv7.LoadLibrary"; public static final String LINUX_S390X_CLASS = "it.tdlight.jni.tdlib.linux.s390x.LoadLibrary";
public static final String LINUX_PPC64LE_CLASS = "it.tdlight.jni.tdlib.linux.ppc64le.LoadLibrary"; public static final String LINUX_PPC64LE_CLASS = "it.tdlight.jni.tdlib.linux.ppc64le.LoadLibrary";
public static final String WINDOWS_AMD64_CLASS = "it.tdlight.jni.tdlib.win.amd64.LoadLibrary"; public static final String WINDOWS_AMD64_CLASS = "it.tdlight.jni.tdlib.win.amd64.LoadLibrary";
public static final String OSX_AMD64_CLASS = "it.tdlight.jni.tdlib.osx.amd64.LoadLibrary"; public static final String OSX_AMD64_CLASS = "it.tdlight.jni.tdlib.osx.amd64.LoadLibrary";
} }

View File

@ -1,14 +1,14 @@
package it.tdlight.common.utils; package it.tdlight.common.utils;
public final class LibraryVersion { public final class LibraryVersion {
public static final String VERSION = "${project.version}"; public static final String VERSION = "${project.version}";
public static final String NATIVES_VERSION = "${natives-version}"; public static final String NATIVES_VERSION = "${natives-version}";
public static final String IMPLEMENTATION_NAME = "tdlight"; public static final String IMPLEMENTATION_NAME = "tdlight";
public static final String LINUX_X86_CLASS = "it.tdlight.jni.tdlight.linux.x86.LoadLibrary"; public static final String LINUX_X86_CLASS = "it.tdlight.jni.tdlight.linux.x86.LoadLibrary";
public static final String LINUX_AMD64_CLASS = "it.tdlight.jni.tdlight.linux.amd64.LoadLibrary"; public static final String LINUX_AMD64_CLASS = "it.tdlight.jni.tdlight.linux.amd64.LoadLibrary";
public static final String LINUX_AARCH64_CLASS = "it.tdlight.jni.tdlight.linux.aarch64.LoadLibrary"; public static final String LINUX_AARCH64_CLASS = "it.tdlight.jni.tdlight.linux.aarch64.LoadLibrary";
public static final String LINUX_ARMV6_CLASS = "it.tdlight.jni.tdlight.linux.armv6.LoadLibrary"; public static final String LINUX_ARMHF_CLASS = "it.tdlight.jni.tdlight.linux.armhf.LoadLibrary";
public static final String LINUX_ARMV7_CLASS = "it.tdlight.jni.tdlight.linux.armv7.LoadLibrary"; public static final String LINUX_S390X_CLASS = "it.tdlight.jni.tdlight.linux.s390x.LoadLibrary";
public static final String LINUX_PPC64LE_CLASS = "it.tdlight.jni.tdlight.linux.ppc64le.LoadLibrary"; public static final String LINUX_PPC64LE_CLASS = "it.tdlight.jni.tdlight.linux.ppc64le.LoadLibrary";
public static final String WINDOWS_AMD64_CLASS = "it.tdlight.jni.tdlight.win.amd64.LoadLibrary"; public static final String WINDOWS_AMD64_CLASS = "it.tdlight.jni.tdlight.win.amd64.LoadLibrary";
public static final String OSX_AMD64_CLASS = "it.tdlight.jni.tdlight.osx.amd64.LoadLibrary"; public static final String OSX_AMD64_CLASS = "it.tdlight.jni.tdlight.osx.amd64.LoadLibrary";
} }

View File

@ -37,7 +37,7 @@ public class Init {
if (!started) { if (!started) {
Os os = LoadLibrary.getOs(); Os os = LoadLibrary.getOs();
if (os == Os.win) { if (os == Os.WINDOWS) {
// Since 3.0.0, libraries for windows are statically compiled into tdjni.dll // Since 3.0.0, libraries for windows are statically compiled into tdjni.dll
} }

View File

@ -21,5 +21,11 @@ package it.tdlight.common.utils;
* Enumeration with all architectures recognized by this library. * Enumeration with all architectures recognized by this library.
*/ */
public enum Arch { public enum Arch {
amd64, x86, armv6, armv7, aarch64, ppc64le, unknown UNKNOWN,
AMD64,
I386,
ARMHF,
AARCH64,
PPC64LE,
S390X
} }

View File

@ -71,11 +71,11 @@ public class LoadLibrary {
Arch arch = getCpuArch(); Arch arch = getCpuArch();
Os os = getOs(); Os os = getOs();
if (arch == Arch.unknown) { if (arch == Arch.UNKNOWN) {
throw (CantLoadLibrary) new CantLoadLibrary().initCause(new IllegalStateException("Arch: \"" + System.getProperty("os.arch") + "\" is unknown")); throw (CantLoadLibrary) new CantLoadLibrary().initCause(new IllegalStateException("Arch: \"" + System.getProperty("os.arch") + "\" is unknown"));
} }
if (os == Os.unknown) { if (os == Os.UNKNOWN) {
throw (CantLoadLibrary) new CantLoadLibrary().initCause(new IllegalStateException("Os: \"" + System.getProperty("os.name") + "\" is unknown")); throw (CantLoadLibrary) new CantLoadLibrary().initCause(new IllegalStateException("Os: \"" + System.getProperty("os.name") + "\" is unknown"));
} }
@ -104,44 +104,44 @@ public class LoadLibrary {
Path tempFile = Paths.get(tempPath.toString(), libname + getExt(os)); Path tempFile = Paths.get(tempPath.toString(), libname + getExt(os));
Class<?> classForResource = null; Class<?> classForResource = null;
switch (os) { switch (os) {
case linux: case LINUX:
switch (arch) { switch (arch) {
case amd64: case AMD64:
try { try {
classForResource = Class.forName(LibraryVersion.LINUX_AMD64_CLASS); classForResource = Class.forName(LibraryVersion.LINUX_AMD64_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
// not found // not found
} }
break; break;
case x86: case I386:
try { try {
classForResource = Class.forName(LibraryVersion.LINUX_X86_CLASS); classForResource = Class.forName(LibraryVersion.LINUX_X86_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
// not found // not found
} }
break; break;
case aarch64: case AARCH64:
try { try {
classForResource = Class.forName(LibraryVersion.LINUX_AARCH64_CLASS); classForResource = Class.forName(LibraryVersion.LINUX_AARCH64_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
// not found // not found
} }
break; break;
case armv7: case ARMHF:
try { try {
classForResource = Class.forName(LibraryVersion.LINUX_ARMV7_CLASS); classForResource = Class.forName(LibraryVersion.LINUX_ARMHF_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
// not found // not found
} }
break; break;
case armv6: case S390X:
try { try {
classForResource = Class.forName(LibraryVersion.LINUX_ARMV6_CLASS); classForResource = Class.forName(LibraryVersion.LINUX_S390X_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
// not found // not found
} }
break; break;
case ppc64le: case PPC64LE:
try { try {
classForResource = Class.forName(LibraryVersion.LINUX_PPC64LE_CLASS); classForResource = Class.forName(LibraryVersion.LINUX_PPC64LE_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
@ -150,8 +150,8 @@ public class LoadLibrary {
break; break;
} }
break; break;
case osx: case OSX:
if (arch == Arch.amd64) { if (arch == Arch.AMD64) {
try { try {
classForResource = Class.forName(LibraryVersion.OSX_AMD64_CLASS); classForResource = Class.forName(LibraryVersion.OSX_AMD64_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
@ -159,16 +159,16 @@ public class LoadLibrary {
} }
} }
break; break;
case win: case WINDOWS:
switch (arch) { switch (arch) {
case amd64: case AMD64:
try { try {
classForResource = Class.forName(LibraryVersion.WINDOWS_AMD64_CLASS); classForResource = Class.forName(LibraryVersion.WINDOWS_AMD64_CLASS);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
// not found // not found
} }
break; break;
case x86: case I386:
break; break;
} }
break; break;
@ -195,52 +195,63 @@ public class LoadLibrary {
switch (architecture) { switch (architecture) {
case "amd64": case "amd64":
case "x86_64": case "x86_64":
return Arch.amd64; return Arch.AMD64;
case "i386": case "i386":
case "x86": case "x86":
return Arch.x86; case "386":
case "i686":
case "686":
return Arch.I386;
case "armv6": case "armv6":
return Arch.armv6;
case "arm": case "arm":
case "armhf":
case "aarch32": case "aarch32":
case "armv7": case "armv7":
case "armv7l": case "armv7l":
return Arch.armv7; return Arch.ARMHF;
case "arm64": case "arm64":
case "aarch64": case "aarch64":
return Arch.aarch64; case "armv8":
case "armv8l":
return Arch.AARCH64;
case "powerpc": case "powerpc":
case "powerpc64":
case "powerpc64le":
case "powerpc64el":
case "ppc":
case "ppc64": case "ppc64":
case "ppc64le":
case "ppc64el":
if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) // Java always returns ppc64 for all 64-bit powerpc but if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) // Java always returns ppc64 for all 64-bit powerpc but
return Arch.ppc64le; // powerpc64le (our target) is very different, it uses this condition to accurately identify the architecture return Arch.PPC64LE; // powerpc64le (our target) is very different, it uses this condition to accurately identify the architecture
else else
return Arch.unknown; return Arch.UNKNOWN;
default: default:
return Arch.unknown; return Arch.UNKNOWN;
} }
} }
public static Os getOs() { public static Os getOs() {
String os = System.getProperty("os.name").toLowerCase().trim(); String os = System.getProperty("os.name").toLowerCase().trim();
if (os.contains("linux")) if (os.contains("linux"))
return Os.linux; return Os.LINUX;
if (os.contains("windows")) if (os.contains("windows"))
return Os.win; return Os.WINDOWS;
if (os.contains("mac")) if (os.contains("mac"))
return Os.osx; return Os.OSX;
if (os.contains("darwin")) if (os.contains("darwin"))
return Os.osx; return Os.OSX;
return Os.unknown; return Os.UNKNOWN;
} }
private static String getExt(Os os) { private static String getExt(Os os) {
switch (os) { switch (os) {
case win: case WINDOWS:
return ".dll"; return ".dll";
case osx: case OSX:
return ".dylib"; return ".dylib";
case linux: case LINUX:
case unknown: case UNKNOWN:
default: default:
return ".so"; return ".so";
} }

View File

@ -20,9 +20,9 @@ package it.tdlight.common.utils;
/** /**
* Enumeration with all operating systems recognized by this library. * Enumeration with all operating systems recognized by this library.
*/ */
public enum Os { public enum Os {
linux, LINUX,
win, WINDOWS,
osx, OSX,
unknown UNKNOWN
} }

View File

@ -8,8 +8,8 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>1.0.0-SNAPSHOT</revision> <revision>1.0.0-SNAPSHOT</revision>
<api-version>3.3.72</api-version> <api-version>3.3.125</api-version>
<natives-version>3.3.74</natives-version> <natives-version>3.3.127</natives-version>
</properties> </properties>
<repositories> <repositories>
<repository> <repository>
@ -66,15 +66,15 @@
<version>1.0.3</version> <version>1.0.3</version>
</dependency> </dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>it.unimi.dsi</groupId> <groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId> <artifactId>fastutil</artifactId>
<version>8.5.2</version> <version>8.5.2</version>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<profiles> <profiles>
<profile> <profile>
<id>releaseDir</id> <id>releaseDir</id>
@ -156,7 +156,8 @@
<version>3.8.1</version> <version>3.8.1</version>
<configuration> <configuration>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
<release>8</release> <source>8</source>
<target>8</target>
<useIncrementalCompilation>false</useIncrementalCompilation> <useIncrementalCompilation>false</useIncrementalCompilation>
<excludes> <excludes>
<exclude>it/tdlight/tdlight/ClientManager.java</exclude> <exclude>it/tdlight/tdlight/ClientManager.java</exclude>
@ -190,10 +191,11 @@
</goals> </goals>
<configuration> <configuration>
<!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally --> <!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally -->
<release>8</release> <source>8</source>
<target>8</target>
<!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 --> <!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 -->
<excludes> <excludes>
<exclude>it/tdlight/tdlight/ClientManager.java</exclude> <exclude>it/tdlight/tdlight/ClientManager.java</exclude>
<exclude>module-info.java</exclude> <exclude>module-info.java</exclude>
</excludes> </excludes>
</configuration> </configuration>

View File

@ -8,8 +8,8 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>1.0.0-SNAPSHOT</revision> <revision>1.0.0-SNAPSHOT</revision>
<api-version>3.3.72</api-version> <api-version>3.3.125</api-version>
<natives-version>3.3.74</natives-version> <natives-version>3.3.127</natives-version>
</properties> </properties>
<repositories> <repositories>
<repository> <repository>
@ -66,15 +66,15 @@
<version>1.0.3</version> <version>1.0.3</version>
</dependency> </dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>it.unimi.dsi</groupId> <groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId> <artifactId>fastutil</artifactId>
<version>8.5.2</version> <version>8.5.2</version>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<profiles> <profiles>
<profile> <profile>
<id>releaseDir</id> <id>releaseDir</id>
@ -156,7 +156,8 @@
<version>3.8.1</version> <version>3.8.1</version>
<configuration> <configuration>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
<release>8</release> <source>8</source>
<target>8</target>
<useIncrementalCompilation>false</useIncrementalCompilation> <useIncrementalCompilation>false</useIncrementalCompilation>
<excludes> <excludes>
<exclude>it/tdlight/tdlib/ClientManager.java</exclude> <exclude>it/tdlight/tdlib/ClientManager.java</exclude>
@ -190,10 +191,11 @@
</goals> </goals>
<configuration> <configuration>
<!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally --> <!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally -->
<release>8</release> <source>8</source>
<target>8</target>
<!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 --> <!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 -->
<excludes> <excludes>
<exclude>it/tdlight/tdlib/ClientManager.java</exclude> <exclude>it/tdlight/tdlib/ClientManager.java</exclude>
<exclude>module-info.java</exclude> <exclude>module-info.java</exclude>
</excludes> </excludes>
</configuration> </configuration>