blob: ab13092a70c9ca13cef552624632209961aecc44 [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 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800150
151 exeSplitSetup = {
152 if (it.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
153 nativeUtils.useRequiredLibrary(it, 'ni_link_libraries', 'ni_runtime_libraries')
154 }
155 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800156}
157
158def examplesMap = [:];
159file("$projectDir/examples").list(new FilenameFilter() {
Austin Schuh812d0d12021-11-04 20:16:48 -0700160 @Override
161 public boolean accept(File current, String name) {
162 return new File(current, name).isDirectory();
163 }
164 }).each {
165 examplesMap.put(it, [])
166 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800167
168apply from: "${rootDir}/shared/jni/setupBuild.gradle"
169
170nativeUtils.exportsConfigs {
171 wpiutil {
Austin Schuh812d0d12021-11-04 20:16:48 -0700172 x64ExcludeSymbols = [
173 '_CT??_R0?AV_System_error',
174 '_CT??_R0?AVexception',
175 '_CT??_R0?AVfailure',
176 '_CT??_R0?AVruntime_error',
177 '_CT??_R0?AVsystem_error',
178 '_CTA5?AVfailure',
179 '_TI5?AVfailure',
180 '_CT??_R0?AVout_of_range',
181 '_CTA3?AVout_of_range',
182 '_TI3?AVout_of_range',
183 '_CT??_R0?AVbad_cast'
184 ]
Brian Silverman8fce7482020-01-05 13:18:21 -0800185 }
186}
187
188cppHeadersZip {
James Kuszmaulcf324122023-01-14 14:07:17 -0800189 from('src/main/native/thirdparty/fmtlib/include') {
Brian Silverman8fce7482020-01-05 13:18:21 -0800190 into '/'
191 }
James Kuszmaulcf324122023-01-14 14:07:17 -0800192 from('src/main/native/thirdparty/json/include') {
193 into '/'
194 }
195 from('src/main/native/thirdparty/llvm/include') {
196 into '/'
197 }
198 from('src/main/native/thirdparty/mpack/include') {
199 into '/'
200 }
201 from('src/main/native/thirdparty/sigslot/include') {
202 into '/'
203 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800204 from('src/main/native/thirdparty/memory/include') {
James Kuszmaulcf324122023-01-14 14:07:17 -0800205 into '/'
206 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800207 from('src/main/native/thirdparty/protobuf/include') {
James Kuszmaulcf324122023-01-14 14:07:17 -0800208 into '/'
209 }
210}
211
212cppSourcesZip {
213 from('src/main/native/thirdparty/fmtlib/src') {
214 into '/'
215 }
216 from('src/main/native/thirdparty/json/cpp') {
217 into '/'
218 }
219 from('src/main/native/thirdparty/llvm/cpp') {
220 into '/'
221 }
222 from('src/main/native/thirdparty/memory/src') {
223 into '/'
224 }
225 from('src/main/native/thirdparty/mpack/src') {
226 into '/'
227 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800228 from('src/main/native/thirdparty/protobuf/src') {
229 into '/'
230 }
James Kuszmaulcf324122023-01-14 14:07:17 -0800231 from('src/main/native/thirdparty/sigslot/src') {
Austin Schuh812d0d12021-11-04 20:16:48 -0700232 into '/'
233 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800234}
235
236model {
237 components {
238 all {
239 it.sources.each {
240 it.exportedHeaders {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800241 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 -0800242 }
243 }
244 }
245 }
246}
247
248model {
249 components {
250 examplesMap.each { key, value ->
251 "${key}"(NativeExecutableSpec) {
252 targetBuildTypes 'debug'
253 binaries.all {
254 lib library: 'wpiutil', linkage: 'shared'
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800255 if (it.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
256 nativeUtils.useRequiredLibrary(it, 'ni_link_libraries', 'ni_runtime_libraries')
257 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800258 }
259 sources {
260 cpp {
261 source {
262 srcDirs 'examples/' + "${key}"
263 include '**/*.cpp'
264 }
265 }
266 }
267 }
268 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800269 }
270}
271
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800272model {
273 binaries {
274 all {
275 if (!(it instanceof NativeBinarySpec)) return
276 if (it.component.name != 'wpiutil' && it.component.name != 'wpiutilBase') return
277 if (it.targetPlatform.name != nativeUtils.wpi.platforms.roborio) return
278 nativeUtils.useRequiredLibrary(it, 'ni_link_libraries')
279 }
280 }
281}
282
James Kuszmaulcf324122023-01-14 14:07:17 -0800283sourceSets {
284 printlog
285}
286
287task runPrintLog(type: JavaExec) {
288 classpath = sourceSets.printlog.runtimeClasspath
289
290 mainClass = 'printlog.PrintLog'
291}
292
Brian Silverman8fce7482020-01-05 13:18:21 -0800293dependencies {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800294 api "com.fasterxml.jackson.core:jackson-annotations:2.15.2"
295 api "com.fasterxml.jackson.core:jackson-core:2.15.2"
296 api "com.fasterxml.jackson.core:jackson-databind:2.15.2"
297 api 'us.hebi.quickbuf:quickbuf-runtime:1.3.2'
James Kuszmaulcf324122023-01-14 14:07:17 -0800298
299 printlogImplementation sourceSets.main.output
Brian Silverman8fce7482020-01-05 13:18:21 -0800300}