import edu.wpi.first.toolchain.* plugins { id 'cpp' id 'java' id 'google-test' id 'edu.wpi.first.wpilib.repositories.WPILibRepositoriesPlugin' version '2020.2' id 'edu.wpi.first.NativeUtils' version '2025.6.0' id 'edu.wpi.first.GradleJni' version '1.1.0' id 'edu.wpi.first.GradleVsCode' version '2.1.0' } // WPILib Version ext.wpilibVersion = "2025.+" repositories { mavenCentral() } if (project.hasProperty('releaseMode')) { wpilibRepositories.addAllReleaseRepositories(project) } else { wpilibRepositories.addAllDevelopmentRepositories(project) } java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } var javaVersion = "17" // Apply C++ configuration apply from: 'config.gradle' // Apply Java configuration dependencies { implementation "edu.wpi.first.cscore:cscore-java:$wpilibVersion" implementation "edu.wpi.first.cameraserver:cameraserver-java:$wpilibVersion" implementation "edu.wpi.first.ntcore:ntcore-java:$wpilibVersion" implementation "edu.wpi.first.wpilibj:wpilibj-java:$wpilibVersion" implementation "edu.wpi.first.wpiutil:wpiutil-java:$wpilibVersion" implementation "edu.wpi.first.wpimath:wpimath-java:$wpilibVersion" implementation "edu.wpi.first.wpiunits:wpiunits-java:$wpilibVersion" implementation "edu.wpi.first.hal:hal-java:$wpilibVersion" implementation "org.ejml:ejml-simple:0.43.1" implementation "com.fasterxml.jackson.core:jackson-annotations:2.15.2" implementation "com.fasterxml.jackson.core:jackson-core:2.15.2" implementation "com.fasterxml.jackson.core:jackson-databind:2.15.2" implementation 'edu.wpi.first.thirdparty.frc2024.opencv:opencv-java:4.8.0-4' testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } // Set up java tests test { useJUnitPlatform() systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' testLogging { events "failed" exceptionFormat "full" } } if (project.hasProperty('onlylinuxathena') || project.hasProperty('onlylinuxarm32') || project.hasProperty('onlylinuxarm64') || project.hasProperty('onlywindowsarm64') || project.hasProperty('onlylinuxsystemcore')) { test.enabled = false } // Setup Javadocs to link back to WPILib docs javadoc { options { links "https://docs.oracle.com/en/java/javase/$javaVersion/docs/api/", 'https://github.wpilib.org/allwpilib/docs/release/java/' } } // Set up exports properly nativeUtils { exportsConfigs { // Main library is just default empty. This will export everything Vendor { } } privateExportsConfigs { // Only export explicit symbols from driver library VendorDriver { exportsFile = project.file("src/main/driver/symbols.txt") } } } ext.getCurrentArch = { return NativePlatforms.desktop } def systemArch = getCurrentArch() model { components { Vendor(NativeLibrarySpec) { sources { cpp { source { srcDirs 'src/main/native/cpp' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include' } } } binaries.all { lib library: 'VendorDriver', linkage: 'shared' } nativeUtils.useRequiredLibrary(it, 'wpilib_shared') } VendorDriver(JniNativeLibrarySpec) { enableCheckTask true javaCompileTasks << compileJava jniCrossCompileOptions << JniCrossCompileOptions(nativeUtils.wpi.platforms.roborio) // Leave these for future proofing jniCrossCompileOptions << JniCrossCompileOptions(nativeUtils.wpi.platforms.linuxarm32) jniCrossCompileOptions << JniCrossCompileOptions(nativeUtils.wpi.platforms.linuxarm64) sources { cpp { source { srcDirs 'src/main/driver/cpp' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/driver/include' } } } nativeUtils.useRequiredLibrary(it, "driver_shared") } } testSuites { VendorTest { sources.cpp { source { srcDir 'src/test/native/cpp' include '**/*.cpp' } } binaries.all { lib library: 'VendorDriver', linkage: 'shared' def arch = it.targetPlatform.name if (systemArch == arch && it.buildType.name == 'debug') { def filePath = it.tasks.install.installDirectory.get().toString() + File.separatorChar + 'lib' test.dependsOn it.tasks.install test.systemProperty 'java.library.path', filePath test.environment 'LD_LIBRARY_PATH', filePath test.workingDir filePath } } nativeUtils.useRequiredLibrary(it, "wpilib_executable_shared", "googletest_static") } VendorDriverTest { sources.cpp { source { srcDir 'src/test/driver/cpp' include '**/*.cpp' } } nativeUtils.useRequiredLibrary(it, "wpilib_executable_shared", "googletest_static") } } } apply from: 'publish.gradle' wrapper { gradleVersion '8.11' }