mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
117 lines
3.5 KiB
Groovy
117 lines
3.5 KiB
Groovy
description = "A set of C++ plugins to interface the FRC Simulator with Gazebo."
|
|
|
|
apply plugin: 'edu.wpi.first.NativeUtils'
|
|
apply plugin: 'cpp'
|
|
apply plugin: "google-test"
|
|
|
|
ext.skipAthena = true
|
|
ext.skipRaspbian = true
|
|
|
|
apply from: "${rootDir}/shared/config.gradle"
|
|
|
|
/* If gz_msgs or gazebo is not available, do not attempt a build */
|
|
def gazebo_version = ""
|
|
def gazebo_cppflags = ""
|
|
def gazebo_linker_args = ""
|
|
|
|
try {
|
|
gazebo_version = "pkg-config --modversion gazebo".execute().text.trim()
|
|
println "Gazebo version is [${gazebo_version}]"
|
|
gazebo_cppflags = "pkg-config --cflags gazebo".execute().text.split()
|
|
gazebo_linker_args = "pkg-config --libs gazebo protobuf".execute().text.split()
|
|
} catch(Exception ex) { }
|
|
|
|
if (!gazebo_version?.trim()) {
|
|
println "Gazebo development files are not available. (pkg-config --modversion gazebo failed)"
|
|
if (project.hasProperty("makeSim")) {
|
|
/* Force the build even though we did not find protobuf. */
|
|
println "makeSim set. Forcing build - failure likely."
|
|
}
|
|
else {
|
|
ext.skip_frc_plugins = true
|
|
println "Skipping FRC Plugins."
|
|
}
|
|
}
|
|
|
|
evaluationDependsOn(":simulation:gz_msgs")
|
|
def gz_msgs_project = project(":simulation:gz_msgs")
|
|
|
|
tasks.whenTaskAdded { task ->
|
|
task.onlyIf { !gz_msgs_project.hasProperty('skip_gz_msgs') && !project.hasProperty('skip_frc_plugins') }
|
|
}
|
|
|
|
model {
|
|
components {
|
|
clock(NativeLibrarySpec)
|
|
dc_motor(NativeLibrarySpec)
|
|
encoder(NativeLibrarySpec)
|
|
gyro(NativeLibrarySpec)
|
|
limit_switch(NativeLibrarySpec)
|
|
potentiometer(NativeLibrarySpec)
|
|
pneumatic_piston(NativeLibrarySpec)
|
|
rangefinder(NativeLibrarySpec)
|
|
servo(NativeLibrarySpec)
|
|
drive_motor(NativeLibrarySpec)
|
|
all { component ->
|
|
component.targetBuildTypes 'debug'
|
|
sources {
|
|
cpp.lib library: "${component.name}", linkage: "static"
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/* TODO: Finish writing the test case */
|
|
|
|
/* We pass the name of the .so and a .world file to each test */
|
|
testSuites {
|
|
all { test->
|
|
def library_file
|
|
testedComponent.binaries.withType(SharedLibraryBinarySpec).each { b->
|
|
library_file = b.sharedLibraryFile
|
|
}
|
|
|
|
tasks.withType(RunTestExecutable) {
|
|
args library_file, file("src/${baseName}/world/${baseName}.world")
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
binaries {
|
|
all {
|
|
linker.args gazebo_linker_args
|
|
cppCompiler.args gazebo_cppflags
|
|
lib project: ":simulation:gz_msgs", library: "gz_msgs", linkage: "static"
|
|
}
|
|
|
|
/* TODO: build only shared object? Figure out why this doesn't work? */
|
|
withType(StaticLibraryBinarySpec) {
|
|
buildable = false
|
|
}
|
|
|
|
withType(GoogleTestTestSuiteBinarySpec) {
|
|
|
|
/* We currently only have a test for the clock plugin */
|
|
/* TODO: learn how to add this back to gmock */
|
|
//if (it.projectScopedName.contains("clockTest")) {
|
|
// buildable = true
|
|
// project(':gmock').addGmockToLinker(it)
|
|
//}
|
|
//else {
|
|
buildable = false
|
|
//}
|
|
}
|
|
}
|
|
}
|
|
|
|
task copyScript(type: Copy, group: "FRC Gazebo", description: "Copy the frcgazebo script to the output directory.") {
|
|
from "scripts"
|
|
into "$project.buildDir/bin"
|
|
fileMode 0755
|
|
}
|
|
|
|
build.dependsOn copyScript
|
|
|
|
/* TODO: Publish this library */
|