| import org.ajoberstar.grgit.Grgit |
| import org.gradle.util.VersionNumber |
| |
| buildscript { |
| ext.android_tools = 'com.android.tools.build:gradle:7.4.0' |
| ext.errorproneVersion = '2.4.0' |
| ext.errorproneJavacVersion = '9+181-r4173-1' |
| repositories { |
| google() |
| mavenCentral() |
| } |
| dependencies { |
| // This must be applied in the root project otherwise each subproject will |
| // have it in a different ClassLoader. |
| classpath android_tools |
| } |
| } |
| |
| plugins { |
| // Add dependency for build script so we can access Git from our |
| // build script. |
| id 'org.ajoberstar.grgit' version '3.1.1' |
| id 'net.ltgt.errorprone' version '1.3.0' |
| id "com.google.osdetector" version "1.7.3" |
| id "biz.aQute.bnd.builder" version "6.4.0" apply false |
| } |
| |
| subprojects { |
| def androidProject = ((project.name == 'conscrypt-android') |
| || (project.name == 'conscrypt-android-platform') |
| || (project.name == 'conscrypt-benchmark-android') |
| || (project.name == 'conscrypt-benchmark-caliper')) |
| if (androidProject) { |
| repositories { |
| google() |
| } |
| } else { |
| apply plugin: 'java-library' |
| apply plugin: 'cpp' |
| |
| model { |
| toolChains { |
| visualCpp(VisualCpp) |
| // Prefer Clang over Gcc (order here matters!) |
| clang(Clang) { |
| // Gradle 7.x still seems to get confused about toolchains on Mac |
| // so explicitly add -arch args. |
| target("osx_aarch64") { |
| cppCompiler.withArguments { args -> |
| args << "-arch" << "arm64" |
| } |
| linker.withArguments { args -> |
| args << "-arch" << "arm64" |
| } |
| } |
| target("osx_x86-64") { |
| cppCompiler.withArguments { args -> |
| args << "-arch" << "x86_64" |
| } |
| linker.withArguments { args -> |
| args << "-arch" << "x86_64" |
| } |
| } |
| } |
| gcc(Gcc) |
| } |
| } |
| } |
| apply plugin: "idea" |
| apply plugin: "jacoco" |
| apply plugin: "net.ltgt.errorprone" |
| |
| group = "org.conscrypt" |
| description = 'Conscrypt is an alternate Java Security Provider that uses BoringSSL' |
| version = "2.6-SNAPSHOT" |
| |
| ext { |
| // Needs to be binary compatible with androidMinSdkVersion |
| androidMinJavaVersion = JavaVersion.VERSION_1_8 |
| |
| if (project.hasProperty("boringsslHome")) { |
| boringsslHome = project.property("boringsslHome") |
| } else { |
| boringsslHome = "$System.env.BORINGSSL_HOME" |
| } |
| boringsslIncludeDir = normalizePath("$boringsslHome/include") |
| |
| // Ensure the environment is configured properly. |
| assert file("$boringsslIncludeDir").exists() |
| |
| // Get the commit hash for BoringSSL. |
| boringSslGit = Grgit.open(dir: boringsslHome) |
| boringSslVersion = boringSslGit.head().id |
| |
| jmhVersion = '1.21' |
| libraries = [ |
| android_tools: android_tools, |
| roboelectric: 'org.robolectric:android-all:7.1.0_r7-robolectric-0', |
| |
| // Test dependencies. |
| bouncycastle_apis: 'org.bouncycastle:bcpkix-jdk15on:1.63', |
| bouncycastle_provider: 'org.bouncycastle:bcprov-jdk15on:1.63', |
| junit : 'junit:junit:4.12', |
| mockito: 'org.mockito:mockito-core:2.28.2', |
| truth : 'com.google.truth:truth:1.0', |
| |
| // Benchmark dependencies |
| jmh_core: "org.openjdk.jmh:jmh-core:${jmhVersion}", |
| jmh_generator_annprocess: "org.openjdk.jmh:jmh-generator-annprocess:${jmhVersion}", |
| jmh_generator_asm: "org.openjdk.jmh:jmh-generator-asm:${jmhVersion}", |
| jmh_generator_bytecode: "org.openjdk.jmh:jmh-generator-bytecode:${jmhVersion}", |
| jmh_generator_reflection: "org.openjdk.jmh:jmh-generator-reflection:${jmhVersion}", |
| netty_handler: 'io.netty:netty-handler:4.1.24.Final', |
| netty_tcnative: 'io.netty:netty-tcnative-boringssl-static:2.0.26.Final', |
| ] |
| |
| signJar = { jarPath -> |
| if (rootProject.hasProperty('signingKeystore') && rootProject.hasProperty('signingPassword')) { |
| def command = 'jarsigner -keystore ' + rootProject.signingKeystore + |
| ' -storepass ' + rootProject.signingPassword + |
| ' ' + jarPath + ' signingcert' |
| def process = command.execute() |
| process.waitFor() |
| if (process.exitValue()) { |
| throw new RuntimeException('Jar signing failed for ' + jarPath + ': ' + process.text) |
| } |
| } |
| } |
| } |
| |
| repositories { |
| mavenCentral() |
| mavenLocal() |
| } |
| |
| jacoco { |
| toolVersion = "0.8.4" |
| } |
| |
| dependencies { |
| errorprone("com.google.errorprone:error_prone_core:$errorproneVersion") |
| errorproneJavac("com.google.errorprone:javac:$errorproneJavacVersion") |
| } |
| |
| tasks.register("generateProperties", WriteProperties) { |
| ext { |
| parsedVersion = VersionNumber.parse(version) |
| } |
| property("org.conscrypt.version.major", parsedVersion.getMajor()) |
| property("org.conscrypt.version.minor", parsedVersion.getMinor()) |
| property("org.conscrypt.version.patch", parsedVersion.getMicro()) |
| property("org.conscrypt.boringssl.version", boringSslVersion) |
| outputFile "build/generated/resources/org/conscrypt/conscrypt.properties" |
| } |
| |
| if (!androidProject) { |
| java { |
| toolchain { |
| // Compile with a real JDK 8 so we don't end up with accidental dependencies |
| // on Java 11 bootclasspath, e.g. ByteBuffer.flip(). |
| languageVersion = JavaLanguageVersion.of(8) |
| } |
| } |
| |
| [tasks.named("compileJava"), tasks.named("compileTestJava")].forEach { t -> |
| t.configure { |
| options.compilerArgs += ["-Xlint:all", "-Xlint:-options", '-Xmaxwarns', '9999999'] |
| options.encoding = "UTF-8" |
| if (rootProject.hasProperty('failOnWarnings') && rootProject.failOnWarnings.toBoolean()) { |
| options.compilerArgs += ["-Werror"] |
| } |
| } |
| } |
| |
| tasks.named("compileTestJava").configure { |
| // serialVersionUID is basically guaranteed to be useless in our tests |
| options.compilerArgs += ["-Xlint:-serial"] |
| } |
| |
| tasks.named("jar").configure { |
| manifest { |
| attributes('Implementation-Title': name, |
| 'Implementation-Version': archiveVersion, |
| 'Built-By': System.getProperty('user.name'), |
| 'Built-JDK': System.getProperty('java.version'), |
| 'Source-Compatibility': sourceCompatibility, |
| 'Target-Compatibility': targetCompatibility) |
| } |
| } |
| |
| javadoc.options { |
| encoding = 'UTF-8' |
| links 'https://docs.oracle.com/javase/8/docs/api/' |
| } |
| |
| // All non-Android projects build with Java 8, so disable doclint as it's noisy. |
| allprojects { |
| tasks.withType(Javadoc) { |
| options.addStringOption('Xdoclint:none', '-quiet') |
| } |
| } |
| |
| tasks.register("javadocJar", Jar) { |
| classifier = 'javadoc' |
| from javadoc |
| } |
| |
| tasks.register("sourcesJar", Jar) { |
| classifier = 'sources' |
| from sourceSets.main.allSource |
| } |
| |
| // At a test failure, log the stack trace to the console so that we don't |
| // have to open the HTML in a browser. |
| test { |
| testLogging { |
| exceptionFormat = 'full' |
| showExceptions true |
| showCauses true |
| showStackTraces true |
| showStandardStreams = true |
| } |
| // Enable logging for all conscrypt classes while running tests. |
| systemProperty 'java.util.logging.config.file', "${rootDir}/test_logging.properties" |
| maxHeapSize = '1500m' |
| } |
| } |
| } |
| |
| static String normalizePath(path) { |
| new File(path.toString()).absolutePath |
| } |