Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 1 | import org.gradle.util.VersionNumber |
| 2 | |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 3 | buildscript { |
Kenny Root | 483541f | 2021-01-18 15:05:04 -0800 | [diff] [blame] | 4 | ext.android_tools = 'com.android.tools.build:gradle:4.1.0' |
Pete Bentley | fc9750b | 2020-11-25 17:52:36 +0000 | [diff] [blame] | 5 | ext.errorproneVersion = '2.4.0' |
Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 6 | ext.errorproneJavacVersion = '9+181-r4173-1' |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 7 | repositories { |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 8 | google() |
Nathan Mittler | ee6f578 | 2017-02-27 13:17:39 -0800 | [diff] [blame] | 9 | jcenter() |
| 10 | } |
| 11 | dependencies { |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 12 | // This must be applied in the root project otherwise each subproject will |
| 13 | // have it in a different ClassLoader. |
| 14 | classpath android_tools |
Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 15 | classpath 'biz.aQute.bnd:biz.aQute.bnd.gradle:4.3.0' |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 16 | } |
| 17 | } |
| 18 | |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 19 | plugins { |
Kenny Root | 5792579 | 2019-10-02 11:08:22 -0700 | [diff] [blame] | 20 | // Add dependency for build script so we can access Git from our |
| 21 | // build script. |
Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 22 | id 'org.ajoberstar.grgit' version '3.1.1' |
Pete Bentley | fc9750b | 2020-11-25 17:52:36 +0000 | [diff] [blame] | 23 | id 'net.ltgt.errorprone' version '1.3.0' |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 24 | } |
| 25 | |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 26 | subprojects { |
Adam Vartanian | e56b72a | 2017-08-07 11:49:48 +0100 | [diff] [blame] | 27 | def androidProject = ((project.name == 'conscrypt-android') |
| 28 | || (project.name == 'conscrypt-android-platform') |
| 29 | || (project.name == 'conscrypt-benchmark-android') |
| 30 | || (project.name == 'conscrypt-benchmark-caliper')) |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 31 | if (androidProject) { |
| 32 | repositories { |
| 33 | google() |
| 34 | } |
| 35 | } else { |
| 36 | apply plugin: 'java-library' |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 37 | apply plugin: 'cpp' |
Nathan Mittler | 36311a3 | 2016-12-22 13:19:59 -0800 | [diff] [blame] | 38 | |
| 39 | model { |
| 40 | toolChains { |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 41 | visualCpp(VisualCpp) |
Nathan Mittler | 36311a3 | 2016-12-22 13:19:59 -0800 | [diff] [blame] | 42 | // Prefer Clang over Gcc (order here matters!) |
| 43 | clang(Clang) |
| 44 | gcc(Gcc) |
| 45 | } |
| 46 | } |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 47 | } |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 48 | apply plugin: "idea" |
Adam Vartanian | b216fa3 | 2019-09-27 15:27:12 +0100 | [diff] [blame] | 49 | apply plugin: "jacoco" |
Kenny Root | a679eec | 2017-03-16 14:51:10 -0700 | [diff] [blame] | 50 | apply plugin: "net.ltgt.errorprone" |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 51 | |
| 52 | group = "org.conscrypt" |
| 53 | description = 'Conscrypt is an alternate Java Security Provider that uses BoringSSL' |
Pete Bentley | a80a849 | 2021-03-23 11:18:47 +0000 | [diff] [blame] | 54 | version = "2.6-SNAPSHOT" |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 55 | |
| 56 | ext { |
Nathan Mittler | f998b64 | 2017-01-31 16:56:17 -0800 | [diff] [blame] | 57 | os = org.gradle.internal.os.OperatingSystem.current(); |
| 58 | if (os.isLinux()) { |
| 59 | osName = "linux" |
| 60 | } else if (os.isMacOsX()) { |
| 61 | osName = "osx" |
| 62 | } else if (os.isWindows()) { |
| 63 | osName = "windows" |
| 64 | } else { |
| 65 | throw new GradleException("Unsupported os: " + os.name) |
| 66 | } |
| 67 | |
Ben Sidhom | 3b63422 | 2018-04-06 04:04:11 -0700 | [diff] [blame] | 68 | if (project.hasProperty("boringsslHome")) { |
| 69 | boringsslHome = project.property("boringsslHome") |
| 70 | } else { |
| 71 | boringsslHome = "$System.env.BORINGSSL_HOME" |
| 72 | } |
| 73 | |
Nathan Mittler | ce593c8 | 2017-06-16 13:18:38 -0700 | [diff] [blame] | 74 | boringsslIncludeDir = normalizePath("$boringsslHome/include") |
| 75 | boringssl32BuildDir = normalizePath("$boringsslHome/build32") |
| 76 | boringssl64BuildDir = normalizePath("$boringsslHome/build64") |
Ben Sidhom | 3b63422 | 2018-04-06 04:04:11 -0700 | [diff] [blame] | 77 | |
| 78 | if (project.hasProperty("jdkHome")) { |
| 79 | jdkHome = project.property("jdkHome") |
| 80 | } else { |
| 81 | jdkHome = "$System.env.JAVA_HOME" |
| 82 | } |
Nathan Mittler | ce593c8 | 2017-06-16 13:18:38 -0700 | [diff] [blame] | 83 | jdkIncludeDir = normalizePath("$jdkHome/include") |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 84 | // Needs to be binary compatible with androidMinSdkVersion |
| 85 | androidMinJavaVersion = JavaVersion.VERSION_1_7 |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 86 | |
Kenny Root | 0327d94 | 2017-01-12 12:09:20 -0800 | [diff] [blame] | 87 | build32Bit = file("$boringssl32BuildDir").exists() |
| 88 | build64Bit = file("$boringssl64BuildDir").exists() |
| 89 | |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 90 | // Ensure the environment is configured properly. |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 91 | assert file("$boringsslHome").exists() |
| 92 | assert file("$boringsslIncludeDir").exists() |
Kenny Root | 0327d94 | 2017-01-12 12:09:20 -0800 | [diff] [blame] | 93 | assert build32Bit || build64Bit |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 94 | assert file("$jdkHome").exists() |
| 95 | assert file("$jdkIncludeDir").exists() |
| 96 | |
Nathan Mittler | ee6f578 | 2017-02-27 13:17:39 -0800 | [diff] [blame] | 97 | // Get the commit hash for BoringSSL. |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 98 | boringSslGit = org.ajoberstar.grgit.Grgit.open(dir: boringsslHome) |
Nathan Mittler | ee6f578 | 2017-02-27 13:17:39 -0800 | [diff] [blame] | 99 | boringSslVersion = boringSslGit.head().id |
| 100 | |
Nathan Mittler | 401f1c4 | 2017-08-15 10:12:26 -0700 | [diff] [blame] | 101 | // Allow the java executable to be specified via env/property for each architecture. |
| 102 | javaExecutable32 = System.getProperty('javaExecutable32', System.env.CONSCRYPT_JAVA_EXECUTABLE_32) |
| 103 | javaExecutable64 = System.getProperty('javaExecutable64', System.env.CONSCRYPT_JAVA_EXECUTABLE_64) |
| 104 | |
Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 105 | jmhVersion = '1.21' |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 106 | libraries = [ |
Kenny Root | 08e7ef9 | 2018-07-03 19:27:00 +0900 | [diff] [blame] | 107 | android_tools: android_tools, |
Nathan Mittler | 6c291c5 | 2017-03-27 17:33:17 -0700 | [diff] [blame] | 108 | roboelectric: 'org.robolectric:android-all:7.1.0_r7-robolectric-0', |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 109 | |
| 110 | // Test dependencies. |
Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 111 | bouncycastle_apis: 'org.bouncycastle:bcpkix-jdk15on:1.63', |
| 112 | bouncycastle_provider: 'org.bouncycastle:bcprov-jdk15on:1.63', |
Pete Bentley | 0577986 | 2022-04-13 11:54:29 +0000 | [diff] [blame] | 113 | junit : 'junit:junit:4.12', |
Kenny Root | 8416215 | 2019-11-04 10:40:19 -0800 | [diff] [blame] | 114 | mockito: 'org.mockito:mockito-core:2.28.2', |
| 115 | truth : 'com.google.truth:truth:1.0', |
Nathan Mittler | f998b64 | 2017-01-31 16:56:17 -0800 | [diff] [blame] | 116 | |
| 117 | // Benchmark dependencies |
Nathan Mittler | 0c6f767 | 2017-02-03 17:45:14 -0800 | [diff] [blame] | 118 | jmh_core: "org.openjdk.jmh:jmh-core:${jmhVersion}", |
Nathan Mittler | f278d12 | 2017-02-15 10:18:22 -0800 | [diff] [blame] | 119 | jmh_generator_annprocess: "org.openjdk.jmh:jmh-generator-annprocess:${jmhVersion}", |
| 120 | jmh_generator_asm: "org.openjdk.jmh:jmh-generator-asm:${jmhVersion}", |
| 121 | jmh_generator_bytecode: "org.openjdk.jmh:jmh-generator-bytecode:${jmhVersion}", |
| 122 | jmh_generator_reflection: "org.openjdk.jmh:jmh-generator-reflection:${jmhVersion}", |
Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 123 | netty_handler: 'io.netty:netty-handler:4.1.24.Final', |
| 124 | netty_tcnative: 'io.netty:netty-tcnative-boringssl-static:2.0.26.Final', |
Chad Brubaker | 62190cd | 2015-04-03 12:17:33 -0700 | [diff] [blame] | 125 | ] |
Adam Vartanian | ab0b123 | 2017-11-21 09:33:22 +0000 | [diff] [blame] | 126 | |
| 127 | signJar = { jarPath -> |
| 128 | if (rootProject.hasProperty('signingKeystore') && rootProject.hasProperty('signingPassword')) { |
| 129 | def command = 'jarsigner -keystore ' + rootProject.signingKeystore + |
| 130 | ' -storepass ' + rootProject.signingPassword + |
| 131 | ' ' + jarPath + ' signingcert' |
| 132 | def process = command.execute() |
| 133 | process.waitFor() |
| 134 | if (process.exitValue()) { |
| 135 | throw new GradleException('Jar signing failed for ' + jarPath + ': ' + process.text) |
| 136 | } |
| 137 | } |
| 138 | } |
Chad Brubaker | 62190cd | 2015-04-03 12:17:33 -0700 | [diff] [blame] | 139 | } |
Justin Morey | ba94b3d | 2014-06-10 16:23:32 -0500 | [diff] [blame] | 140 | |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 141 | repositories { |
| 142 | mavenCentral() |
| 143 | mavenLocal() |
| 144 | jcenter() |
Jie Dai | a958f45 | 2015-07-01 13:52:08 -0700 | [diff] [blame] | 145 | } |
Jie Dai | a958f45 | 2015-07-01 13:52:08 -0700 | [diff] [blame] | 146 | |
Adam Vartanian | b216fa3 | 2019-09-27 15:27:12 +0100 | [diff] [blame] | 147 | jacoco { |
| 148 | toolVersion = "0.8.4" |
| 149 | } |
| 150 | |
Kenny Root | ebc029b | 2019-10-02 03:46:29 -0700 | [diff] [blame] | 151 | dependencies { |
| 152 | errorprone("com.google.errorprone:error_prone_core:$errorproneVersion") |
| 153 | errorproneJavac("com.google.errorprone:javac:$errorproneJavacVersion") |
| 154 | } |
| 155 | |
Kenny Root | ad84d43 | 2020-09-09 12:32:43 -0700 | [diff] [blame] | 156 | tasks.register("generateProperties", WriteProperties) { |
Adam Vartanian | bc9e9c3 | 2018-10-03 09:38:19 +0100 | [diff] [blame] | 157 | ext { |
| 158 | parsedVersion = VersionNumber.parse(version) |
| 159 | } |
| 160 | property("org.conscrypt.version.major", parsedVersion.getMajor()) |
| 161 | property("org.conscrypt.version.minor", parsedVersion.getMinor()) |
| 162 | property("org.conscrypt.version.patch", parsedVersion.getMicro()) |
| 163 | property("org.conscrypt.boringssl.version", boringSslVersion) |
| 164 | outputFile "build/generated/resources/org/conscrypt/conscrypt.properties" |
| 165 | } |
| 166 | |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 167 | if (!androidProject) { |
Pete Bentley | c36e455 | 2021-07-15 18:07:55 +0100 | [diff] [blame] | 168 | sourceCompatibility = JavaVersion.VERSION_1_8 |
| 169 | targetCompatibility = JavaVersion.VERSION_1_8 |
Nathan Mittler | f998b64 | 2017-01-31 16:56:17 -0800 | [diff] [blame] | 170 | |
Kenny Root | ad84d43 | 2020-09-09 12:32:43 -0700 | [diff] [blame] | 171 | [tasks.named("compileJava"), tasks.named("compileTestJava")].forEach { t -> |
| 172 | t.configure { |
| 173 | options.compilerArgs += ["-Xlint:all", "-Xlint:-options", '-Xmaxwarns', '9999999'] |
| 174 | options.encoding = "UTF-8" |
| 175 | if (rootProject.hasProperty('failOnWarnings') && rootProject.failOnWarnings.toBoolean()) { |
| 176 | options.compilerArgs += ["-Werror"] |
| 177 | } |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 178 | } |
| 179 | } |
| 180 | |
Kenny Root | ad84d43 | 2020-09-09 12:32:43 -0700 | [diff] [blame] | 181 | tasks.named("compileTestJava").configure { |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 182 | // serialVersionUID is basically guaranteed to be useless in our tests |
| 183 | options.compilerArgs += ["-Xlint:-serial"] |
| 184 | } |
| 185 | |
Kenny Root | ad84d43 | 2020-09-09 12:32:43 -0700 | [diff] [blame] | 186 | tasks.named("jar").configure { |
| 187 | manifest { |
| 188 | attributes('Implementation-Title': name, |
| 189 | 'Implementation-Version': version, |
| 190 | 'Built-By': System.getProperty('user.name'), |
| 191 | 'Built-JDK': System.getProperty('java.version'), |
| 192 | 'Source-Compatibility': sourceCompatibility, |
| 193 | 'Target-Compatibility': targetCompatibility) |
| 194 | } |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 195 | } |
| 196 | |
| 197 | javadoc.options { |
| 198 | encoding = 'UTF-8' |
| 199 | links 'https://docs.oracle.com/javase/8/docs/api/' |
| 200 | } |
| 201 | |
| 202 | // Disable JavaDoc doclint on Java 8. It's annoying. |
| 203 | if (JavaVersion.current().isJava8Compatible()) { |
| 204 | allprojects { |
| 205 | tasks.withType(Javadoc) { |
| 206 | options.addStringOption('Xdoclint:none', '-quiet') |
| 207 | } |
| 208 | } |
| 209 | } |
| 210 | |
Kenny Root | ad84d43 | 2020-09-09 12:32:43 -0700 | [diff] [blame] | 211 | tasks.register("javadocJar", Jar) { |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 212 | classifier = 'javadoc' |
| 213 | from javadoc |
| 214 | } |
| 215 | |
Kenny Root | ad84d43 | 2020-09-09 12:32:43 -0700 | [diff] [blame] | 216 | tasks.register("sourcesJar", Jar) { |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 217 | classifier = 'sources' |
| 218 | from sourceSets.main.allSource |
| 219 | } |
| 220 | |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 221 | // At a test failure, log the stack trace to the console so that we don't |
| 222 | // have to open the HTML in a browser. |
| 223 | test { |
| 224 | testLogging { |
| 225 | exceptionFormat = 'full' |
| 226 | showExceptions true |
| 227 | showCauses true |
| 228 | showStackTraces true |
Nathan Mittler | 9e01a70 | 2017-08-09 11:04:48 -0700 | [diff] [blame] | 229 | showStandardStreams = true |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 230 | } |
Nathan Mittler | 9e01a70 | 2017-08-09 11:04:48 -0700 | [diff] [blame] | 231 | // Enable logging for all conscrypt classes while running tests. |
| 232 | systemProperty 'java.util.logging.config.file', "${rootDir}/test_logging.properties" |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 233 | maxHeapSize = '1500m' |
Nathan Mittler | 401f1c4 | 2017-08-15 10:12:26 -0700 | [diff] [blame] | 234 | |
| 235 | // Override the default executable if manually specified |
| 236 | if (build64Bit && javaExecutable64 != null) { |
| 237 | executable javaExecutable64 |
| 238 | } else if (build32Bit && javaExecutable32 != null) { |
| 239 | executable javaExecutable32 |
| 240 | } |
nmittler | 7782d13 | 2016-11-22 11:34:01 -0800 | [diff] [blame] | 241 | } |
Jie Dai | a958f45 | 2015-07-01 13:52:08 -0700 | [diff] [blame] | 242 | } |
| 243 | } |
Nathan Mittler | ce593c8 | 2017-06-16 13:18:38 -0700 | [diff] [blame] | 244 | |
| 245 | static String normalizePath(path) { |
| 246 | new File(path.toString()).absolutePath |
| 247 | } |