diff --git a/buildSrc/src/main/java/gradlebuild/JniPlugin.java b/buildSrc/src/main/java/gradlebuild/JniPlugin.java index 408a0cd5..7d04bb0a 100644 --- a/buildSrc/src/main/java/gradlebuild/JniPlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniPlugin.java @@ -253,6 +253,7 @@ void createPlatforms(PlatformContainer platformContainer) { addPlatform(platformContainer, "osx_aarch64", "osx", "aarch64"); addPlatform(platformContainer, "linux_amd64", "linux", "amd64"); addPlatform(platformContainer, "linux_aarch64", "linux", "aarch64"); + addPlatform(platformContainer, "linux_riscv64", "linux", "riscv64"); addPlatform(platformContainer, "windows_i386", "windows", "i386"); addPlatform(platformContainer, "windows_amd64", "windows", "amd64"); addPlatform(platformContainer, "windows_aarch64", "windows", "aarch64"); @@ -268,6 +269,7 @@ void createToolChains(NativeToolChainRegistry toolChainRegistry) { // The core Gradle toolchain for gcc only targets x86 and x86_64 out of the box. // https://github.com/gradle/gradle/blob/36614ee523e5906ddfa1fed9a5dc00a5addac1b0/subprojects/platform-native/src/main/java/org/gradle/nativeplatform/toolchain/internal/gcc/AbstractGccCompatibleToolChain.java toolChain.target("linux_aarch64"); + toolChain.target("linux_riscv64"); }); } if (toolChainRegistry.stream().noneMatch(toolChain -> toolChain.getName().equals("clang"))) { diff --git a/buildSrc/src/main/java/gradlebuild/NcursesPlugin.java b/buildSrc/src/main/java/gradlebuild/NcursesPlugin.java index ec219d83..8ab93565 100644 --- a/buildSrc/src/main/java/gradlebuild/NcursesPlugin.java +++ b/buildSrc/src/main/java/gradlebuild/NcursesPlugin.java @@ -30,7 +30,7 @@ public class NcursesPlugin extends RuleSource { if (!os.isLinux()) { builder.add(NCURSES_5); } else { - for (String d : ImmutableList.of("/lib", "/lib64", "/lib/x86_64-linux-gnu", "/lib/aarch64-linux-gnu", "/usr/lib")) { + for (String d : ImmutableList.of("/lib", "/lib64", "/lib/x86_64-linux-gnu", "/lib/aarch64-linux-gnu", "/lib/riscv64-linux-gnu", "/usr/lib")) { File libDir = new File(d); if (new File(libDir, "libncurses.so.6").isFile() || new File(libDir, "libncursesw.so.6").isFile()) { builder.add(new NcursesVersion("6")); @@ -52,6 +52,8 @@ public class NcursesPlugin extends RuleSource { addPlatform(platformContainer, "linux_amd64_ncurses6", "linux", "amd64"); addPlatform(platformContainer, "linux_aarch64_ncurses5", "linux", "aarch64"); addPlatform(platformContainer, "linux_aarch64_ncurses6", "linux", "aarch64"); + addPlatform(platformContainer, "linux_riscv64_ncurses5", "linux", "riscv64"); + addPlatform(platformContainer, "linux_riscv64_ncurses6", "linux", "riscv64"); } @Mutate void configureBinaries(@Each NativeBinarySpecInternal binarySpec, Collection ncursesVersions) { @@ -80,6 +82,8 @@ private boolean isNcursesVersion(NativePlatform targetPlatform, NcursesVersion n // https://github.com/gradle/gradle/blob/36614ee523e5906ddfa1fed9a5dc00a5addac1b0/subprojects/platform-native/src/main/java/org/gradle/nativeplatform/toolchain/internal/gcc/AbstractGccCompatibleToolChain.java toolChain.target("linux_aarch64_ncurses5"); toolChain.target("linux_aarch64_ncurses6"); + toolChain.target("linux_riscv64_ncurses5"); + toolChain.target("linux_riscv64_ncurses6"); }); } diff --git a/native-platform/src/main/java/net/rubygrapefruit/platform/SystemInfo.java b/native-platform/src/main/java/net/rubygrapefruit/platform/SystemInfo.java index 20a9b71b..d8c8f7d0 100644 --- a/native-platform/src/main/java/net/rubygrapefruit/platform/SystemInfo.java +++ b/native-platform/src/main/java/net/rubygrapefruit/platform/SystemInfo.java @@ -21,7 +21,7 @@ */ @ThreadSafe public interface SystemInfo extends NativeIntegration { - enum Architecture { i386, amd64, aarch64 } + enum Architecture { i386, amd64, aarch64, riscv64} /** * Returns the name of the kernel for the current operating system. diff --git a/native-platform/src/main/java/net/rubygrapefruit/platform/internal/MutableSystemInfo.java b/native-platform/src/main/java/net/rubygrapefruit/platform/internal/MutableSystemInfo.java index 460b32c5..74be9208 100644 --- a/native-platform/src/main/java/net/rubygrapefruit/platform/internal/MutableSystemInfo.java +++ b/native-platform/src/main/java/net/rubygrapefruit/platform/internal/MutableSystemInfo.java @@ -62,6 +62,9 @@ public Architecture getArchitecture() { if (machineArchitecture.equals("aarch64") || machineArchitecture.equals("arm64")) { return Architecture.aarch64; } + if (machineArchitecture.equals("riscv64")) { + return Architecture.riscv64; + } throw new NativeException(String.format("Cannot determine architecture from kernel architecture name '%s'.", machineArchitecture)); } diff --git a/native-platform/src/main/java/net/rubygrapefruit/platform/internal/Platform.java b/native-platform/src/main/java/net/rubygrapefruit/platform/internal/Platform.java index 81c1db76..df318402 100644 --- a/native-platform/src/main/java/net/rubygrapefruit/platform/internal/Platform.java +++ b/native-platform/src/main/java/net/rubygrapefruit/platform/internal/Platform.java @@ -62,6 +62,8 @@ public static Platform current() { platform = new Linux32Bit(); } else if (arch.equals("aarch64")) { platform = new LinuxAarch64(); + } else if (arch.equals("riscv64")) { + platform = new LinuxRiscv64(); } } else if (osName.contains("os x") || osName.contains("darwin")) { if (arch.equals("i386")) { @@ -306,6 +308,13 @@ public String getId() { } } + private static class LinuxRiscv64 extends Linux { + @Override + public String getId() { + return "linux-riscv64"; + } + } + private abstract static class FreeBSD extends Unix { @Override public List getLibraryVariants() {