plugins { id 'edu.wpi.first.WpilibTools' version '1.1.0' } import java.nio.file.Path apply plugin: "cpp" apply plugin: "java" apply plugin: "google-test-test-suite" apply plugin: "edu.wpi.first.NativeUtils" apply from: "${rootDir}/shared/config.gradle" apply from: "${rootDir}/versioningHelper.gradle" test { useJUnitPlatform() } sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 wpilibTools.deps.wpilibVersion = wpilibVersion println("Building for WPILib ${wpilibTools.deps.wpilibVersion}") // From wpilib shared/config.gradle: // NativeUtils adds the following OpenCV warning suppression for Linux, but not // for macOS // https://github.com/opencv/opencv/issues/20269 nativeUtils.platformConfigs.osxuniversal.cppCompiler.args.add("-Wno-deprecated-anon-enum-enum-conversion") nativeUtils.platformConfigs.linuxathena.cppCompiler.args.add("-Wno-deprecated-anon-enum-enum-conversion") // nativeUtils.platformConfigs.linuxx64.cppCompiler.args.add("-Wno-deprecated-anon-enum-enum-conversion") // Apply Java configuration dependencies { implementation project(":photon-targeting") // WPILib deps implementation wpilibTools.deps.wpilibJava("wpiutil") implementation wpilibTools.deps.wpilibJava("cameraserver") implementation wpilibTools.deps.wpilibJava("cscore") implementation wpilibTools.deps.wpilibJava("wpimath") implementation wpilibTools.deps.wpilibJava("wpinet") implementation wpilibTools.deps.wpilibJava("hal") implementation wpilibTools.deps.wpilibJava("ntcore") implementation wpilibTools.deps.wpilibJava("wpilibj") implementation wpilibTools.deps.wpilibJava("apriltag") // Jackson implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.4" implementation "com.fasterxml.jackson.core:jackson-core:2.12.4" implementation "com.fasterxml.jackson.core:jackson-databind:2.12.4" implementation "edu.wpi.first.thirdparty.frc2024.opencv:opencv-java:$openCVversion" implementation "edu.wpi.first.thirdparty.frc2024.opencv:opencv-jni:$openCVversion:$jniPlatform" implementation "org.ejml:ejml-simple:0.42" // Junit testImplementation wpilibTools.deps.wpilibJava("cscore") testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2") testImplementation("org.junit.jupiter:junit-jupiter-params:5.8.2") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.2") } // Set up exports properly nativeUtils { exportsConfigs { // Main library is just default empty. This will export everything Photon { } } } model { components { Photon(NativeLibrarySpec) { sources { cpp { source { srcDirs "src/main/native/cpp" include "**/*.cpp" } exportedHeaders { srcDirs "src/main/native/include" srcDirs "src/generate/native/include" } } } nativeUtils.useRequiredLibrary(it, "wpilib_shared") nativeUtils.useRequiredLibrary(it, "apriltag_shared") nativeUtils.useRequiredLibrary(it, "opencv_shared") } } testSuites { cppTest(GoogleTestTestSuiteSpec) { testing $.components.Photon sources.cpp { source { srcDir "src/test/native/cpp" include "**/*.cpp" } } nativeUtils.useRequiredLibrary(it, "wpilib_executable_shared") nativeUtils.useRequiredLibrary(it, "apriltag_shared") nativeUtils.useRequiredLibrary(it, "googletest_static") nativeUtils.useRequiredLibrary(it, "opencv_shared") } } } def photonlibFileInput = file("src/generate/photonlib.json.in") ext.photonlibFileOutput = file("$buildDir/generated/vendordeps/photonlib.json") task generateVendorJson() { description = "Generates the vendor JSON file" group = "PhotonVision" outputs.file photonlibFileOutput inputs.file photonlibFileInput println "Writing vendor JSON ${pubVersion} to $photonlibFileOutput" if (photonlibFileOutput.exists()) { photonlibFileOutput.delete() } photonlibFileOutput.parentFile.mkdirs() def read = photonlibFileInput.text .replace('${photon_version}', pubVersion) .replace('${frc_year}', frcYear) photonlibFileOutput.text = read outputs.upToDateWhen { false } } build.mustRunAfter generateVendorJson task writeCurrentVersion { def versionFileIn = file("${rootDir}/shared/PhotonVersion.java.in") writePhotonVersionFile(versionFileIn, Path.of("$projectDir", "src", "main", "java", "org", "photonvision", "PhotonVersion.java"), versionString) versionFileIn = file("${rootDir}/shared/PhotonVersion.h.in") writePhotonVersionFile(versionFileIn, Path.of("$projectDir", "src", "generate", "native", "include", "PhotonVersion.h"), versionString) } build.mustRunAfter writeCurrentVersion tasks.withType(Javadoc) { options.encoding = 'UTF-8' } apply from: "publish.gradle" def testNativeConfigName = 'wpilibTestNatives' def testNativeConfig = configurations.create(testNativeConfigName) def folder = project.layout.buildDirectory.dir('NativeTest') def testNativeTasks = wpilibTools.createExtractionTasks { taskPostfix = "Test" configurationName = testNativeConfigName rootTaskFolder.set(folder) } testNativeTasks.addToSourceSetResources(sourceSets.test) testNativeConfig.dependencies.add wpilibTools.deps.cscore() testNativeConfig.dependencies.add wpilibTools.deps.wpilib("ntcore") testNativeConfig.dependencies.add wpilibTools.deps.wpilib("wpinet") testNativeConfig.dependencies.add wpilibTools.deps.wpilib("hal") testNativeConfig.dependencies.add wpilibTools.deps.wpilib("wpiutil") testNativeConfig.dependencies.add wpilibTools.deps.wpilib("wpimath") testNativeConfig.dependencies.add wpilibTools.deps.cscore()