mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
This enables frc-docs to use RLIs for things that are currently in-line code blocks, and ensures they compile, which is important with the 2027 breaking changes coming. They are kept separate from the examples to ensure they don't polute the VSCode examples finder. Adds the Encoder snippets used in the frc-docs Encoder article as the first instance of this.
263 lines
13 KiB
Groovy
263 lines
13 KiB
Groovy
import edu.wpi.first.toolchain.NativePlatforms
|
|
|
|
apply plugin: 'java'
|
|
apply plugin: 'jacoco'
|
|
|
|
ext {
|
|
useJava = true
|
|
useCpp = false
|
|
skipDev = true
|
|
}
|
|
|
|
apply from: "${rootDir}/shared/opencv.gradle"
|
|
|
|
dependencies {
|
|
implementation project(':wpilibj')
|
|
implementation project(':apriltag')
|
|
implementation project(':wpimath')
|
|
implementation project(':hal')
|
|
implementation project(':wpiutil')
|
|
implementation project(':wpinet')
|
|
implementation project(':ntcore')
|
|
implementation project(':cscore')
|
|
implementation project(':cameraserver')
|
|
implementation project(':wpilibNewCommands')
|
|
implementation project(':romiVendordep')
|
|
implementation project(':xrpVendordep')
|
|
implementation project(':epilogue-runtime')
|
|
annotationProcessor project(':epilogue-processor')
|
|
|
|
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
|
|
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
|
}
|
|
|
|
jacoco {
|
|
toolVersion = "0.8.10"
|
|
}
|
|
|
|
jacocoTestReport {
|
|
reports {
|
|
xml.required = true
|
|
html.required = true
|
|
}
|
|
}
|
|
|
|
if (!project.hasProperty('skipJavaFormat')) {
|
|
apply plugin: 'pmd'
|
|
|
|
pmd {
|
|
consoleOutput = true
|
|
reportsDir = file("$project.buildDir/reports/pmd")
|
|
ruleSetFiles = files(new File(rootDir, "styleguide/pmd-ruleset.xml"))
|
|
ruleSets = []
|
|
}
|
|
}
|
|
|
|
gradle.projectsEvaluated {
|
|
tasks.withType(JavaCompile) {
|
|
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-Werror"
|
|
}
|
|
}
|
|
|
|
tasks.register('buildDesktopJava') {
|
|
it.dependsOn tasks.withType(JavaCompile)
|
|
}
|
|
|
|
apply from: 'publish.gradle'
|
|
|
|
ext {
|
|
templateDirectory = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/templates/")
|
|
templateFile = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/templates/templates.json")
|
|
exampleDirectory = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/examples/")
|
|
exampleFile = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/examples/examples.json")
|
|
commandDirectory = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/commands/")
|
|
commandFile = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/commands/commands.json")
|
|
snippetsDirectory = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/snippets/")
|
|
snippetsFile = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/snippets/snippets.json")
|
|
}
|
|
|
|
apply plugin: 'cpp'
|
|
apply plugin: 'edu.wpi.first.NativeUtils'
|
|
|
|
apply from: '../shared/config.gradle'
|
|
|
|
|
|
model {
|
|
components {
|
|
wpilibjExamplesDev(NativeExecutableSpec) {
|
|
targetBuildTypes 'debug'
|
|
sources {
|
|
cpp {
|
|
source {
|
|
srcDirs 'src/dev/native/cpp'
|
|
include '**/*.cpp'
|
|
}
|
|
exportedHeaders {
|
|
srcDirs 'src/dev/native/include'
|
|
}
|
|
}
|
|
}
|
|
binaries.all { binary ->
|
|
lib project: ':apriltag', library: 'apriltag', linkage: 'shared'
|
|
lib project: ':apriltag', library: 'apriltagJNIShared', linkage: 'shared'
|
|
lib project: ':wpimath', library: 'wpimath', linkage: 'shared'
|
|
lib project: ':wpimath', library: 'wpimathJNIShared', linkage: 'shared'
|
|
project(':ntcore').addNtcoreDependency(binary, 'shared')
|
|
project(':ntcore').addNtcoreJniDependency(binary)
|
|
lib project: ':cscore', library: 'cscore', linkage: 'shared'
|
|
lib project: ':cscore', library: 'cscoreJNIShared', linkage: 'shared'
|
|
project(':hal').addHalDependency(binary, 'shared')
|
|
project(':hal').addHalJniDependency(binary)
|
|
lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
|
|
lib project: ':wpiutil', library: 'wpiutilJNIShared', linkage: 'shared'
|
|
lib project: ':wpinet', library: 'wpinet', linkage: 'shared'
|
|
lib project: ':wpinet', library: 'wpinetJNIShared', linkage: 'shared'
|
|
if (binary.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
|
|
nativeUtils.useRequiredLibrary(binary, 'ni_link_libraries', 'ni_runtime_libraries')
|
|
} else {
|
|
def systemArch = getCurrentArch()
|
|
if (binary.targetPlatform.name == systemArch) {
|
|
lib project: ":simulation:halsim_gui", library: 'halsim_gui', linkage: 'shared'
|
|
}
|
|
}
|
|
nativeUtils.useRequiredLibrary(binary, 'opencv_shared')
|
|
}
|
|
}
|
|
}
|
|
tasks {
|
|
def c = $.components
|
|
def found = false
|
|
c.each {
|
|
if (it in NativeExecutableSpec && it.name == "wpilibjExamplesDev") {
|
|
it.binaries.each {
|
|
if (!found) {
|
|
def arch = it.targetPlatform.name
|
|
if (arch == NativePlatforms.desktop) {
|
|
found = true
|
|
def filePath = it.tasks.install.installDirectory.get().toString() + File.separatorChar + 'lib'
|
|
|
|
def doFirstTask = { task ->
|
|
def extensions = ''
|
|
it.tasks.install.installDirectory.get().getAsFile().eachFileRecurse {
|
|
def name = it.name
|
|
if (!(name.endsWith('.dll') || name.endsWith('.so') || name.endsWith('.dylib'))) {
|
|
return
|
|
}
|
|
def file = it
|
|
if (name.startsWith("halsim_gui") || name.startsWith("libhalsim_gui".toString())) {
|
|
extensions += file.absolutePath + File.pathSeparator
|
|
}
|
|
}
|
|
if (extensions != '') {
|
|
task.environment 'HALSIM_EXTENSIONS', extensions
|
|
}
|
|
}
|
|
|
|
project.tasks.create("runCpp", Exec) { task ->
|
|
dependsOn it.tasks.install
|
|
commandLine it.tasks.install.runScriptFile.get().asFile.toString()
|
|
test.dependsOn it.tasks.install
|
|
test.systemProperty 'java.library.path', filePath
|
|
}
|
|
|
|
new groovy.json.JsonSlurper().parseText(exampleFile.text).each { entry ->
|
|
project.tasks.create("run${entry.foldername}", JavaExec) { run ->
|
|
run.group "run examples"
|
|
run.mainClass = "edu.wpi.first.wpilibj.examples." + entry.foldername + "." + entry.mainclass
|
|
run.classpath = sourceSets.main.runtimeClasspath
|
|
run.dependsOn it.tasks.install
|
|
run.systemProperty 'java.library.path', filePath
|
|
doFirst { doFirstTask(run) }
|
|
|
|
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) {
|
|
run.jvmArgs = ['-XstartOnFirstThread']
|
|
}
|
|
}
|
|
project.tasks.create("test${entry.foldername}", Test) { testTask ->
|
|
testTask.group "verification"
|
|
testTask.useJUnitPlatform()
|
|
testTask.filter {
|
|
includeTestsMatching("edu.wpi.first.wpilibj.examples.${entry.foldername}.*")
|
|
// armsimulation regularly fails on CI Win64Debug
|
|
if (project.hasProperty('ciDebugOnly')) {
|
|
excludeTestsMatching("edu.wpi.first.wpilibj.examples.armsimulation.*")
|
|
}
|
|
setFailOnNoMatchingTests(false)
|
|
}
|
|
test.filter {
|
|
excludeTestsMatching("edu.wpi.first.wpilibj.examples.${entry.foldername}.*")
|
|
setFailOnNoMatchingTests(false)
|
|
}
|
|
testTask.testClassesDirs = sourceSets.test.output.classesDirs
|
|
testTask.classpath = sourceSets.test.runtimeClasspath
|
|
testTask.dependsOn it.tasks.install
|
|
|
|
testTask.systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
|
|
testTask.testLogging {
|
|
events "failed"
|
|
exceptionFormat "full"
|
|
}
|
|
testTask.systemProperty 'java.library.path', filePath
|
|
|
|
if (project.hasProperty('onlylinuxathena') || project.hasProperty('onlylinuxarm32') || project.hasProperty('onlylinuxarm64') || project.hasProperty('onlywindowsarm64')) {
|
|
testTask.enabled = false
|
|
}
|
|
test.dependsOn(testTask)
|
|
}
|
|
}
|
|
new groovy.json.JsonSlurper().parseText(snippetsFile.text).each { entry ->
|
|
project.tasks.create("runSnippet${entry.foldername}", JavaExec) { run ->
|
|
run.group "run snippets"
|
|
run.mainClass = "edu.wpi.first.wpilibj.snippets." + entry.foldername + "." + entry.mainclass
|
|
run.classpath = sourceSets.main.runtimeClasspath
|
|
run.dependsOn it.tasks.install
|
|
run.systemProperty 'java.library.path', filePath
|
|
doFirst { doFirstTask(run) }
|
|
|
|
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) {
|
|
run.jvmArgs = ['-XstartOnFirstThread']
|
|
}
|
|
}
|
|
project.tasks.create("testSnippet${entry.foldername}", Test) { testTask ->
|
|
testTask.group "verification"
|
|
testTask.useJUnitPlatform()
|
|
testTask.filter {
|
|
includeTestsMatching("edu.wpi.first.wpilibj.snippets.${entry.foldername}.*")
|
|
setFailOnNoMatchingTests(false)
|
|
}
|
|
test.filter {
|
|
excludeTestsMatching("edu.wpi.first.wpilibj.snippets.${entry.foldername}.*")
|
|
setFailOnNoMatchingTests(false)
|
|
}
|
|
testTask.testClassesDirs = sourceSets.test.output.classesDirs
|
|
testTask.classpath = sourceSets.test.runtimeClasspath
|
|
testTask.dependsOn it.tasks.install
|
|
|
|
testTask.systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
|
|
testTask.testLogging {
|
|
events "failed"
|
|
exceptionFormat "full"
|
|
}
|
|
testTask.systemProperty 'java.library.path', filePath
|
|
|
|
if (project.hasProperty('onlylinuxathena') || project.hasProperty('onlylinuxarm32') || project.hasProperty('onlylinuxarm64') || project.hasProperty('onlywindowsarm64')) {
|
|
testTask.enabled = false
|
|
}
|
|
test.dependsOn(testTask)
|
|
}
|
|
}
|
|
|
|
found = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ext {
|
|
isCppCommands = false
|
|
}
|
|
apply from: "${rootDir}/shared/examplecheck.gradle"
|