xref: /aosp_15_r20/external/conscrypt/build.gradle (revision cd0cc2e34ba52cdf454361820a14d744e4bd531d)
1*cd0cc2e3SAndroid Build Coastguard Workerimport org.ajoberstar.grgit.Grgit
2*cd0cc2e3SAndroid Build Coastguard Workerimport org.gradle.util.VersionNumber
3*cd0cc2e3SAndroid Build Coastguard Worker
4*cd0cc2e3SAndroid Build Coastguard Workerbuildscript {
5*cd0cc2e3SAndroid Build Coastguard Worker    repositories {
6*cd0cc2e3SAndroid Build Coastguard Worker        google()
7*cd0cc2e3SAndroid Build Coastguard Worker        mavenCentral()
8*cd0cc2e3SAndroid Build Coastguard Worker    }
9*cd0cc2e3SAndroid Build Coastguard Worker    dependencies {
10*cd0cc2e3SAndroid Build Coastguard Worker        // This must be applied in the root project otherwise each subproject will
11*cd0cc2e3SAndroid Build Coastguard Worker        // have it in a different ClassLoader.
12*cd0cc2e3SAndroid Build Coastguard Worker        classpath libs.android.tools
13*cd0cc2e3SAndroid Build Coastguard Worker    }
14*cd0cc2e3SAndroid Build Coastguard Worker}
15*cd0cc2e3SAndroid Build Coastguard Worker
16*cd0cc2e3SAndroid Build Coastguard Workerplugins {
17*cd0cc2e3SAndroid Build Coastguard Worker    alias libs.plugins.bnd apply false
18*cd0cc2e3SAndroid Build Coastguard Worker    alias libs.plugins.errorprone
19*cd0cc2e3SAndroid Build Coastguard Worker    alias libs.plugins.grgit
20*cd0cc2e3SAndroid Build Coastguard Worker    alias libs.plugins.osdetector
21*cd0cc2e3SAndroid Build Coastguard Worker    alias libs.plugins.task.tree
22*cd0cc2e3SAndroid Build Coastguard Worker}
23*cd0cc2e3SAndroid Build Coastguard Worker
24*cd0cc2e3SAndroid Build Coastguard Workersubprojects {
25*cd0cc2e3SAndroid Build Coastguard Worker    def androidProject = ((project.name == 'conscrypt-android')
26*cd0cc2e3SAndroid Build Coastguard Worker            || (project.name == 'conscrypt-android-platform')
27*cd0cc2e3SAndroid Build Coastguard Worker            || (project.name == 'conscrypt-benchmark-android')
28*cd0cc2e3SAndroid Build Coastguard Worker            || (project.name == 'conscrypt-benchmark-caliper'))
29*cd0cc2e3SAndroid Build Coastguard Worker    if (androidProject) {
30*cd0cc2e3SAndroid Build Coastguard Worker        repositories {
31*cd0cc2e3SAndroid Build Coastguard Worker            google()
32*cd0cc2e3SAndroid Build Coastguard Worker        }
33*cd0cc2e3SAndroid Build Coastguard Worker    } else {
34*cd0cc2e3SAndroid Build Coastguard Worker        apply plugin: 'java-library'
35*cd0cc2e3SAndroid Build Coastguard Worker        apply plugin: 'cpp'
36*cd0cc2e3SAndroid Build Coastguard Worker
37*cd0cc2e3SAndroid Build Coastguard Worker        model {
38*cd0cc2e3SAndroid Build Coastguard Worker            toolChains {
39*cd0cc2e3SAndroid Build Coastguard Worker                visualCpp(VisualCpp)
40*cd0cc2e3SAndroid Build Coastguard Worker                // Prefer Clang over Gcc (order here matters!)
41*cd0cc2e3SAndroid Build Coastguard Worker                clang(Clang) {
42*cd0cc2e3SAndroid Build Coastguard Worker                    // Gradle 7.x still seems to get confused about toolchains on Mac
43*cd0cc2e3SAndroid Build Coastguard Worker                    // so explicitly add -arch args.
44*cd0cc2e3SAndroid Build Coastguard Worker                    target("osx_aarch64") {
45*cd0cc2e3SAndroid Build Coastguard Worker                        cppCompiler.withArguments { args ->
46*cd0cc2e3SAndroid Build Coastguard Worker                            args << "-arch" << "arm64"
47*cd0cc2e3SAndroid Build Coastguard Worker                        }
48*cd0cc2e3SAndroid Build Coastguard Worker                        linker.withArguments { args ->
49*cd0cc2e3SAndroid Build Coastguard Worker                            args << "-arch" << "arm64"
50*cd0cc2e3SAndroid Build Coastguard Worker                        }
51*cd0cc2e3SAndroid Build Coastguard Worker                    }
52*cd0cc2e3SAndroid Build Coastguard Worker                    target("osx_x86-64") {
53*cd0cc2e3SAndroid Build Coastguard Worker                        cppCompiler.withArguments { args ->
54*cd0cc2e3SAndroid Build Coastguard Worker                            args << "-arch" << "x86_64"
55*cd0cc2e3SAndroid Build Coastguard Worker                        }
56*cd0cc2e3SAndroid Build Coastguard Worker                        linker.withArguments { args ->
57*cd0cc2e3SAndroid Build Coastguard Worker                            args << "-arch" << "x86_64"
58*cd0cc2e3SAndroid Build Coastguard Worker                        }
59*cd0cc2e3SAndroid Build Coastguard Worker                    }
60*cd0cc2e3SAndroid Build Coastguard Worker                }
61*cd0cc2e3SAndroid Build Coastguard Worker                gcc(Gcc)
62*cd0cc2e3SAndroid Build Coastguard Worker            }
63*cd0cc2e3SAndroid Build Coastguard Worker        }
64*cd0cc2e3SAndroid Build Coastguard Worker    }
65*cd0cc2e3SAndroid Build Coastguard Worker    apply plugin: "jacoco"
66*cd0cc2e3SAndroid Build Coastguard Worker    apply plugin: libs.plugins.errorprone.get().pluginId
67*cd0cc2e3SAndroid Build Coastguard Worker
68*cd0cc2e3SAndroid Build Coastguard Worker    group = "org.conscrypt"
69*cd0cc2e3SAndroid Build Coastguard Worker    description = 'Conscrypt is an alternate Java Security Provider that uses BoringSSL'
70*cd0cc2e3SAndroid Build Coastguard Worker    version = "2.6-SNAPSHOT"
71*cd0cc2e3SAndroid Build Coastguard Worker
72*cd0cc2e3SAndroid Build Coastguard Worker    ext {
73*cd0cc2e3SAndroid Build Coastguard Worker        // Needs to be binary compatible with androidMinSdkVersion
74*cd0cc2e3SAndroid Build Coastguard Worker        androidMinJavaVersion = JavaVersion.VERSION_1_8
75*cd0cc2e3SAndroid Build Coastguard Worker
76*cd0cc2e3SAndroid Build Coastguard Worker        if (project.hasProperty("boringsslHome")) {
77*cd0cc2e3SAndroid Build Coastguard Worker            boringsslHome = project.property("boringsslHome")
78*cd0cc2e3SAndroid Build Coastguard Worker        } else {
79*cd0cc2e3SAndroid Build Coastguard Worker            boringsslHome = "$System.env.BORINGSSL_HOME"
80*cd0cc2e3SAndroid Build Coastguard Worker        }
81*cd0cc2e3SAndroid Build Coastguard Worker        boringsslIncludeDir = normalizePath("$boringsslHome/include")
82*cd0cc2e3SAndroid Build Coastguard Worker
83*cd0cc2e3SAndroid Build Coastguard Worker        // Ensure the environment is configured properly.
84*cd0cc2e3SAndroid Build Coastguard Worker        assert file("$boringsslIncludeDir").exists()
85*cd0cc2e3SAndroid Build Coastguard Worker
86*cd0cc2e3SAndroid Build Coastguard Worker        // Get the commit hash for BoringSSL.
87*cd0cc2e3SAndroid Build Coastguard Worker        boringSslGit = Grgit.open(dir: boringsslHome)
88*cd0cc2e3SAndroid Build Coastguard Worker        boringSslVersion = boringSslGit.head().id
89*cd0cc2e3SAndroid Build Coastguard Worker
90*cd0cc2e3SAndroid Build Coastguard Worker        signJar = { jarPath ->
91*cd0cc2e3SAndroid Build Coastguard Worker            if (rootProject.hasProperty('signingKeystore') && rootProject.hasProperty('signingPassword')) {
92*cd0cc2e3SAndroid Build Coastguard Worker                def command = 'jarsigner -keystore ' + rootProject.signingKeystore +
93*cd0cc2e3SAndroid Build Coastguard Worker                        ' -storepass ' + rootProject.signingPassword +
94*cd0cc2e3SAndroid Build Coastguard Worker                        ' ' + jarPath + ' signingcert'
95*cd0cc2e3SAndroid Build Coastguard Worker                def process = command.execute()
96*cd0cc2e3SAndroid Build Coastguard Worker                process.waitFor()
97*cd0cc2e3SAndroid Build Coastguard Worker                if (process.exitValue()) {
98*cd0cc2e3SAndroid Build Coastguard Worker                    throw new RuntimeException('Jar signing failed for ' + jarPath + ': ' + process.text)
99*cd0cc2e3SAndroid Build Coastguard Worker                }
100*cd0cc2e3SAndroid Build Coastguard Worker            }
101*cd0cc2e3SAndroid Build Coastguard Worker        }
102*cd0cc2e3SAndroid Build Coastguard Worker    }
103*cd0cc2e3SAndroid Build Coastguard Worker
104*cd0cc2e3SAndroid Build Coastguard Worker    repositories {
105*cd0cc2e3SAndroid Build Coastguard Worker        mavenCentral()
106*cd0cc2e3SAndroid Build Coastguard Worker        mavenLocal()
107*cd0cc2e3SAndroid Build Coastguard Worker    }
108*cd0cc2e3SAndroid Build Coastguard Worker
109*cd0cc2e3SAndroid Build Coastguard Worker    jacoco {
110*cd0cc2e3SAndroid Build Coastguard Worker        toolVersion = libs.versions.jacoco
111*cd0cc2e3SAndroid Build Coastguard Worker    }
112*cd0cc2e3SAndroid Build Coastguard Worker
113*cd0cc2e3SAndroid Build Coastguard Worker    configurations {
114*cd0cc2e3SAndroid Build Coastguard Worker        jacocoAnt
115*cd0cc2e3SAndroid Build Coastguard Worker        jacocoAgent
116*cd0cc2e3SAndroid Build Coastguard Worker    }
117*cd0cc2e3SAndroid Build Coastguard Worker
118*cd0cc2e3SAndroid Build Coastguard Worker    dependencies {
119*cd0cc2e3SAndroid Build Coastguard Worker        jacocoAnt libs.jacoco.ant
120*cd0cc2e3SAndroid Build Coastguard Worker        jacocoAgent libs.jacoco.agent
121*cd0cc2e3SAndroid Build Coastguard Worker    }
122*cd0cc2e3SAndroid Build Coastguard Worker
123*cd0cc2e3SAndroid Build Coastguard Worker    dependencies {
124*cd0cc2e3SAndroid Build Coastguard Worker        errorprone libs.errorprone
125*cd0cc2e3SAndroid Build Coastguard Worker    }
126*cd0cc2e3SAndroid Build Coastguard Worker
127*cd0cc2e3SAndroid Build Coastguard Worker    tasks.register("generateProperties", WriteProperties) {
128*cd0cc2e3SAndroid Build Coastguard Worker        ext {
129*cd0cc2e3SAndroid Build Coastguard Worker            parsedVersion = VersionNumber.parse(version)
130*cd0cc2e3SAndroid Build Coastguard Worker        }
131*cd0cc2e3SAndroid Build Coastguard Worker        property("org.conscrypt.version.major", parsedVersion.getMajor())
132*cd0cc2e3SAndroid Build Coastguard Worker        property("org.conscrypt.version.minor", parsedVersion.getMinor())
133*cd0cc2e3SAndroid Build Coastguard Worker        property("org.conscrypt.version.patch", parsedVersion.getMicro())
134*cd0cc2e3SAndroid Build Coastguard Worker        property("org.conscrypt.boringssl.version", boringSslVersion)
135*cd0cc2e3SAndroid Build Coastguard Worker        outputFile "build/generated/resources/org/conscrypt/conscrypt.properties"
136*cd0cc2e3SAndroid Build Coastguard Worker    }
137*cd0cc2e3SAndroid Build Coastguard Worker
138*cd0cc2e3SAndroid Build Coastguard Worker    if (!androidProject) {
139*cd0cc2e3SAndroid Build Coastguard Worker        java {
140*cd0cc2e3SAndroid Build Coastguard Worker            toolchain {
141*cd0cc2e3SAndroid Build Coastguard Worker                languageVersion = JavaLanguageVersion.of(11)
142*cd0cc2e3SAndroid Build Coastguard Worker            }
143*cd0cc2e3SAndroid Build Coastguard Worker        }
144*cd0cc2e3SAndroid Build Coastguard Worker
145*cd0cc2e3SAndroid Build Coastguard Worker        [tasks.named("compileJava"), tasks.named("compileTestJava")].forEach { t ->
146*cd0cc2e3SAndroid Build Coastguard Worker            t.configure {
147*cd0cc2e3SAndroid Build Coastguard Worker                options.compilerArgs += ["-Xlint:all", "-Xlint:-options", '-Xmaxwarns', '9999999']
148*cd0cc2e3SAndroid Build Coastguard Worker                options.encoding = "UTF-8"
149*cd0cc2e3SAndroid Build Coastguard Worker                options.release = 8
150*cd0cc2e3SAndroid Build Coastguard Worker
151*cd0cc2e3SAndroid Build Coastguard Worker                if (rootProject.hasProperty('failOnWarnings') && rootProject.failOnWarnings.toBoolean()) {
152*cd0cc2e3SAndroid Build Coastguard Worker                    options.compilerArgs += ["-Werror"]
153*cd0cc2e3SAndroid Build Coastguard Worker                }
154*cd0cc2e3SAndroid Build Coastguard Worker            }
155*cd0cc2e3SAndroid Build Coastguard Worker        }
156*cd0cc2e3SAndroid Build Coastguard Worker
157*cd0cc2e3SAndroid Build Coastguard Worker        tasks.named("compileTestJava").configure {
158*cd0cc2e3SAndroid Build Coastguard Worker            // serialVersionUID is basically guaranteed to be useless in our tests
159*cd0cc2e3SAndroid Build Coastguard Worker            options.compilerArgs += ["-Xlint:-serial"]
160*cd0cc2e3SAndroid Build Coastguard Worker        }
161*cd0cc2e3SAndroid Build Coastguard Worker
162*cd0cc2e3SAndroid Build Coastguard Worker        tasks.named("jar").configure {
163*cd0cc2e3SAndroid Build Coastguard Worker            manifest {
164*cd0cc2e3SAndroid Build Coastguard Worker                attributes('Implementation-Title': name,
165*cd0cc2e3SAndroid Build Coastguard Worker                        'Implementation-Version': archiveVersion,
166*cd0cc2e3SAndroid Build Coastguard Worker                        'Built-By': System.getProperty('user.name'),
167*cd0cc2e3SAndroid Build Coastguard Worker                        'Built-JDK': System.getProperty('java.version'),
168*cd0cc2e3SAndroid Build Coastguard Worker                        'Source-Compatibility': sourceCompatibility,
169*cd0cc2e3SAndroid Build Coastguard Worker                        'Target-Compatibility': targetCompatibility)
170*cd0cc2e3SAndroid Build Coastguard Worker            }
171*cd0cc2e3SAndroid Build Coastguard Worker        }
172*cd0cc2e3SAndroid Build Coastguard Worker
173*cd0cc2e3SAndroid Build Coastguard Worker        javadoc.options {
174*cd0cc2e3SAndroid Build Coastguard Worker            encoding = 'UTF-8'
175*cd0cc2e3SAndroid Build Coastguard Worker            links 'https://docs.oracle.com/en/java/javase/21/docs/api/java.base/'
176*cd0cc2e3SAndroid Build Coastguard Worker        }
177*cd0cc2e3SAndroid Build Coastguard Worker
178*cd0cc2e3SAndroid Build Coastguard Worker        tasks.register("javadocJar", Jar) {
179*cd0cc2e3SAndroid Build Coastguard Worker            archiveClassifier = 'javadoc'
180*cd0cc2e3SAndroid Build Coastguard Worker            from javadoc
181*cd0cc2e3SAndroid Build Coastguard Worker        }
182*cd0cc2e3SAndroid Build Coastguard Worker
183*cd0cc2e3SAndroid Build Coastguard Worker        tasks.register("sourcesJar", Jar) {
184*cd0cc2e3SAndroid Build Coastguard Worker            archiveClassifier = 'sources'
185*cd0cc2e3SAndroid Build Coastguard Worker            from sourceSets.main.allSource
186*cd0cc2e3SAndroid Build Coastguard Worker        }
187*cd0cc2e3SAndroid Build Coastguard Worker
188*cd0cc2e3SAndroid Build Coastguard Worker        // At a test failure, log the stack trace to the console so that we don't
189*cd0cc2e3SAndroid Build Coastguard Worker        // have to open the HTML in a browser.
190*cd0cc2e3SAndroid Build Coastguard Worker        test {
191*cd0cc2e3SAndroid Build Coastguard Worker            testLogging {
192*cd0cc2e3SAndroid Build Coastguard Worker                exceptionFormat = 'full'
193*cd0cc2e3SAndroid Build Coastguard Worker                showExceptions true
194*cd0cc2e3SAndroid Build Coastguard Worker                showCauses true
195*cd0cc2e3SAndroid Build Coastguard Worker                showStackTraces true
196*cd0cc2e3SAndroid Build Coastguard Worker                showStandardStreams = true
197*cd0cc2e3SAndroid Build Coastguard Worker            }
198*cd0cc2e3SAndroid Build Coastguard Worker            // Enable logging for all conscrypt classes while running tests.
199*cd0cc2e3SAndroid Build Coastguard Worker            systemProperty 'java.util.logging.config.file', "${rootDir}/test_logging.properties"
200*cd0cc2e3SAndroid Build Coastguard Worker            maxHeapSize = '1500m'
201*cd0cc2e3SAndroid Build Coastguard Worker        }
202*cd0cc2e3SAndroid Build Coastguard Worker    }
203*cd0cc2e3SAndroid Build Coastguard Worker}
204*cd0cc2e3SAndroid Build Coastguard Worker
205*cd0cc2e3SAndroid Build Coastguard Workerstatic String normalizePath(path) {
206*cd0cc2e3SAndroid Build Coastguard Worker    new File(path.toString()).absolutePath
207*cd0cc2e3SAndroid Build Coastguard Worker}
208