blob: e504bbc0fc857be425c9501ec8690a716249097a [file] [log] [blame]
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
}