From fbe6ba938abebfdbd323ee725766dac88b0376a2 Mon Sep 17 00:00:00 2001 From: Thad House Date: Thu, 2 Apr 2026 10:12:32 -0700 Subject: [PATCH] Make configuring the wpilib version easier --- .../wpilib/toolchain/ToolchainExtension.java | 37 +++++++++++++++++++ .../java/org/wpilib/toolchain/WPILibHome.java | 35 ------------------ .../toolchain/arm64/Arm64ToolchainPlugin.java | 2 +- .../opensdk/OpenSdkToolchainBase.java | 7 +++- .../systemcore/SystemCoreToolchainPlugin.java | 8 ++-- 5 files changed, 46 insertions(+), 43 deletions(-) delete mode 100644 ToolchainPlugin/src/main/java/org/wpilib/toolchain/WPILibHome.java diff --git a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/ToolchainExtension.java b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/ToolchainExtension.java index f254380..cc1b81b 100644 --- a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/ToolchainExtension.java +++ b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/ToolchainExtension.java @@ -1,5 +1,6 @@ package org.wpilib.toolchain; +import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -10,6 +11,8 @@ import org.gradle.api.Action; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.Project; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.provider.Property; import org.gradle.internal.logging.text.DiagnosticsVisitor; import org.gradle.internal.os.OperatingSystem; import org.gradle.nativeplatform.toolchain.Gcc; @@ -28,6 +31,18 @@ public class ToolchainExtension { private final Map> stripExcludeMap = new HashMap<>(); private final Map gccExtensionMap = new HashMap<>(); + private final Property wpilibYear; + + public Property getWpilibYear() { + return wpilibYear; + } + + private final DirectoryProperty wpilibHome; + + public DirectoryProperty getWpilibHome() { + return wpilibHome; + } + public Map getGccExtensionMap() { return gccExtensionMap; } @@ -47,11 +62,33 @@ public ToolchainGraphBuildService getToolchainGraphService() { return rootExtension; } + private static File getDefaultHomeFolder() { + File baseFolder; + if (OperatingSystem.current().isWindows()) { + String publicFolder = System.getenv("PUBLIC"); + if (publicFolder == null) { + publicFolder = "C:\\Users\\Public"; + } + baseFolder = new File(publicFolder, "wpilib"); + } else { + baseFolder = new File(System.getProperty("user.home"), "wpilib"); + } + return baseFolder; + } + @Inject public ToolchainExtension(Project project, ToolchainGraphBuildService rootExtension, ExecOperations operations, ObjectFactory objectFactory) { this.project = project; this.rootExtension = rootExtension; + wpilibYear = objectFactory.property(String.class); + wpilibHome = objectFactory.directoryProperty(); + + wpilibYear.convention("Unset"); + + var fakeProvider = objectFactory.directoryProperty().fileProvider(project.provider(() -> getDefaultHomeFolder())).dir(wpilibYear); + wpilibHome.convention(fakeProvider); + crossCompilers = objectFactory.domainObjectContainer(CrossCompilerConfiguration.class, name -> { return project.getObjects().newInstance(CrossCompilerConfiguration.class, name); }); diff --git a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/WPILibHome.java b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/WPILibHome.java deleted file mode 100644 index 6474c63..0000000 --- a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/WPILibHome.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.wpilib.toolchain; - -import org.gradle.internal.os.OperatingSystem; - -import java.io.File; - -public class WPILibHome { - - private String year; - private File wpilibFolder; - - public WPILibHome(String year) { - this.year = year; - - File baseFolder; - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv("PUBLIC"); - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public"; - } - baseFolder = new File(publicFolder, "wpilib"); - } else { - baseFolder = new File(System.getProperty("user.home"), "wpilib"); - } - this.wpilibFolder = new File(baseFolder, year); - } - - public File get() { - return wpilibFolder; - } - - public String year() { - return year; - } -} diff --git a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/arm64/Arm64ToolchainPlugin.java b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/arm64/Arm64ToolchainPlugin.java index d8d3cbe..ec5409b 100644 --- a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/arm64/Arm64ToolchainPlugin.java +++ b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/arm64/Arm64ToolchainPlugin.java @@ -34,7 +34,7 @@ public void apply(Project project) { opensdk = new OpenSdkToolchainBase(baseToolchainName, arm64Ext, project, Arm64ToolchainExtension.INSTALL_SUBDIR, "bookworm", project.provider(() -> "aarch64-bookworm-linux-gnu"), - toolchainExt.getToolchainGraphService(), operations); + toolchainExt.getToolchainGraphService(), operations, toolchainExt); CrossCompilerConfiguration configuration = project.getObjects().newInstance(CrossCompilerConfiguration.class, NativePlatforms.linuxarm64); diff --git a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/opensdk/OpenSdkToolchainBase.java b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/opensdk/OpenSdkToolchainBase.java index 097993e..fd61cbf 100644 --- a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/opensdk/OpenSdkToolchainBase.java +++ b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/opensdk/OpenSdkToolchainBase.java @@ -16,6 +16,7 @@ import org.wpilib.toolchain.NativePlatforms; import org.wpilib.toolchain.ToolchainDescriptor; import org.wpilib.toolchain.ToolchainDiscoverer; +import org.wpilib.toolchain.ToolchainExtension; import org.wpilib.toolchain.ToolchainGraphBuildService; import org.wpilib.toolchain.ToolchainPlugin; @@ -28,13 +29,15 @@ public class OpenSdkToolchainBase { private final Provider toolchainPrefix; private final ToolchainGraphBuildService rootExtension; private final ExecOperations operations; + private final ToolchainExtension toolchainExt; public OpenSdkToolchainBase(String baseToolchainName, OpenSdkToolchainExtension tcExt, Project project, String installSubdir, String archiveSubdir, Provider toolchainPrefix, - ToolchainGraphBuildService rootExtension, ExecOperations operations) { + ToolchainGraphBuildService rootExtension, ExecOperations operations, ToolchainExtension toolchainExt) { this.baseToolchainName = baseToolchainName; this.tcExt = tcExt; this.project = project; + this.toolchainExt = toolchainExt; this.installSubdir = installSubdir; this.archiveSubDir = archiveSubdir; this.toolchainPrefix = toolchainPrefix; @@ -91,7 +94,7 @@ public AbstractToolchainInstaller installerFor(OperatingSystem os, Provider fp = project.provider(() -> { - String year = tcExt.getToolchainVersion().get().split("-")[0].toLowerCase(); + String year = toolchainExt.getWpilibYear().get(); File installLoc = toolchainInstallLoc(year, installSubdir); return installLoc; }); diff --git a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/systemcore/SystemCoreToolchainPlugin.java b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/systemcore/SystemCoreToolchainPlugin.java index df77572..d4d6714 100644 --- a/ToolchainPlugin/src/main/java/org/wpilib/toolchain/systemcore/SystemCoreToolchainPlugin.java +++ b/ToolchainPlugin/src/main/java/org/wpilib/toolchain/systemcore/SystemCoreToolchainPlugin.java @@ -9,7 +9,6 @@ import org.gradle.api.provider.Provider; import org.gradle.process.ExecOperations; -import org.wpilib.toolchain.WPILibHome; import org.wpilib.toolchain.NativePlatforms; import org.wpilib.toolchain.ToolchainDescriptor; import org.wpilib.toolchain.ToolchainDiscoverer; @@ -22,6 +21,7 @@ public class SystemCoreToolchainPlugin implements Plugin { public static final String toolchainName = "systemCore"; public static final String baseToolchainName = "arm64-bookworm"; + private ToolchainExtension toolchainExt; private SystemCoreToolchainExtension systemcoreExt; private Project project; private OpenSdkToolchainBase opensdk; @@ -41,7 +41,7 @@ public void apply(Project project) { ToolchainExtension toolchainExt = project.getExtensions().getByType(ToolchainExtension.class); opensdk = new OpenSdkToolchainBase(baseToolchainName, systemcoreExt, project, - SystemCoreToolchainExtension.INSTALL_SUBDIR, "bookworm", project.provider(() -> "aarch64-bookworm-linux-gnu"), toolchainExt.getToolchainGraphService(), operations); + SystemCoreToolchainExtension.INSTALL_SUBDIR, "bookworm", project.provider(() -> "aarch64-bookworm-linux-gnu"), toolchainExt.getToolchainGraphService(), operations, toolchainExt); CrossCompilerConfiguration configuration = project.getObjects().newInstance(CrossCompilerConfiguration.class, NativePlatforms.systemcore); @@ -67,9 +67,7 @@ public void apply(Project project) { public void populateDescriptor(ToolchainDescriptor descriptor) { Provider fp = project.provider(() -> { - String year = "2027_alpha1"; - File wpilibHomeLoc = new File(new WPILibHome(year).get(), "systemcore"); - return wpilibHomeLoc; + return toolchainExt.getWpilibHome().dir("systemcore").get().getAsFile(); }); // Add WPILib Home first, as we want it searched first