Files
allwpilib/build.gradle
Peter Johnson 6754703ad1 Updated the wpilib version plugin to 1.2.
Fixes issues with submodules.
2016-10-23 14:17:16 -07:00

316 lines
13 KiB
Groovy

import org.gradle.internal.os.OperatingSystem
plugins {
id 'net.ltgt.errorprone' version '0.0.8'
id 'edu.wpi.first.wpilib.versioning.WPILibVersioningPlugin' version '1.2'
}
allprojects {
repositories {
mavenCentral()
}
}
ext.buildArm = !project.hasProperty('skipArm')
ext.includeJava = !project.hasProperty('skipJava')
if (hasProperty('makeDesktop')) {
println 'Making desktop classifier jar. NOTE: This desktop version should only be used for local testing.' +
'It will only support the current platform, and will override fetching the latest development version from' +
' the maven repo until you manually delete it!'
}
ext.getPlatformPath2 = { targetPlatform ->
if (targetPlatform.architecture.arm) {
return 'Linux/arm'
} else if (targetPlatform.operatingSystem.linux) {
if (targetPlatform.architecture.amd64) {
return 'Linux/amd64'
} else {
return 'Linux/' + targetPlatform.architecture.name
}
} else if (targetPlatform.operatingSystem.windows) {
if (targetPlatform.architecture.amd64) {
return 'Windows/amd64'
} else {
return 'Windows/' + targetPlatform.architecture.name
}
} else if (targetPlatform.operatingSystem.macOsX) {
if (targetPlatform.architecture.amd64) {
return 'Mac OS X/x86_64'
} else {
return 'Mac OS X/' + targetPlatform.architecture.name
}
} else {
return targetPlatform.operatingSystem.name + '/' + targetPlatform.architecture.name
}
}
ext.getPlatformPath = { binary ->
return getPlatformPath2(binary.targetPlatform)
}
ext.useWpiUtil = { project ->
project.tasks.create(name: "downloadWpiUtil") {
description = 'Downloads the wpiutil maven dependency.'
group = 'WPILib'
def depFolder = "${project.buildDir}/dependencies"
def utilZip = file("${depFolder}/wpiutil.zip")
outputs.file(utilZip)
def wpiUtil
doFirst {
def wpiUtilDependency = project.dependencies.create("edu.wpi.first.wpilib:wpiutil:+:${project.isArm ? 'arm' : 'desktop'}@zip")
def wpiUtilConfig = project.configurations.detachedConfiguration(wpiUtilDependency)
wpiUtilConfig.setTransitive(false)
wpiUtil = wpiUtilConfig.files[0].canonicalFile
}
doLast {
copy {
from wpiUtil
rename 'wpiutil(.+)', 'wpiutil.zip'
into depFolder
}
}
}
def wpiUtilUnzipLocation = "${project.buildDir}/wpiutil"
// Create a task that will unzip the wpiutil files into a temporary build directory
project.tasks.create(name: "unzipWpiUtil", type: Copy) {
description = 'Unzips the wpiutil maven dependency so that the include files and libraries can be used'
group = 'WPILib'
dependsOn project.tasks.downloadWpiUtil
from zipTree(project.tasks.downloadWpiUtil.outputs.files.singleFile)
into wpiUtilUnzipLocation
}
project.ext.wpiUtil = wpiUtilUnzipLocation
project.ext.wpiUtilInclude = "$wpiUtilUnzipLocation/include"
project.ext.addWpiUtilLibraryLinks = { compileTask, linker, targetPlatform ->
compileTask.dependsOn project.tasks.unzipWpiUtil
String path = project.getPlatformPath2(targetPlatform)
if (targetPlatform.operatingSystem.windows) {
linker.args "${project.wpiUtil}/${path}/wpiutil.lib"
} else {
linker.args "${project.wpiUtil}/${path}/libwpiutil.a"
}
}
}
ext.getOpenCvPlatformPackage = { targetPlatform ->
if (targetPlatform.architecture.arm) {
return 'linux-arm'
} else if (targetPlatform.operatingSystem.linux) {
if (targetPlatform.architecture.amd64) {
return 'linux-x86_64'
} else {
return 'linux-' + targetPlatform.architecture.name
}
} else if (targetPlatform.operatingSystem.windows) {
if (targetPlatform.architecture.amd64) {
return 'windows-x86_64'
} else {
return 'windows-' + targetPlatform.architecture.name
}
} else if (targetPlatform.operatingSystem.macOsX) {
if (targetPlatform.architecture.amd64) {
return 'osx-x86_64'
} else {
return 'osx-' + targetPlatform.architecture.name
}
} else {
return targetPlatform.operatingSystem.name + '-' + targetPlatform.architecture.name
}
}
task downloadOpenCvHeaders() {
description = 'Downloads the OpenCV Headers maven dependency.'
group = 'WPILib'
def depFolder = "${buildDir}/dependencies"
def openCvHeadersZip = file("${depFolder}/opencv-headers.zip")
outputs.file(openCvHeadersZip)
def openCvHeaders
doFirst {
def openCvHeadersDependency = project.dependencies.create("org.opencv:opencv-headers:3.1.0@jar")
def openCvHeadersConfig = project.configurations.detachedConfiguration(openCvHeadersDependency)
openCvHeadersConfig.setTransitive(false)
openCvHeaders = openCvHeadersConfig.files[0].canonicalFile
}
doLast {
copy {
from openCvHeaders
rename 'opencv-headers(.+)', 'opencv-headers.zip'
into depFolder
}
}
}
ext.useOpenCv = { project ->
def openCvUnzipLocation = "${project.buildDir}/opencv"
project.tasks.create(name: "unzipOpenCvHeaders", type: Copy) {
description = 'Unzips the OpenCV maven dependency so that the include files and libraries can be used'
group = 'OpenCv'
dependsOn downloadOpenCvHeaders
from zipTree(downloadOpenCvHeaders.outputs.files.singleFile)
into "${openCvUnzipLocation}/include"
}
project.ext.openCv = openCvUnzipLocation
project.ext.openCvInclude = "$openCvUnzipLocation/include"
project.ext.addOpenCvLibraryLinks = { compileTask, linker, targetPlatform ->
def openCvPlatform = project.getOpenCvPlatformPackage(targetPlatform)
def openCvNativesFolder = "${project.openCv}/${openCvPlatform}"
if (project.tasks.findByPath("unzipOpenCvNatives_${openCvPlatform}") == null) {
project.tasks.create(name: "downloadOpenCvNatives_${openCvPlatform}") {
description = 'Downloads the OpenCV natives maven dependency.'
group = 'OpenCv'
def depFolder = "${project.buildDir}/dependencies"
def openCvNativesZip = file("${depFolder}/opencv-natives-${openCvPlatform}.zip")
outputs.file(openCvNativesZip)
def openCvNatives
doFirst {
def openCvNativesDependency = project.dependencies.create("org.opencv:opencv-natives:3.1.0:${openCvPlatform}@jar")
def openCvNativesConfig = project.configurations.detachedConfiguration(openCvNativesDependency)
openCvNativesConfig.setTransitive(false)
openCvNatives = openCvNativesConfig.files[0].canonicalFile
}
doLast {
copy {
from openCvNatives
rename 'opencv-natives(.+)', "opencv-natives-${openCvPlatform}.zip"
into depFolder
}
}
}
project.tasks.create(name: "unzipOpenCvNatives_${openCvPlatform}", type: Copy) {
description = 'Unzips the OpenCV maven dependency so that the include files and libraries can be used'
group = 'OpenCv'
dependsOn "downloadOpenCvNatives_${openCvPlatform}"
from zipTree(project.tasks["downloadOpenCvNatives_${openCvPlatform}"].outputs.files.singleFile)
into openCvNativesFolder
exclude '**/MANIFEST.MF'
}
}
if (project.includeJava && project.tasks.findByPath("unzipOpenCvJni_${openCvPlatform}") == null) {
project.tasks.create(name: "downloadOpenCvJni_${openCvPlatform}") {
description = 'Downloads the OpenCV JNI maven dependency.'
group = 'OpenCv'
def depFolder = "${project.buildDir}/dependencies"
def openCvJniZip = file("${depFolder}/opencv-jni-${openCvPlatform}.zip")
outputs.file(openCvJniZip)
def openCvJni
doFirst {
def openCvJniDependency = project.dependencies.create("org.opencv:opencv-jni:3.1.0:${openCvPlatform}@jar")
def openCvJniConfig = project.configurations.detachedConfiguration(openCvJniDependency)
openCvJniConfig.setTransitive(false)
openCvJni = openCvJniConfig.files[0].canonicalFile
}
doLast {
copy {
from openCvJni
rename 'opencv-jni(.+)', "opencv-jni-${openCvPlatform}.zip"
into depFolder
}
}
}
project.tasks.create(name: "unzipOpenCvJni_${openCvPlatform}", type: Copy) {
description = 'Unzips the OpenCV maven dependency so that the include files and libraries can be used'
group = 'OpenCv'
dependsOn "downloadOpenCvJni_${openCvPlatform}"
from zipTree(project.tasks["downloadOpenCvJni_${openCvPlatform}"].outputs.files.singleFile)
into openCvNativesFolder
exclude '**/MANIFEST.MF'
}
}
compileTask.dependsOn "unzipOpenCvHeaders", "unzipOpenCvNatives_${openCvPlatform}"
if (project.includeJava) {
compileTask.dependsOn "unzipOpenCvJni_${openCvPlatform}"
}
if (targetPlatform.architecture.arm) {
linker.args "${openCvNativesFolder}/libopencv_calib3d.so"
linker.args "${openCvNativesFolder}/libopencv_core.so"
linker.args "${openCvNativesFolder}/libopencv_features2d.so"
linker.args "${openCvNativesFolder}/libopencv_flann.so"
linker.args "${openCvNativesFolder}/libopencv_highgui.so"
linker.args "${openCvNativesFolder}/libopencv_imgcodecs.so"
linker.args "${openCvNativesFolder}/libopencv_imgproc.so"
linker.args "${openCvNativesFolder}/libopencv_ml.so"
linker.args "${openCvNativesFolder}/libopencv_objdetect.so"
linker.args "${openCvNativesFolder}/libopencv_photo.so"
linker.args "${openCvNativesFolder}/libopencv_shape.so"
linker.args "${openCvNativesFolder}/libopencv_stitching.so"
linker.args "${openCvNativesFolder}/libopencv_superres.so"
linker.args "${openCvNativesFolder}/libopencv_video.so"
linker.args "${openCvNativesFolder}/libopencv_videoio.so"
linker.args "${openCvNativesFolder}/libopencv_videostab.so"
linker.args "-ldl"
linker.args "-lz"
} else if (targetPlatform.operatingSystem.windows) {
linker.args "${openCvNativesFolder}/opencv_core.lib"
} else {
linker.args "${openCvNativesFolder}/libopencv_calib3d.a"
linker.args "${openCvNativesFolder}/libopencv_core.a"
linker.args "${openCvNativesFolder}/libopencv_features2d.a"
linker.args "${openCvNativesFolder}/libopencv_flann.a"
linker.args "${openCvNativesFolder}/libopencv_highgui.a"
linker.args "${openCvNativesFolder}/libopencv_imgcodecs.a"
linker.args "${openCvNativesFolder}/libopencv_imgproc.a"
linker.args "${openCvNativesFolder}/libopencv_ml.a"
linker.args "${openCvNativesFolder}/libopencv_objdetect.a"
linker.args "${openCvNativesFolder}/libopencv_photo.a"
linker.args "${openCvNativesFolder}/libopencv_shape.a"
linker.args "${openCvNativesFolder}/libopencv_stitching.a"
linker.args "${openCvNativesFolder}/libopencv_superres.a"
linker.args "${openCvNativesFolder}/libopencv_video.a"
linker.args "${openCvNativesFolder}/libopencv_videoio.a"
linker.args "${openCvNativesFolder}/libopencv_videostab.a"
linker.args "-ldl"
linker.args "-lz"
}
}
}
ext.setupDefines = { project, binaries ->
binaries.all {
if (project.hasProperty('debug')) {
project.setupDebugDefines(cppCompiler, linker)
} else {
project.setupReleaseDefines(cppCompiler, linker)
}
tasks.withType(CppCompile) {
project.addWpiUtilLibraryLinks(it, linker, targetPlatform)
project.addOpenCvLibraryLinks(it, linker, targetPlatform)
}
}
}
apply from: "cameraserver.gradle"
// Empty task for build so that cameraserverSourceZip will be
// built when running ./gradlew build
task build
build.dependsOn cameraserverSourceZip
apply from: 'publish.gradle'
task wrapper(type: Wrapper) {
gradleVersion = '3.0'
}