1buildscript { 2 repositories { 3 mavenCentral() 4 mavenLocal() 5 jcenter() 6 maven { 7 url 'https://plugins.gradle.org/m2/' 8 } 9 } 10 dependencies { 11 // Add dependency for build script, 12 // so we can access Git from our 13 // build script. 14 classpath 'org.ajoberstar:grgit:1.1.0' 15 classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.9' 16 } 17} 18 19subprojects { 20 def androidProject = project.name == 'conscrypt-android' 21 if (!androidProject) { 22 apply plugin: 'java' 23 apply plugin: 'cpp' 24 25 model { 26 toolChains { 27 visualCpp(VisualCpp) { 28 // Temporary hack for https://github.com/gradle/gradle/issues/929 29 installDir "file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2014.0" 30 windowsSdkDir "file:///C:/Program%20Files%20(x86)/Windows%20Kits/8.1" 31 } 32 // Prefer Clang over Gcc (order here matters!) 33 clang(Clang) 34 gcc(Gcc) 35 } 36 } 37 } 38 apply plugin: "maven" 39 apply plugin: "signing" 40 apply plugin: "idea" 41 apply plugin: "jacoco" 42 apply plugin: "net.ltgt.errorprone" 43 44 group = "org.conscrypt" 45 description = 'Conscrypt is an alternate Java Security Provider that uses BoringSSL' 46 version = "1.1.0-SNAPSHOT" 47 48 ext { 49 os = org.gradle.internal.os.OperatingSystem.current(); 50 if (os.isLinux()) { 51 osName = "linux" 52 } else if (os.isMacOsX()) { 53 osName = "osx" 54 } else if (os.isWindows()) { 55 osName = "windows" 56 } else { 57 throw new GradleException("Unsupported os: " + os.name) 58 } 59 60 boringsslHome = "$System.env.BORINGSSL_HOME" 61 boringsslIncludeDir = "$boringsslHome/include" 62 boringssl32BuildDir = "$boringsslHome/build32" 63 boringssl64BuildDir = "$boringsslHome/build64" 64 jdkHome = "$System.env.JAVA_HOME" 65 jdkIncludeDir = "$jdkHome/include" 66 // Needs to be binary compatible with androidMinSdkVersion 67 androidMinJavaVersion = JavaVersion.VERSION_1_7 68 69 build32Bit = file("$boringssl32BuildDir").exists() 70 build64Bit = file("$boringssl64BuildDir").exists() 71 72 // Ensure the environment is configured properly. 73 assert file("$boringsslHome").exists() 74 assert file("$boringsslIncludeDir").exists() 75 assert build32Bit || build64Bit 76 assert file("$jdkHome").exists() 77 assert file("$jdkIncludeDir").exists() 78 79 // Get the commit hash for BoringSSL. 80 boringSslGit = org.ajoberstar.grgit.Grgit.open(file("$boringsslHome")) 81 boringSslVersion = boringSslGit.head().id 82 83 jmhVersion = '1.17.4' 84 libraries = [ 85 roboelectric: 'org.robolectric:android-all:5.0.0_r2-robolectric-1', 86 87 // Test dependencies. 88 guava : 'com.google.guava:guava:19.0', 89 junit : 'junit:junit:4.12', 90 mockito: 'org.mockito:mockito-core:1.9.5', 91 truth : 'com.google.truth:truth:0.28', 92 bouncycastle_provider: 'org.bouncycastle:bcprov-jdk15on:1.55', 93 bouncycastle_apis: 'org.bouncycastle:bcpkix-jdk15on:1.55', 94 95 // Benchmark dependencies 96 jmh_core: "org.openjdk.jmh:jmh-core:${jmhVersion}", 97 jmh_generator_annprocess: "org.openjdk.jmh:jmh-generator-annprocess:${jmhVersion}", 98 jmh_generator_asm: "org.openjdk.jmh:jmh-generator-asm:${jmhVersion}", 99 jmh_generator_bytecode: "org.openjdk.jmh:jmh-generator-bytecode:${jmhVersion}", 100 jmh_generator_reflection: "org.openjdk.jmh:jmh-generator-reflection:${jmhVersion}", 101 netty_handler: 'io.netty:netty-handler:4.1.8.Final', 102 netty_tcnative: 'io.netty:netty-tcnative-boringssl-static:1.1.33.Fork26', 103 ] 104 } 105 106 repositories { 107 mavenCentral() 108 mavenLocal() 109 jcenter() 110 } 111 112 signing { 113 required false 114 sign configurations.archives 115 } 116 117 if (!androidProject) { 118 sourceCompatibility = JavaVersion.VERSION_1_8 119 targetCompatibility = JavaVersion.VERSION_1_8 120 121 [compileJava, compileTestJava].each() { 122 it.options.compilerArgs += ["-Xlint:all", "-Xlint:-options", '-Xmaxwarns', '9999999'] 123 it.options.encoding = "UTF-8" 124 if (rootProject.hasProperty('failOnWarnings') && rootProject.failOnWarnings.toBoolean()) { 125 it.options.compilerArgs += ["-Werror"] 126 } 127 } 128 129 compileTestJava { 130 // serialVersionUID is basically guaranteed to be useless in our tests 131 options.compilerArgs += ["-Xlint:-serial"] 132 } 133 134 jar.manifest { 135 attributes('Implementation-Title': name, 136 'Implementation-Version': version, 137 'Built-By': System.getProperty('user.name'), 138 'Built-JDK': System.getProperty('java.version'), 139 'Source-Compatibility': sourceCompatibility, 140 'Target-Compatibility': targetCompatibility) 141 } 142 143 javadoc.options { 144 encoding = 'UTF-8' 145 links 'https://docs.oracle.com/javase/8/docs/api/' 146 } 147 148 // Disable JavaDoc doclint on Java 8. It's annoying. 149 if (JavaVersion.current().isJava8Compatible()) { 150 allprojects { 151 tasks.withType(Javadoc) { 152 options.addStringOption('Xdoclint:none', '-quiet') 153 } 154 } 155 } 156 157 task javadocJar(type: Jar) { 158 classifier = 'javadoc' 159 from javadoc 160 } 161 162 task sourcesJar(type: Jar) { 163 classifier = 'sources' 164 from sourceSets.main.allSource 165 } 166 167 artifacts { 168 archives sourcesJar 169 archives javadocJar 170 } 171 172 uploadArchives.repositories.mavenDeployer { 173 beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } 174 String stagingUrl 175 if (rootProject.hasProperty('repositoryId')) { 176 stagingUrl = 'https://oss.sonatype.org/service/local/staging/deployByRepositoryId/' + 177 rootProject.repositoryId 178 } else { 179 stagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/' 180 } 181 def configureAuth = { 182 if (rootProject.hasProperty('ossrhUsername') && rootProject.hasProperty('ossrhPassword')) { 183 authentication(userName: rootProject.ossrhUsername, password: rootProject.ossrhPassword) 184 } 185 } 186 repository(url: stagingUrl, configureAuth) 187 snapshotRepository(url: 'https://oss.sonatype.org/content/repositories/snapshots/', configureAuth) 188 } 189 190 [ 191 install.repositories.mavenInstaller, 192 uploadArchives.repositories.mavenDeployer, 193 ]*.pom*.whenConfigured { pom -> 194 pom.project { 195 name "$project.group:$project.name" 196 description project.description 197 url 'https://conscrypt.org/' 198 199 scm { 200 connection 'scm:git:https://github.com/google/conscrypt.git' 201 developerConnection 'scm:git:git@github.com:google/conscrypt.git' 202 url 'https://github.com/google/conscrypt' 203 } 204 205 licenses { 206 license { 207 name 'Apache 2' 208 url 'https://www.apache.org/licenses/LICENSE-2.0' 209 } 210 } 211 212 developers { 213 developer { 214 id "conscrypt" 215 name "Conscrypt Contributors" 216 email "conscrypt@googlegroups.com" 217 url "https://conscrypt.org/" 218 organization = "Google, Inc." 219 organizationUrl "https://www.google.com" 220 } 221 } 222 } 223 } 224 225 // At a test failure, log the stack trace to the console so that we don't 226 // have to open the HTML in a browser. 227 test { 228 testLogging { 229 exceptionFormat = 'full' 230 showExceptions true 231 showCauses true 232 showStackTraces true 233 } 234 maxHeapSize = '1500m' 235 } 236 } 237} 238