blob: a79bae4078914c52c855190c17e2e4e5655ba768 [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001apply from: "${rootDir}/shared/resources.gradle"
2
3ext {
4 noWpiutil = true
5 baseId = 'wpiutil'
6 groupId = 'edu.wpi.first.wpiutil'
7
8 nativeName = 'wpiutil'
9 devMain = 'edu.wpi.first.wpiutil.DevMain'
10 def generateTask = createGenerateResourcesTask('main', 'WPI', 'wpi', project)
11
12 splitSetup = {
13 it.tasks.withType(CppCompile) {
14 dependsOn generateTask
15 }
16 it.sources {
17 libuvCpp(CppSourceSet) {
18 source {
19 srcDirs 'src/main/native/libuv/src'
20 include '*.cpp'
21 }
22 exportedHeaders {
23 srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src'
24 }
25 }
26 resourcesCpp(CppSourceSet) {
27 source {
28 srcDirs "$buildDir/generated/main/cpp", "$rootDir/shared/singlelib"
29 include '*.cpp'
30 }
31 exportedHeaders {
32 srcDirs 'src/main/native/include'
33 }
34 }
35 }
36 if (!it.targetPlatform.operatingSystem.isWindows()) {
37 it.cppCompiler.define '_GNU_SOURCE'
38 it.sources {
39 libuvUnixCpp(CppSourceSet) {
40 source {
41 srcDirs 'src/main/native/libuv/src/unix'
42 includes = [
43 'async.cpp',
44 'core.cpp',
45 'dl.cpp',
46 'fs.cpp',
47 'getaddrinfo.cpp',
48 'getnameinfo.cpp',
49 'loop-watcher.cpp',
50 'loop.cpp',
51 'pipe.cpp',
52 'poll.cpp',
53 'process.cpp',
54 'signal.cpp',
55 'stream.cpp',
56 'tcp.cpp',
57 'thread.cpp',
58 'timer.cpp',
59 'tty.cpp',
60 'udp.cpp',
61 ]
62 }
63 exportedHeaders {
64 srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src'
65 }
66 }
67 wpiutilUnixCpp(CppSourceSet) {
68 source {
69 srcDirs 'src/main/native/unix'
70 include '**/*.cpp'
71 }
72 exportedHeaders {
73 srcDirs 'src/main/native/include', 'src/main/native/cpp'
74 include '**/*.h'
75 }
76 }
77 }
78 }
79 if (it.targetPlatform.operatingSystem.isWindows()) {
80 if (it in SharedLibraryBinarySpec) {
81 it.cppCompiler.define 'BUILDING_UV_SHARED'
82 }
83 it.sources {
84 libuvWindowsCpp(CppSourceSet) {
85 source {
86 srcDirs 'src/main/native/libuv/src/win'
87 include '*.cpp'
88 }
89 exportedHeaders {
90 srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src'
91 }
92 }
93 wpiutilWindowsCpp(CppSourceSet) {
94 source {
95 srcDirs 'src/main/native/windows'
96 include '**/*.cpp'
97 }
98 exportedHeaders {
99 srcDirs 'src/main/native/include', 'src/main/native/cpp'
100 include '**/*.h'
101 }
102 }
103 }
104 } else if (it.targetPlatform.operatingSystem.isMacOsX()) {
105 it.sources {
106 libuvMacCpp(CppSourceSet) {
107 source {
108 srcDirs 'src/main/native/libuv/src/unix'
109 includes = [
110 'bsd-ifaddrs.cpp',
111 'darwin.cpp',
112 'darwin-proctitle.cpp',
113 'fsevents.cpp',
114 'kqueue.cpp',
115 'proctitle.cpp'
116 ]
117 }
118 exportedHeaders {
119 srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src'
120 }
121 }
122 }
123 } else {
124 it.sources {
125 libuvLinuxCpp(CppSourceSet) {
126 source {
127 srcDirs 'src/main/native/libuv/src/unix'
128 includes = [
129 'linux-core.cpp',
130 'linux-inotify.cpp',
131 'linux-syscalls.cpp',
132 'procfs-exepath.cpp',
133 'proctitle.cpp',
134 'sysinfo-loadavg.cpp',
135 ]
136 }
137 exportedHeaders {
138 srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src'
139 }
140 }
141 }
142 }
143 }
144}
145
146def examplesMap = [:];
147file("$projectDir/examples").list(new FilenameFilter() {
148 @Override
149 public boolean accept(File current, String name) {
150 return new File(current, name).isDirectory();
151 }
152}).each {
153 examplesMap.put(it, [])
154}
155
156apply from: "${rootDir}/shared/jni/setupBuild.gradle"
157
158nativeUtils.exportsConfigs {
159 wpiutil {
160 x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure',
161 '_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure',
162 '_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range',
163 '_TI3?AVout_of_range', '_CT??_R0?AVbad_cast']
164 x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure',
165 '_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure',
166 '_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range',
167 '_TI3?AVout_of_range', '_CT??_R0?AVbad_cast']
168 }
169}
170
171cppHeadersZip {
172 from('src/main/native/libuv/include') {
173 into '/'
174 }
175 from('src/main/native/eigeninclude') {
176 into '/'
177 }
178}
179
180model {
181 components {
182 all {
183 it.sources.each {
184 it.exportedHeaders {
185 srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src', 'src/main/native/eigeninclude'
186 }
187 }
188 }
189 }
190}
191
192model {
193 components {
194 examplesMap.each { key, value ->
195 "${key}"(NativeExecutableSpec) {
196 targetBuildTypes 'debug'
197 binaries.all {
198 lib library: 'wpiutil', linkage: 'shared'
199 }
200 sources {
201 cpp {
202 source {
203 srcDirs 'examples/' + "${key}"
204 include '**/*.cpp'
205 }
206 }
207 }
208 }
209 }
210 netconsoleServer(NativeExecutableSpec) {
211 targetBuildTypes 'release'
212 sources {
213 cpp {
214 source {
215 srcDirs = ['src/netconsoleServer/native/cpp']
216 includes = ['**/*.cpp']
217 }
218 }
219 }
220 binaries.all { binary ->
221 lib project: ':wpiutil', library: 'wpiutil', linkage: 'static'
222 if (binary.targetPlatform.operatingSystem.isLinux()) {
223 linker.args "-lutil"
224 }
225 }
226 }
227 netconsoleTee(NativeExecutableSpec) {
228 targetBuildTypes 'release'
229 sources {
230 cpp {
231 source {
232 srcDirs = ['src/netconsoleTee/native/cpp']
233 includes = ['**/*.cpp']
234 }
235 }
236 }
237 binaries.all { binary ->
238 lib project: ':wpiutil', library: 'wpiutil', linkage: 'static'
239 }
240 }
241 }
242}
243
244dependencies {
245 api "org.ejml:ejml-simple:0.38"
246 api "com.fasterxml.jackson.core:jackson-annotations:2.10.0"
247 api "com.fasterxml.jackson.core:jackson-core:2.10.0"
248 api "com.fasterxml.jackson.core:jackson-databind:2.10.0"
249}
250
251def wpilibNumberFileInput = file("src/generate/GenericNumber.java.in")
252def natFileInput = file("src/generate/Nat.java.in")
253def natGetterInput = file("src/generate/NatGetter.java.in")
254def wpilibNumberFileOutputDir = file("$buildDir/generated/java/edu/wpi/first/wpiutil/math/numbers")
255def wpilibNatFileOutput = file("$buildDir/generated/java/edu/wpi/first/wpiutil/math/Nat.java")
256def maxNum = 20
257
258task generateNumbers() {
259 description = "Generates generic number classes from template"
260 group = "WPILib"
261
262 inputs.file wpilibNumberFileInput
263 outputs.dir wpilibNumberFileOutputDir
264
265 doLast {
266 if(wpilibNumberFileOutputDir.exists()) {
267 wpilibNumberFileOutputDir.delete()
268 }
269 wpilibNumberFileOutputDir.mkdirs()
270
271 for(i in 0..maxNum) {
272 def outputFile = new File(wpilibNumberFileOutputDir, "N${i}.java")
273 def read = wpilibNumberFileInput.text.replace('${num}', i.toString())
274 outputFile.write(read)
275 }
276 }
277}
278
279task generateNat() {
280 description = "Generates Nat.java"
281 group = "WPILib"
282 inputs.files([natFileInput, natGetterInput])
283 outputs.file wpilibNatFileOutput
284 dependsOn generateNumbers
285
286 doLast {
287 if(wpilibNatFileOutput.exists()) {
288 wpilibNatFileOutput.delete()
289 }
290
291 def template = natFileInput.text + "\n"
292
293 def importsString = "";
294
295 for(i in 0..maxNum) {
296 importsString += "import edu.wpi.first.wpiutil.math.numbers.N${i};\n"
297 template += natGetterInput.text.replace('${num}', i.toString()) + "\n"
298 }
299 template += "}\n" // Close the class body
300
301 template = template.replace('{{REPLACEWITHIMPORTS}}', importsString)
302
303 wpilibNatFileOutput.write(template)
304 }
305}
306
307sourceSets.main.java.srcDir "${buildDir}/generated/java"
308compileJava.dependsOn generateNumbers
309compileJava.dependsOn generateNat