blob: 90c08c82aca960aee93e98381d0951fcc54731fa [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001import edu.wpi.first.toolchain.*
2
Austin Schuh812d0d12021-11-04 20:16:48 -07003buildscript {
4 repositories {
James Kuszmaulcf324122023-01-14 14:07:17 -08005 maven {
6 url = 'https://frcmaven.wpi.edu/artifactory/ex-mvn'
7 }
Austin Schuh812d0d12021-11-04 20:16:48 -07008 }
9 dependencies {
James Kuszmaulb13e13f2023-11-22 20:44:04 -080010 classpath 'com.hubspot.jinjava:jinjava:2.7.1'
Austin Schuh812d0d12021-11-04 20:16:48 -070011 }
12}
13
Brian Silverman8fce7482020-01-05 13:18:21 -080014plugins {
15 id 'base'
James Kuszmaulcf324122023-01-14 14:07:17 -080016 id 'edu.wpi.first.wpilib.versioning.WPILibVersioningPlugin' version '2023.0.1'
Brian Silverman8fce7482020-01-05 13:18:21 -080017 id 'edu.wpi.first.wpilib.repositories.WPILibRepositoriesPlugin' version '2020.2'
18 id 'edu.wpi.first.NativeUtils' apply false
James Kuszmaulcf324122023-01-14 14:07:17 -080019 id 'edu.wpi.first.GradleJni' version '1.1.0'
Austin Schuh75263e32022-02-22 18:05:32 -080020 id 'edu.wpi.first.GradleVsCode'
Brian Silverman8fce7482020-01-05 13:18:21 -080021 id 'idea'
22 id 'visual-studio'
James Kuszmaulb13e13f2023-11-22 20:44:04 -080023 id 'net.ltgt.errorprone' version '3.1.0' apply false
24 id 'com.github.johnrengelman.shadow' version '8.1.1' apply false
25 id 'com.diffplug.spotless' version '6.20.0' apply false
Maxwell Henderson80bec322024-01-09 15:48:44 -080026 id 'com.github.spotbugs' version '6.0.2' apply false
James Kuszmaulb13e13f2023-11-22 20:44:04 -080027 id 'com.google.protobuf' version '0.9.3' apply false
Brian Silverman8fce7482020-01-05 13:18:21 -080028}
29
Austin Schuh812d0d12021-11-04 20:16:48 -070030wpilibVersioning.buildServerMode = project.hasProperty('buildServer')
31wpilibVersioning.releaseMode = project.hasProperty('releaseMode')
Brian Silverman8fce7482020-01-05 13:18:21 -080032
33allprojects {
34 repositories {
James Kuszmaulcf324122023-01-14 14:07:17 -080035 maven {
36 url = 'https://frcmaven.wpi.edu/artifactory/ex-mvn'
37 }
Brian Silverman8fce7482020-01-05 13:18:21 -080038 }
39 if (project.hasProperty('releaseMode')) {
40 wpilibRepositories.addAllReleaseRepositories(it)
41 } else {
42 wpilibRepositories.addAllDevelopmentRepositories(it)
43 }
44}
45
46buildScan {
47 termsOfServiceUrl = 'https://gradle.com/terms-of-service'
48 termsOfServiceAgree = 'yes'
49
50 publishAlways()
51}
52
Maxwell Henderson80bec322024-01-09 15:48:44 -080053import com.github.spotbugs.snom.Effort
54ext.spotbugsEffort = Effort.MAX
55
Austin Schuh1e69f942020-11-14 15:06:14 -080056ext.licenseFile = files("$rootDir/LICENSE.md", "$rootDir/ThirdPartyNotices.txt")
Brian Silverman8fce7482020-01-05 13:18:21 -080057
58if (project.hasProperty("publishVersion")) {
59 wpilibVersioning.version.set(project.publishVersion)
60}
61
62wpilibVersioning.version.finalizeValue()
63
64def outputsFolder = file("$buildDir/allOutputs")
65
66def versionFile = file("$outputsFolder/version.txt")
67
68task outputVersions() {
69 description = 'Prints the versions of wpilib to a file for use by the downstream packaging project'
70 group = 'Build'
71 outputs.files(versionFile)
72
73 doFirst {
74 buildDir.mkdir()
75 outputsFolder.mkdir()
76 }
77
78 doLast {
79 versionFile.write wpilibVersioning.version.get()
80 }
81}
82
83task libraryBuild() {}
84
85build.dependsOn outputVersions
86
87task copyAllOutputs(type: Copy) {
88 destinationDir outputsFolder
89}
90
91build.dependsOn copyAllOutputs
92copyAllOutputs.dependsOn outputVersions
93
James Kuszmaulcf324122023-01-14 14:07:17 -080094def copyReleaseOnly = project.hasProperty('ciReleaseOnly')
95
Brian Silverman8fce7482020-01-05 13:18:21 -080096ext.addTaskToCopyAllOutputs = { task ->
James Kuszmaulcf324122023-01-14 14:07:17 -080097 if (copyReleaseOnly && task.name.contains('debug')) {
98 return
99 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800100 copyAllOutputs.dependsOn task
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800101 copyAllOutputs.inputs.file task.archiveFile
102 copyAllOutputs.from task.archiveFile
Brian Silverman8fce7482020-01-05 13:18:21 -0800103}
104
105subprojects {
106 apply plugin: 'eclipse'
107 apply plugin: 'idea'
108
109 def subproj = it
110
111 plugins.withType(NativeComponentPlugin) {
112 subproj.apply plugin: MultiBuilds
113 }
114
James Kuszmaulcf324122023-01-14 14:07:17 -0800115 plugins.withType(JavaPlugin) {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800116 java {
117 sourceCompatibility = 11
118 targetCompatibility = 11
119 }
James Kuszmaulcf324122023-01-14 14:07:17 -0800120 }
121
Brian Silverman8fce7482020-01-05 13:18:21 -0800122 apply from: "${rootDir}/shared/java/javastyle.gradle"
123
124 // Disables doclint in java 8.
125 if (JavaVersion.current().isJava8Compatible()) {
126 tasks.withType(Javadoc) {
127 if (project.name != "docs") {
128 options.addStringOption('Xdoclint:none', '-quiet')
129 }
130 }
131 }
Austin Schuh1e69f942020-11-14 15:06:14 -0800132
James Kuszmaulcf324122023-01-14 14:07:17 -0800133 tasks.withType(JavaCompile) {
134 options.compilerArgs.add '-XDstringConcat=inline'
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800135 options.encoding = 'UTF-8'
James Kuszmaulcf324122023-01-14 14:07:17 -0800136 }
137
Austin Schuh812d0d12021-11-04 20:16:48 -0700138 // Enables UTF-8 support in Javadoc
139 tasks.withType(Javadoc) {
140 options.addStringOption("charset", "utf-8")
141 options.addStringOption("docencoding", "utf-8")
142 options.addStringOption("encoding", "utf-8")
143 }
144
Austin Schuh1e69f942020-11-14 15:06:14 -0800145 // Sign outputs with Developer ID
James Kuszmaulcf324122023-01-14 14:07:17 -0800146 tasks.withType(AbstractLinkTask) { task ->
147 task.inputs.property "HasDeveloperId", project.hasProperty("developerID")
148
149 if (project.hasProperty("developerID")) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800150 // Don't sign any executables because codesign complains
151 // about relative rpath.
152 if (!(task instanceof LinkExecutable)) {
153 doLast {
154 // Get path to binary.
155 String path = task.getLinkedFile().getAsFile().get().getAbsolutePath()
156 exec {
157 workingDir rootDir
Austin Schuh812d0d12021-11-04 20:16:48 -0700158 def args = [
159 "sh",
160 "-c",
161 "codesign --force --strict --timestamp --options=runtime " +
162 "--verbose -s ${project.findProperty("developerID")} ${path}"
163 ]
Austin Schuh1e69f942020-11-14 15:06:14 -0800164 commandLine args
165 }
166 }
167 }
168 }
169 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800170}
171
172ext.getCurrentArch = {
173 return NativePlatforms.desktop
174}
175
176wrapper {
Maxwell Henderson80bec322024-01-09 15:48:44 -0800177 gradleVersion = '8.5'
Brian Silverman8fce7482020-01-05 13:18:21 -0800178}