blob: d9db2b9591075f56934ace5dbbe80eddeeafabea [file] [log] [blame]
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.skiplinuxathena = true
ext.skiplinuxraspbian = 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 (project.hasProperty("makeSim")) {
if (!gazebo_version?.trim()) {
println "Gazebo development files are not available. (pkg-config --modversion gazebo failed)"
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 */