Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 1 | import com.hubspot.jinjava.Jinjava; |
| 2 | import com.hubspot.jinjava.JinjavaConfig; |
| 3 | |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 4 | ext { |
| 5 | useJava = true |
| 6 | useCpp = true |
| 7 | baseId = 'wpimath' |
| 8 | groupId = 'edu.wpi.first.wpimath' |
| 9 | |
| 10 | nativeName = 'wpimath' |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 11 | devMain = 'edu.wpi.first.math.DevMain' |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 12 | |
| 13 | splitSetup = { |
| 14 | it.sources { |
| 15 | drakeCpp(CppSourceSet) { |
| 16 | source { |
| 17 | srcDirs 'src/main/native/thirdparty/drake/src' |
| 18 | include '**/*.cpp' |
| 19 | } |
| 20 | exportedHeaders { |
| 21 | srcDirs 'src/main/native/thirdparty/drake/include', |
| 22 | 'src/main/native/thirdparty/eigen/include', |
| 23 | 'src/main/native/thirdparty/gcem/include' |
| 24 | } |
| 25 | } |
| 26 | } |
| 27 | } |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 28 | } |
| 29 | |
| 30 | apply from: "${rootDir}/shared/jni/setupBuild.gradle" |
| 31 | |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 32 | cppHeadersZip { |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 33 | from('src/main/native/thirdparty/drake/include') { |
| 34 | into '/' |
| 35 | } |
| 36 | from('src/main/native/thirdparty/eigen/include') { |
| 37 | into '/' |
| 38 | } |
| 39 | from('src/main/native/thirdparty/gcem/include') { |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 40 | into '/' |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | model { |
| 45 | components { |
| 46 | all { |
| 47 | it.sources.each { |
| 48 | it.exportedHeaders { |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 49 | srcDirs 'src/main/native/include', |
| 50 | 'src/main/native/thirdparty/drake/include', |
| 51 | 'src/main/native/thirdparty/eigen/include', |
| 52 | 'src/main/native/thirdparty/gcem/include' |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 53 | } |
| 54 | } |
| 55 | } |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | dependencies { |
Austin Schuh | 75263e3 | 2022-02-22 18:05:32 -0800 | [diff] [blame] | 60 | api "org.ejml:ejml-simple:0.41" |
| 61 | api "com.fasterxml.jackson.core:jackson-annotations:2.12.4" |
| 62 | api "com.fasterxml.jackson.core:jackson-core:2.12.4" |
| 63 | api "com.fasterxml.jackson.core:jackson-databind:2.12.4" |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 64 | } |
| 65 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 66 | def wpilibNumberFileInput = file("src/generate/GenericNumber.java.jinja") |
| 67 | def natFileInput = file("src/generate/Nat.java.jinja") |
| 68 | def wpilibNumberFileOutputDir = file("$buildDir/generated/java/edu/wpi/first/math/numbers") |
| 69 | def wpilibNatFileOutput = file("$buildDir/generated/java/edu/wpi/first/math/Nat.java") |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 70 | def maxNum = 20 |
| 71 | |
| 72 | task generateNumbers() { |
| 73 | description = "Generates generic number classes from template" |
| 74 | group = "WPILib" |
| 75 | |
| 76 | inputs.file wpilibNumberFileInput |
| 77 | outputs.dir wpilibNumberFileOutputDir |
| 78 | |
| 79 | doLast { |
| 80 | if(wpilibNumberFileOutputDir.exists()) { |
| 81 | wpilibNumberFileOutputDir.delete() |
| 82 | } |
| 83 | wpilibNumberFileOutputDir.mkdirs() |
| 84 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 85 | def config = new JinjavaConfig() |
| 86 | def jinjava = new Jinjava(config) |
| 87 | |
| 88 | def template = wpilibNumberFileInput.text |
| 89 | |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 90 | for(i in 0..maxNum) { |
| 91 | def outputFile = new File(wpilibNumberFileOutputDir, "N${i}.java") |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 92 | def replacements = new HashMap<String,?>() |
| 93 | replacements.put("num", i) |
| 94 | def output = jinjava.render(template, replacements) |
| 95 | outputFile.write(output) |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 96 | } |
| 97 | } |
| 98 | } |
| 99 | |
| 100 | task generateNat() { |
| 101 | description = "Generates Nat.java" |
| 102 | group = "WPILib" |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 103 | inputs.file natFileInput |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 104 | outputs.file wpilibNatFileOutput |
| 105 | dependsOn generateNumbers |
| 106 | |
| 107 | doLast { |
| 108 | if(wpilibNatFileOutput.exists()) { |
| 109 | wpilibNatFileOutput.delete() |
| 110 | } |
| 111 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 112 | def config = new JinjavaConfig() |
| 113 | def jinjava = new Jinjava(config) |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 114 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 115 | def template = natFileInput.text |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 116 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 117 | def replacements = new HashMap<String,?>() |
| 118 | replacements.put("nums", 0..maxNum) |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 119 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 120 | def output = jinjava.render(template, replacements) |
| 121 | wpilibNatFileOutput.write(output) |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 122 | } |
| 123 | } |
| 124 | |
| 125 | sourceSets.main.java.srcDir "${buildDir}/generated/java" |
| 126 | compileJava.dependsOn generateNumbers |
| 127 | compileJava.dependsOn generateNat |