mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
This allows sim modules to be statically linked into an executable to create a "perfectly static" simulated desktop program. The entry point was changed to be unique when building static libraries to avoid symbol collisions.
111 lines
4.9 KiB
Groovy
111 lines
4.9 KiB
Groovy
apply plugin: 'cpp'
|
|
apply plugin: 'edu.wpi.first.NativeUtils'
|
|
apply plugin: ExtraTasks
|
|
|
|
if (!project.hasProperty('onlylinuxathena')) {
|
|
ext.skiplinuxathena = true
|
|
apply from: "${rootDir}/shared/config.gradle"
|
|
|
|
model {
|
|
components {
|
|
"${pluginName}"(NativeLibrarySpec) {
|
|
sources {
|
|
cpp {
|
|
source {
|
|
srcDirs = ['src/main/native/cpp']
|
|
includes = ["**/*.cpp"]
|
|
}
|
|
exportedHeaders {
|
|
srcDirs = ["src/main/native/include"]
|
|
}
|
|
}
|
|
}
|
|
binaries.all {
|
|
// Define a custom entry point if we are building statically to avoid symbol collision.
|
|
if (it instanceof StaticLibraryBinarySpec) {
|
|
// These scenario is seldom used, except in sysid to build a fully static exe
|
|
// with simulation modules. When building static, it is important that no two
|
|
// modules have the same entry point symbolically.
|
|
def name = project.name.replace("halsim_", "").toUpperCase()
|
|
it.cppCompiler.define("HALSIM_InitExtension", "HALSIM_InitExtension_$name")
|
|
}
|
|
|
|
project(':hal').addHalDependency(it, 'shared')
|
|
if (project.hasProperty('includeNtCore')) {
|
|
lib project: ':ntcore', library: 'ntcore', linkage: 'shared'
|
|
}
|
|
if (project.hasProperty('includeWpiutil')) {
|
|
lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
|
|
}
|
|
}
|
|
appendDebugPathToBinaries(binaries)
|
|
}
|
|
"${pluginName}Dev"(NativeExecutableSpec) {
|
|
targetBuildTypes 'debug'
|
|
sources {
|
|
cpp {
|
|
source {
|
|
srcDirs = ['src/dev/native/cpp']
|
|
includes = ["**/*.cpp"]
|
|
}
|
|
exportedHeaders {
|
|
srcDirs = ["src/dev/native/include"]
|
|
}
|
|
}
|
|
}
|
|
binaries.all {
|
|
if (!project.hasProperty('onlylinuxathena') && !project.hasProperty('onlylinuxraspbian') && !project.hasProperty('onlylinuxaarch64bionic')) {
|
|
project(':hal').addHalDependency(it, 'shared')
|
|
lib library: pluginName
|
|
if (project.hasProperty('includeNtCore')) {
|
|
lib project: ':ntcore', library: 'ntcore', linkage: 'shared'
|
|
}
|
|
lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
|
|
if (it.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
|
|
nativeUtils.useRequiredLibrary(it, 'netcomm_shared', 'chipobject_shared', 'visa_shared', 'ni_runtime_shared')
|
|
}
|
|
} else {
|
|
it.buildable = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
apply from: "${rootDir}/shared/plugins/publish.gradle"
|
|
}
|
|
|
|
model {
|
|
tasks {
|
|
def c = $.components
|
|
if (!project.hasProperty('onlylinuxathena') && !project.hasProperty('onlylinuxraspbian') && !project.hasProperty('onlylinuxaarch64bionic')) {
|
|
project.tasks.create('runCpp', Exec) {
|
|
group = 'WPILib'
|
|
description = "Run the ${pluginName}Dev executable"
|
|
def found = false
|
|
def systemArch = getCurrentArch()
|
|
c.each {
|
|
if (it in NativeExecutableSpec && it.name == "${pluginName}Dev") {
|
|
it.binaries.each {
|
|
if (!found) {
|
|
def arch = it.targetPlatform.name
|
|
if (arch == systemArch) {
|
|
dependsOn it.tasks.install
|
|
commandLine it.tasks.install.runScriptFile.get().asFile.toString()
|
|
// it.tasks.install.libs.each { lib ->
|
|
// if (lib.name.contains(pluginName)) {
|
|
// def filePath = it.tasks.install.installDirectory.get().toString() + File.separatorChar + 'lib' + File.separatorChar + lib.name
|
|
// environment('HALSIM_EXTENSIONS', filePath)
|
|
// }
|
|
// }
|
|
found = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|