blob: 858425dcf01cc4bba918e7836769b6897e635f5d [file] [log] [blame]
Kenny Rootebc029b2019-10-02 03:46:29 -07001import org.gradle.util.VersionNumber
2
nmittler7782d132016-11-22 11:34:01 -08003buildscript {
Kenny Rootebc029b2019-10-02 03:46:29 -07004 ext.android_tools = 'com.android.tools.build:gradle:3.5.0'
5 ext.errorproneVersion = '2.3.3'
6 ext.errorproneJavacVersion = '9+181-r4173-1'
nmittler7782d132016-11-22 11:34:01 -08007 repositories {
Kenny Root08e7ef92018-07-03 19:27:00 +09008 google()
Nathan Mittleree6f5782017-02-27 13:17:39 -08009 jcenter()
10 }
11 dependencies {
Kenny Root08e7ef92018-07-03 19:27:00 +090012 // This must be applied in the root project otherwise each subproject will
13 // have it in a different ClassLoader.
14 classpath android_tools
Kenny Rootebc029b2019-10-02 03:46:29 -070015 classpath 'biz.aQute.bnd:biz.aQute.bnd.gradle:4.3.0'
nmittler7782d132016-11-22 11:34:01 -080016 }
17}
18
Kenny Root08e7ef92018-07-03 19:27:00 +090019plugins {
Kenny Root57925792019-10-02 11:08:22 -070020 // Add dependency for build script so we can access Git from our
21 // build script.
Kenny Rootebc029b2019-10-02 03:46:29 -070022 id 'org.ajoberstar.grgit' version '3.1.1'
23 id 'net.ltgt.errorprone' version '1.1.1'
Kenny Root08e7ef92018-07-03 19:27:00 +090024}
25
nmittler7782d132016-11-22 11:34:01 -080026subprojects {
Adam Vartaniane56b72a2017-08-07 11:49:48 +010027 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 Root08e7ef92018-07-03 19:27:00 +090031 if (androidProject) {
32 repositories {
33 google()
34 }
35 } else {
36 apply plugin: 'java-library'
nmittler7782d132016-11-22 11:34:01 -080037 apply plugin: 'cpp'
Nathan Mittler36311a32016-12-22 13:19:59 -080038
39 model {
40 toolChains {
Kenny Root08e7ef92018-07-03 19:27:00 +090041 visualCpp(VisualCpp)
Nathan Mittler36311a32016-12-22 13:19:59 -080042 // Prefer Clang over Gcc (order here matters!)
43 clang(Clang)
44 gcc(Gcc)
45 }
46 }
nmittler7782d132016-11-22 11:34:01 -080047 }
nmittler7782d132016-11-22 11:34:01 -080048 apply plugin: "idea"
Adam Vartanianb216fa32019-09-27 15:27:12 +010049 apply plugin: "jacoco"
Kenny Roota679eec2017-03-16 14:51:10 -070050 apply plugin: "net.ltgt.errorprone"
nmittler7782d132016-11-22 11:34:01 -080051
52 group = "org.conscrypt"
53 description = 'Conscrypt is an alternate Java Security Provider that uses BoringSSL'
Pete Bentley6cdb4582020-02-14 15:13:24 +000054 version = "2.5.0-SNAPSHOT"
nmittler7782d132016-11-22 11:34:01 -080055
56 ext {
Nathan Mittlerf998b642017-01-31 16:56:17 -080057 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 Sidhom3b634222018-04-06 04:04:11 -070068 if (project.hasProperty("boringsslHome")) {
69 boringsslHome = project.property("boringsslHome")
70 } else {
71 boringsslHome = "$System.env.BORINGSSL_HOME"
72 }
73
Nathan Mittlerce593c82017-06-16 13:18:38 -070074 boringsslIncludeDir = normalizePath("$boringsslHome/include")
75 boringssl32BuildDir = normalizePath("$boringsslHome/build32")
76 boringssl64BuildDir = normalizePath("$boringsslHome/build64")
Ben Sidhom3b634222018-04-06 04:04:11 -070077
78 if (project.hasProperty("jdkHome")) {
79 jdkHome = project.property("jdkHome")
80 } else {
81 jdkHome = "$System.env.JAVA_HOME"
82 }
Nathan Mittlerce593c82017-06-16 13:18:38 -070083 jdkIncludeDir = normalizePath("$jdkHome/include")
nmittler7782d132016-11-22 11:34:01 -080084 // Needs to be binary compatible with androidMinSdkVersion
85 androidMinJavaVersion = JavaVersion.VERSION_1_7
nmittler7782d132016-11-22 11:34:01 -080086
Kenny Root0327d942017-01-12 12:09:20 -080087 build32Bit = file("$boringssl32BuildDir").exists()
88 build64Bit = file("$boringssl64BuildDir").exists()
89
nmittler7782d132016-11-22 11:34:01 -080090 // Ensure the environment is configured properly.
nmittler7782d132016-11-22 11:34:01 -080091 assert file("$boringsslHome").exists()
92 assert file("$boringsslIncludeDir").exists()
Kenny Root0327d942017-01-12 12:09:20 -080093 assert build32Bit || build64Bit
nmittler7782d132016-11-22 11:34:01 -080094 assert file("$jdkHome").exists()
95 assert file("$jdkIncludeDir").exists()
96
Nathan Mittleree6f5782017-02-27 13:17:39 -080097 // Get the commit hash for BoringSSL.
Kenny Root08e7ef92018-07-03 19:27:00 +090098 boringSslGit = org.ajoberstar.grgit.Grgit.open(dir: boringsslHome)
Nathan Mittleree6f5782017-02-27 13:17:39 -080099 boringSslVersion = boringSslGit.head().id
100
Nathan Mittler401f1c42017-08-15 10:12:26 -0700101 // 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 Rootebc029b2019-10-02 03:46:29 -0700105 jmhVersion = '1.21'
nmittler7782d132016-11-22 11:34:01 -0800106 libraries = [
Kenny Root08e7ef92018-07-03 19:27:00 +0900107 android_tools: android_tools,
Nathan Mittler6c291c52017-03-27 17:33:17 -0700108 roboelectric: 'org.robolectric:android-all:7.1.0_r7-robolectric-0',
nmittler7782d132016-11-22 11:34:01 -0800109
110 // Test dependencies.
Kenny Rootebc029b2019-10-02 03:46:29 -0700111 bouncycastle_apis: 'org.bouncycastle:bcpkix-jdk15on:1.63',
112 bouncycastle_provider: 'org.bouncycastle:bcprov-jdk15on:1.63',
Nathan Mittlerc58d5262017-02-10 11:14:10 -0800113 junit : 'junit:junit:4.12',
Daulet Zhanguzin27292902020-02-06 10:55:54 +0000114 mockito: 'org.mockito:mockito-core:2.28.2',
115 truth : 'com.google.truth:truth:1.0',
Nathan Mittlerf998b642017-01-31 16:56:17 -0800116
117 // Benchmark dependencies
Nathan Mittler0c6f7672017-02-03 17:45:14 -0800118 jmh_core: "org.openjdk.jmh:jmh-core:${jmhVersion}",
Nathan Mittlerf278d122017-02-15 10:18:22 -0800119 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 Rootebc029b2019-10-02 03:46:29 -0700123 netty_handler: 'io.netty:netty-handler:4.1.24.Final',
124 netty_tcnative: 'io.netty:netty-tcnative-boringssl-static:2.0.26.Final',
Chad Brubaker62190cd2015-04-03 12:17:33 -0700125 ]
Adam Vartanianab0b1232017-11-21 09:33:22 +0000126
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 Brubaker62190cd2015-04-03 12:17:33 -0700139 }
Justin Moreyba94b3d2014-06-10 16:23:32 -0500140
nmittler7782d132016-11-22 11:34:01 -0800141 repositories {
142 mavenCentral()
143 mavenLocal()
144 jcenter()
Jie Daia958f452015-07-01 13:52:08 -0700145 }
Jie Daia958f452015-07-01 13:52:08 -0700146
Adam Vartanianb216fa32019-09-27 15:27:12 +0100147 jacoco {
148 toolVersion = "0.8.4"
149 }
150
Kenny Rootebc029b2019-10-02 03:46:29 -0700151 dependencies {
152 errorprone("com.google.errorprone:error_prone_core:$errorproneVersion")
153 errorproneJavac("com.google.errorprone:javac:$errorproneJavacVersion")
154 }
155
Adam Vartanianbc9e9c32018-10-03 09:38:19 +0100156 task generateProperties(type: WriteProperties) {
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
nmittler7782d132016-11-22 11:34:01 -0800167 if (!androidProject) {
Adam Vartanian44810882019-01-10 10:33:56 +0000168 sourceCompatibility = JavaVersion.VERSION_1_7
169 targetCompatibility = JavaVersion.VERSION_1_7
Nathan Mittlerf998b642017-01-31 16:56:17 -0800170
nmittler7782d132016-11-22 11:34:01 -0800171 [compileJava, compileTestJava].each() {
172 it.options.compilerArgs += ["-Xlint:all", "-Xlint:-options", '-Xmaxwarns', '9999999']
173 it.options.encoding = "UTF-8"
174 if (rootProject.hasProperty('failOnWarnings') && rootProject.failOnWarnings.toBoolean()) {
175 it.options.compilerArgs += ["-Werror"]
176 }
177 }
178
179 compileTestJava {
180 // serialVersionUID is basically guaranteed to be useless in our tests
181 options.compilerArgs += ["-Xlint:-serial"]
182 }
183
184 jar.manifest {
185 attributes('Implementation-Title': name,
186 'Implementation-Version': version,
187 'Built-By': System.getProperty('user.name'),
188 'Built-JDK': System.getProperty('java.version'),
189 'Source-Compatibility': sourceCompatibility,
190 'Target-Compatibility': targetCompatibility)
191 }
192
193 javadoc.options {
194 encoding = 'UTF-8'
195 links 'https://docs.oracle.com/javase/8/docs/api/'
196 }
197
198 // Disable JavaDoc doclint on Java 8. It's annoying.
199 if (JavaVersion.current().isJava8Compatible()) {
200 allprojects {
201 tasks.withType(Javadoc) {
202 options.addStringOption('Xdoclint:none', '-quiet')
203 }
204 }
205 }
206
nmittler7782d132016-11-22 11:34:01 -0800207 task javadocJar(type: Jar) {
208 classifier = 'javadoc'
209 from javadoc
210 }
211
212 task sourcesJar(type: Jar) {
213 classifier = 'sources'
214 from sourceSets.main.allSource
215 }
216
nmittler7782d132016-11-22 11:34:01 -0800217 // At a test failure, log the stack trace to the console so that we don't
218 // have to open the HTML in a browser.
219 test {
220 testLogging {
221 exceptionFormat = 'full'
222 showExceptions true
223 showCauses true
224 showStackTraces true
Nathan Mittler9e01a702017-08-09 11:04:48 -0700225 showStandardStreams = true
nmittler7782d132016-11-22 11:34:01 -0800226 }
Nathan Mittler9e01a702017-08-09 11:04:48 -0700227 // Enable logging for all conscrypt classes while running tests.
228 systemProperty 'java.util.logging.config.file', "${rootDir}/test_logging.properties"
nmittler7782d132016-11-22 11:34:01 -0800229 maxHeapSize = '1500m'
Nathan Mittler401f1c42017-08-15 10:12:26 -0700230
231 // Override the default executable if manually specified
232 if (build64Bit && javaExecutable64 != null) {
233 executable javaExecutable64
234 } else if (build32Bit && javaExecutable32 != null) {
235 executable javaExecutable32
236 }
nmittler7782d132016-11-22 11:34:01 -0800237 }
Jie Daia958f452015-07-01 13:52:08 -0700238 }
239}
Nathan Mittlerce593c82017-06-16 13:18:38 -0700240
241static String normalizePath(path) {
242 new File(path.toString()).absolutePath
243}