mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-20 00:51:41 +00:00
Fixes GPL violation, the license has been missing since 2024. This also puts licenses in as many JARs and native library archives as possible (for good measure.)
190 lines
6.5 KiB
Groovy
190 lines
6.5 KiB
Groovy
// Configure Native-Utils WPI Plugin
|
|
nativeUtils.addWpiNativeUtils()
|
|
nativeUtils.withCrossRoboRIO()
|
|
nativeUtils.withCrossLinuxArm32()
|
|
nativeUtils.withCrossLinuxArm64()
|
|
|
|
// Configure WPI dependencies.
|
|
nativeUtils.wpi.configureDependencies {
|
|
wpiVersion = wpilibVersion
|
|
wpimathVersion = wpimathVersion
|
|
opencvYear = 'frc'+openCVYear
|
|
opencvVersion = openCVversion
|
|
googleTestYear = "frc2024"
|
|
googleTestVersion = "1.14.0-1"
|
|
niLibVersion = "2024.2.1"
|
|
}
|
|
|
|
// Configure warnings and errors
|
|
nativeUtils.wpi.addWarnings()
|
|
nativeUtils.wpi.addWarningsAsErrors()
|
|
|
|
nativeUtils.setSinglePrintPerPlatform()
|
|
|
|
// Enable builds for all platforms.
|
|
model {
|
|
components {
|
|
all {
|
|
nativeUtils.useAllPlatforms(it)
|
|
}
|
|
}
|
|
binaries {
|
|
withType(NativeBinarySpec).all {
|
|
nativeUtils.usePlatformArguments(it)
|
|
if (it.toolChain instanceof GccCompatibleToolChain) {
|
|
it.cppCompiler.args << "-Wno-deprecated-enum-enum-conversion"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
task copyAllOutputs(type: Copy) {
|
|
def outputsFolder = file("$project.buildDir/outputs")
|
|
destinationDir outputsFolder
|
|
}
|
|
|
|
ext.addTaskToCopyAllOutputs = { task ->
|
|
copyAllOutputs.dependsOn task
|
|
copyAllOutputs.inputs.file task.archiveFile
|
|
copyAllOutputs.from task.archiveFile
|
|
}
|
|
|
|
// Add debug path to binaries.
|
|
ext.appendDebugPathToBinaries = { binaries ->
|
|
binaries.withType(StaticLibraryBinarySpec) {
|
|
if (it.buildType.name.contains('debug')) {
|
|
def staticFileDir = it.staticLibraryFile.parentFile
|
|
def staticFileName = it.staticLibraryFile.name
|
|
def staticFileExtension = staticFileName.substring(staticFileName.lastIndexOf('.'))
|
|
staticFileName = staticFileName.substring(0, staticFileName.lastIndexOf('.'))
|
|
staticFileName = staticFileName + 'd' + staticFileExtension
|
|
def newStaticFile = new File(staticFileDir, staticFileName)
|
|
it.staticLibraryFile = newStaticFile
|
|
}
|
|
}
|
|
binaries.withType(SharedLibraryBinarySpec) {
|
|
if (it.buildType.name.contains('debug')) {
|
|
def sharedFileDir = it.sharedLibraryFile.parentFile
|
|
def sharedFileName = it.sharedLibraryFile.name
|
|
def sharedFileExtension = sharedFileName.substring(sharedFileName.lastIndexOf('.'))
|
|
sharedFileName = sharedFileName.substring(0, sharedFileName.lastIndexOf('.'))
|
|
sharedFileName = sharedFileName + 'd' + sharedFileExtension
|
|
def newSharedFile = new File(sharedFileDir, sharedFileName)
|
|
|
|
def sharedLinkFileDir = it.sharedLibraryLinkFile.parentFile
|
|
def sharedLinkFileName = it.sharedLibraryLinkFile.name
|
|
def sharedLinkFileExtension = sharedLinkFileName.substring(sharedLinkFileName.lastIndexOf('.'))
|
|
sharedLinkFileName = sharedLinkFileName.substring(0, sharedLinkFileName.lastIndexOf('.'))
|
|
sharedLinkFileName = sharedLinkFileName + 'd' + sharedLinkFileExtension
|
|
def newLinkFile = new File(sharedLinkFileDir, sharedLinkFileName)
|
|
|
|
it.sharedLibraryLinkFile = newLinkFile
|
|
it.sharedLibraryFile = newSharedFile
|
|
}
|
|
}
|
|
}
|
|
|
|
// Create ZIP tasks for each component.
|
|
ext.createComponentZipTasks = { components, names, base, type, project, func ->
|
|
def stringNames = names.collect { it.toString() }
|
|
def configMap = [:]
|
|
components.each {
|
|
if (it in NativeLibrarySpec && stringNames.contains(it.name)) {
|
|
it.binaries.each {
|
|
if (!it.buildable) return
|
|
def target = nativeUtils.getPublishClassifier(it)
|
|
if (configMap.containsKey(target)) {
|
|
configMap.get(target).add(it)
|
|
} else {
|
|
configMap.put(target, [])
|
|
configMap.get(target).add(it)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
def taskList = []
|
|
def outputsFolder = file("$project.buildDir/outputs")
|
|
configMap.each { key, value ->
|
|
def task = project.tasks.create(base + "-${key}", type) {
|
|
description = 'Creates component archive for platform ' + key
|
|
destinationDirectory = outputsFolder
|
|
archiveClassifier = key
|
|
archiveBaseName = '_M_' + base
|
|
duplicatesStrategy = 'exclude'
|
|
|
|
from(licenseFile) {
|
|
into '/'
|
|
}
|
|
|
|
func(it, value)
|
|
}
|
|
taskList.add(task)
|
|
|
|
project.build.dependsOn task
|
|
|
|
project.artifacts {
|
|
task
|
|
}
|
|
addTaskToCopyAllOutputs(task)
|
|
}
|
|
return taskList
|
|
}
|
|
|
|
ext.createAllCombined = { list, name, base, type, project ->
|
|
def outputsFolder = file("$project.buildDir/outputs")
|
|
|
|
def task = project.tasks.create(base + "-all", type) {
|
|
description = "Creates component archive for all classifiers"
|
|
destinationDirectory = outputsFolder
|
|
classifier = "all"
|
|
archiveBaseName = base
|
|
duplicatesStrategy = 'exclude'
|
|
|
|
list.each {
|
|
if (it.name.endsWith('debug')) return
|
|
from project.zipTree(it.archiveFile)
|
|
dependsOn it
|
|
}
|
|
}
|
|
|
|
project.build.dependsOn task
|
|
|
|
project.artifacts {
|
|
task
|
|
}
|
|
|
|
return task
|
|
}
|
|
|
|
// Create the standard ZIP format for the dependencies.
|
|
ext.includeStandardZipFormat = { task, value ->
|
|
value.each { binary ->
|
|
if (binary.buildable) {
|
|
if (binary instanceof SharedLibraryBinarySpec) {
|
|
task.dependsOn binary.tasks.link
|
|
task.from(new File(binary.sharedLibraryFile.absolutePath + ".debug")) {
|
|
into nativeUtils.getPlatformPath(binary) + '/shared'
|
|
}
|
|
def sharedPath = binary.sharedLibraryFile.absolutePath
|
|
sharedPath = sharedPath.substring(0, sharedPath.length() - 4)
|
|
|
|
task.from(new File(sharedPath + '.pdb')) {
|
|
into nativeUtils.getPlatformPath(binary) + '/shared'
|
|
}
|
|
task.from(binary.sharedLibraryFile) {
|
|
into nativeUtils.getPlatformPath(binary) + '/shared'
|
|
}
|
|
task.from(binary.sharedLibraryLinkFile) {
|
|
into nativeUtils.getPlatformPath(binary) + '/shared'
|
|
}
|
|
} else if (binary instanceof StaticLibraryBinarySpec) {
|
|
task.dependsOn binary.tasks.createStaticLib
|
|
task.from(binary.staticLibraryFile) {
|
|
into nativeUtils.getPlatformPath(binary) + '/static'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|