blob: 7e4cc16990748f7bb857d4b7cbcc5040b1a746db [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001apply from: "${rootDir}/shared/resources.gradle"
2
3ext {
4 noWpiutil = true
James Kuszmaulcf324122023-01-14 14:07:17 -08005 skipJniSymbols = [
6 'Java_edu_wpi_first_util_CombinedRuntimeLoader_setDllDirectory'
7 ]
Brian Silverman8fce7482020-01-05 13:18:21 -08008 baseId = 'wpiutil'
9 groupId = 'edu.wpi.first.wpiutil'
10
11 nativeName = 'wpiutil'
12 devMain = 'edu.wpi.first.wpiutil.DevMain'
13 def generateTask = createGenerateResourcesTask('main', 'WPI', 'wpi', project)
14
15 splitSetup = {
16 it.tasks.withType(CppCompile) {
17 dependsOn generateTask
18 }
19 it.sources {
Austin Schuh812d0d12021-11-04 20:16:48 -070020 fmtlibCpp(CppSourceSet) {
21 source {
James Kuszmaulcf324122023-01-14 14:07:17 -080022 srcDirs 'src/main/native/thirdparty/fmtlib/src'
Austin Schuh812d0d12021-11-04 20:16:48 -070023 include '*.cpp'
24 }
25 exportedHeaders {
James Kuszmaulcf324122023-01-14 14:07:17 -080026 srcDirs 'src/main/native/thirdparty/fmtlib/include'
27 }
28 }
James Kuszmaulcf324122023-01-14 14:07:17 -080029 jsonCpp(CppSourceSet) {
30 source {
31 srcDirs 'src/main/native/thirdparty/json/cpp'
32 include '*.cpp'
33 }
34 exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -080035 srcDirs 'src/main/native/include', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/fmtlib/include'
James Kuszmaulcf324122023-01-14 14:07:17 -080036 }
37 }
38 llvmCpp(CppSourceSet) {
39 source {
40 srcDirs 'src/main/native/thirdparty/llvm/cpp'
41 include '**/*.cpp'
42 }
43 exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -080044 srcDirs 'src/main/native/include', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include'
James Kuszmaulcf324122023-01-14 14:07:17 -080045 }
46 }
47 mpackCpp(CppSourceSet) {
48 source {
49 srcDirs 'src/main/native/thirdparty/mpack/src'
50 include '*.cpp'
51 }
52 exportedHeaders {
53 srcDirs 'src/main/native/thirdparty/mpack/include'
54 }
55 }
56 sigslotCpp(CppSourceSet) {
57 source {
58 srcDirs 'src/main/native/thirdparty/sigslot/src'
59 include '*.cpp'
60 }
61 exportedHeaders {
62 srcDirs 'src/main/native/thirdparty/sigslot/include'
63 }
64 }
James Kuszmaulcf324122023-01-14 14:07:17 -080065 memoryCpp(CppSourceSet) {
66 source {
67 srcDirs 'src/main/native/thirdparty/memory/src', 'src/main/native/thirdparty/memory/include/wpi/memory'
68 include '**/*.cpp'
69 }
70 exportedHeaders {
71 srcDirs 'src/main/native/thirdparty/memory/include'
72 include '**/*.hpp'
Austin Schuh812d0d12021-11-04 20:16:48 -070073 }
74 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -080075 protobufCpp(CppSourceSet) {
76 source {
77 srcDirs 'src/main/native/thirdparty/protobuf/src'
78 include '**/*.cpp'
79 }
80 exportedHeaders {
81 srcDirs 'src/main/native/thirdparty/protobuf/include'
82 }
83 }
Brian Silverman8fce7482020-01-05 13:18:21 -080084 resourcesCpp(CppSourceSet) {
85 source {
86 srcDirs "$buildDir/generated/main/cpp", "$rootDir/shared/singlelib"
87 include '*.cpp'
88 }
89 exportedHeaders {
90 srcDirs 'src/main/native/include'
91 }
92 }
93 }
94 if (!it.targetPlatform.operatingSystem.isWindows()) {
95 it.cppCompiler.define '_GNU_SOURCE'
96 it.sources {
Brian Silverman8fce7482020-01-05 13:18:21 -080097 wpiutilUnixCpp(CppSourceSet) {
98 source {
99 srcDirs 'src/main/native/unix'
100 include '**/*.cpp'
101 }
102 exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800103 srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/mpack/include'
Brian Silverman8fce7482020-01-05 13:18:21 -0800104 include '**/*.h'
105 }
106 }
107 }
108 }
109 if (it.targetPlatform.operatingSystem.isWindows()) {
Brian Silverman8fce7482020-01-05 13:18:21 -0800110 it.sources {
Brian Silverman8fce7482020-01-05 13:18:21 -0800111 wpiutilWindowsCpp(CppSourceSet) {
112 source {
James Kuszmaulcf324122023-01-14 14:07:17 -0800113 srcDirs 'src/main/native/windows', 'src/main/native/llvm/cpp/llvm', 'src/main/native/json/cpp'
Brian Silverman8fce7482020-01-05 13:18:21 -0800114 include '**/*.cpp'
115 }
116 exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800117 srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/mpack/include'
Brian Silverman8fce7482020-01-05 13:18:21 -0800118 include '**/*.h'
119 }
120 }
121 }
122 } else if (it.targetPlatform.operatingSystem.isMacOsX()) {
123 it.sources {
Austin Schuh75263e32022-02-22 18:05:32 -0800124 wpiutilmacOSCpp(CppSourceSet) {
125 source {
James Kuszmaulcf324122023-01-14 14:07:17 -0800126 srcDirs 'src/main/native/macOS', 'src/main/native/llvm/cpp/llvm', 'src/main/native/json/cpp'
Austin Schuh75263e32022-02-22 18:05:32 -0800127 include '**/*.cpp'
128 }
129 exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800130 srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/mpack/include'
Austin Schuh75263e32022-02-22 18:05:32 -0800131 include '**/*.h'
132 }
133 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800134 }
135 } else {
136 it.sources {
Austin Schuh75263e32022-02-22 18:05:32 -0800137 wpiutilLinuxCpp(CppSourceSet) {
138 source {
James Kuszmaulcf324122023-01-14 14:07:17 -0800139 srcDirs 'src/main/native/linux', 'src/main/native/llvm/cpp/llvm', 'src/main/native/json/cpp'
Austin Schuh75263e32022-02-22 18:05:32 -0800140 include '**/*.cpp'
141 }
142 exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800143 srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/mpack/include'
Austin Schuh75263e32022-02-22 18:05:32 -0800144 include '**/*.h'
145 }
146 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800147 }
148 }
149 }
150}
151
152def examplesMap = [:];
153file("$projectDir/examples").list(new FilenameFilter() {
Austin Schuh812d0d12021-11-04 20:16:48 -0700154 @Override
155 public boolean accept(File current, String name) {
156 return new File(current, name).isDirectory();
157 }
158 }).each {
159 examplesMap.put(it, [])
160 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800161
162apply from: "${rootDir}/shared/jni/setupBuild.gradle"
163
164nativeUtils.exportsConfigs {
165 wpiutil {
Austin Schuh812d0d12021-11-04 20:16:48 -0700166 x64ExcludeSymbols = [
167 '_CT??_R0?AV_System_error',
168 '_CT??_R0?AVexception',
169 '_CT??_R0?AVfailure',
170 '_CT??_R0?AVruntime_error',
171 '_CT??_R0?AVsystem_error',
172 '_CTA5?AVfailure',
173 '_TI5?AVfailure',
174 '_CT??_R0?AVout_of_range',
175 '_CTA3?AVout_of_range',
176 '_TI3?AVout_of_range',
177 '_CT??_R0?AVbad_cast'
178 ]
Brian Silverman8fce7482020-01-05 13:18:21 -0800179 }
180}
181
182cppHeadersZip {
James Kuszmaulcf324122023-01-14 14:07:17 -0800183 from('src/main/native/thirdparty/fmtlib/include') {
Brian Silverman8fce7482020-01-05 13:18:21 -0800184 into '/'
185 }
James Kuszmaulcf324122023-01-14 14:07:17 -0800186 from('src/main/native/thirdparty/json/include') {
187 into '/'
188 }
189 from('src/main/native/thirdparty/llvm/include') {
190 into '/'
191 }
192 from('src/main/native/thirdparty/mpack/include') {
193 into '/'
194 }
195 from('src/main/native/thirdparty/sigslot/include') {
196 into '/'
197 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800198 from('src/main/native/thirdparty/memory/include') {
James Kuszmaulcf324122023-01-14 14:07:17 -0800199 into '/'
200 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800201 from('src/main/native/thirdparty/protobuf/include') {
James Kuszmaulcf324122023-01-14 14:07:17 -0800202 into '/'
203 }
204}
205
206cppSourcesZip {
207 from('src/main/native/thirdparty/fmtlib/src') {
208 into '/'
209 }
210 from('src/main/native/thirdparty/json/cpp') {
211 into '/'
212 }
213 from('src/main/native/thirdparty/llvm/cpp') {
214 into '/'
215 }
216 from('src/main/native/thirdparty/memory/src') {
217 into '/'
218 }
219 from('src/main/native/thirdparty/mpack/src') {
220 into '/'
221 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800222 from('src/main/native/thirdparty/protobuf/src') {
223 into '/'
224 }
James Kuszmaulcf324122023-01-14 14:07:17 -0800225 from('src/main/native/thirdparty/sigslot/src') {
Austin Schuh812d0d12021-11-04 20:16:48 -0700226 into '/'
227 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800228}
229
230model {
231 components {
232 all {
233 it.sources.each {
234 it.exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800235 srcDirs 'src/main/native/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/memory/include', 'src/main/native/thirdparty/mpack/include', 'src/main/native/thirdparty/protobuf/include'
Brian Silverman8fce7482020-01-05 13:18:21 -0800236 }
237 }
238 }
239 }
240}
241
242model {
243 components {
244 examplesMap.each { key, value ->
245 "${key}"(NativeExecutableSpec) {
246 targetBuildTypes 'debug'
247 binaries.all {
248 lib library: 'wpiutil', linkage: 'shared'
249 }
250 sources {
251 cpp {
252 source {
253 srcDirs 'examples/' + "${key}"
254 include '**/*.cpp'
255 }
256 }
257 }
258 }
259 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800260 }
261}
262
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800263model {
264 binaries {
265 all {
266 if (!(it instanceof NativeBinarySpec)) return
267 if (it.component.name != 'wpiutil' && it.component.name != 'wpiutilBase') return
268 if (it.targetPlatform.name != nativeUtils.wpi.platforms.roborio) return
Maxwell Henderson80bec322024-01-09 15:48:44 -0800269 nativeUtils.useRequiredLibrary(it, 'chipobject_headers')
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800270 }
271 }
272}
273
James Kuszmaulcf324122023-01-14 14:07:17 -0800274sourceSets {
275 printlog
276}
277
278task runPrintLog(type: JavaExec) {
279 classpath = sourceSets.printlog.runtimeClasspath
280
281 mainClass = 'printlog.PrintLog'
282}
283
Brian Silverman8fce7482020-01-05 13:18:21 -0800284dependencies {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800285 api "com.fasterxml.jackson.core:jackson-annotations:2.15.2"
286 api "com.fasterxml.jackson.core:jackson-core:2.15.2"
287 api "com.fasterxml.jackson.core:jackson-databind:2.15.2"
Maxwell Henderson80bec322024-01-09 15:48:44 -0800288 api 'us.hebi.quickbuf:quickbuf-runtime:1.3.3'
James Kuszmaulcf324122023-01-14 14:07:17 -0800289
290 printlogImplementation sourceSets.main.output
Brian Silverman8fce7482020-01-05 13:18:21 -0800291}