| import org.gradle.internal.os.OperatingSystem |
| |
| nativeUtils.skipInstallPdb = project.hasProperty('buildServer') |
| |
| nativeUtils.addWpiNativeUtils() |
| nativeUtils.withRoboRIO() |
| nativeUtils.withRaspbian() |
| nativeUtils.withBionic() |
| nativeUtils { |
| wpi { |
| configureDependencies { |
| wpiVersion = "-1" |
| niLibVersion = "2022.4.0" |
| opencvVersion = "4.5.2-1" |
| googleTestVersion = "1.9.0-5-437e100-1" |
| imguiVersion = "1.86-1" |
| wpimathVersion = "-1" |
| } |
| } |
| } |
| |
| nativeUtils.wpi.addWarnings() |
| nativeUtils.wpi.addWarningsAsErrors() |
| |
| if (project.name != 'wpilibcExamples') { |
| nativeUtils.wpi.addReleaseSymbolGeneration() |
| } |
| |
| nativeUtils.setSinglePrintPerPlatform() |
| nativeUtils.enableSourceLink() |
| |
| nativeUtils.platformConfigs.each { |
| if (it.name.contains('windows')) { |
| return |
| } |
| it.linker.args << '-Wl,-rpath,\'$ORIGIN\'' |
| if (it.name == 'osxx86-64') { |
| it.linker.args << "-headerpad_max_install_names" |
| } |
| } |
| |
| nativeUtils.platformConfigs.linuxathena.linker.args.add("-Wl,--fatal-warnings") |
| |
| model { |
| components { |
| all { |
| nativeUtils.useAllPlatforms(it) |
| } |
| } |
| binaries { |
| withType(NativeBinarySpec).all { |
| nativeUtils.usePlatformArguments(it) |
| } |
| } |
| } |
| |
| apply plugin: DisableBuildingGTest |
| |
| if (project.hasProperty('buildServer')) { |
| tasks.withType(org.gradle.nativeplatform.test.tasks.RunTestExecutable) { |
| def exeFile = file(it.executable) |
| def folder = exeFile.parentFile |
| |
| it.doLast { |
| folder.deleteDir() |
| } |
| } |
| } |
| |
| 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 |
| } |
| } |
| } |
| |
| 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 |
| classifier = 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.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' |
| } |
| def pdbDir = binary.staticLibraryFile.parentFile |
| task.from(pdbDir) { |
| include '*.pdb' |
| into nativeUtils.getPlatformPath(binary) + '/static' |
| } |
| task.from(new File(pdbDir, "SourceLink.json")) { |
| into nativeUtils.getPlatformPath(binary) + '/static' |
| } |
| } |
| } |
| } |
| } |