xref: /aosp_15_r20/external/conscrypt/android/build.gradle (revision cd0cc2e34ba52cdf454361820a14d744e4bd531d)
1*cd0cc2e3SAndroid Build Coastguard Workerbuildscript {
2*cd0cc2e3SAndroid Build Coastguard Worker    repositories {
3*cd0cc2e3SAndroid Build Coastguard Worker        google()
4*cd0cc2e3SAndroid Build Coastguard Worker        mavenCentral()
5*cd0cc2e3SAndroid Build Coastguard Worker    }
6*cd0cc2e3SAndroid Build Coastguard Worker    dependencies {
7*cd0cc2e3SAndroid Build Coastguard Worker        classpath libs.android.tools
8*cd0cc2e3SAndroid Build Coastguard Worker    }
9*cd0cc2e3SAndroid Build Coastguard Worker}
10*cd0cc2e3SAndroid Build Coastguard Worker
11*cd0cc2e3SAndroid Build Coastguard Workerdescription = 'Conscrypt: Android'
12*cd0cc2e3SAndroid Build Coastguard Worker
13*cd0cc2e3SAndroid Build Coastguard Workerext {
14*cd0cc2e3SAndroid Build Coastguard Worker    androidHome = "$System.env.ANDROID_HOME"
15*cd0cc2e3SAndroid Build Coastguard Worker    androidSdkInstalled = file("$androidHome").exists()
16*cd0cc2e3SAndroid Build Coastguard Worker    androidVersionCode = 1
17*cd0cc2e3SAndroid Build Coastguard Worker    androidVersionName = "$version"
18*cd0cc2e3SAndroid Build Coastguard Worker    androidMinSdkVersion = 19
19*cd0cc2e3SAndroid Build Coastguard Worker    androidTargetSdkVersion = 26
20*cd0cc2e3SAndroid Build Coastguard Worker    androidNdkVersion = '25.2.9519653'
21*cd0cc2e3SAndroid Build Coastguard Worker    androidCmakeVersion = '3.22.1'
22*cd0cc2e3SAndroid Build Coastguard Worker}
23*cd0cc2e3SAndroid Build Coastguard Worker
24*cd0cc2e3SAndroid Build Coastguard Workerif (androidSdkInstalled) {
25*cd0cc2e3SAndroid Build Coastguard Worker    apply plugin: 'com.android.library'
26*cd0cc2e3SAndroid Build Coastguard Worker
27*cd0cc2e3SAndroid Build Coastguard Worker    // Since we're not taking a direct dependency on the constants module, we need to add an
28*cd0cc2e3SAndroid Build Coastguard Worker    // explicit task dependency to make sure the code is generated.
29*cd0cc2e3SAndroid Build Coastguard Worker    evaluationDependsOn(':conscrypt-constants')
30*cd0cc2e3SAndroid Build Coastguard Worker
31*cd0cc2e3SAndroid Build Coastguard Worker    android {
32*cd0cc2e3SAndroid Build Coastguard Worker        namespace "org.conscrypt"
33*cd0cc2e3SAndroid Build Coastguard Worker
34*cd0cc2e3SAndroid Build Coastguard Worker        compileSdkVersion androidTargetSdkVersion
35*cd0cc2e3SAndroid Build Coastguard Worker        ndkVersion androidNdkVersion
36*cd0cc2e3SAndroid Build Coastguard Worker
37*cd0cc2e3SAndroid Build Coastguard Worker        compileOptions {
38*cd0cc2e3SAndroid Build Coastguard Worker            sourceCompatibility androidMinJavaVersion
39*cd0cc2e3SAndroid Build Coastguard Worker            targetCompatibility androidMinJavaVersion
40*cd0cc2e3SAndroid Build Coastguard Worker        }
41*cd0cc2e3SAndroid Build Coastguard Worker
42*cd0cc2e3SAndroid Build Coastguard Worker        defaultConfig {
43*cd0cc2e3SAndroid Build Coastguard Worker            minSdkVersion androidMinSdkVersion
44*cd0cc2e3SAndroid Build Coastguard Worker            targetSdkVersion androidTargetSdkVersion
45*cd0cc2e3SAndroid Build Coastguard Worker            versionCode androidVersionCode
46*cd0cc2e3SAndroid Build Coastguard Worker            versionName androidVersionName
47*cd0cc2e3SAndroid Build Coastguard Worker
48*cd0cc2e3SAndroid Build Coastguard Worker            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
49*cd0cc2e3SAndroid Build Coastguard Worker
50*cd0cc2e3SAndroid Build Coastguard Worker            consumerProguardFiles 'proguard-rules.pro'
51*cd0cc2e3SAndroid Build Coastguard Worker
52*cd0cc2e3SAndroid Build Coastguard Worker            externalNativeBuild {
53*cd0cc2e3SAndroid Build Coastguard Worker                cmake {
54*cd0cc2e3SAndroid Build Coastguard Worker                    arguments '-DANDROID=True',
55*cd0cc2e3SAndroid Build Coastguard Worker                            '-DANDROID_STL=c++_static',
56*cd0cc2e3SAndroid Build Coastguard Worker                            "-DBORINGSSL_HOME=$boringsslHome",
57*cd0cc2e3SAndroid Build Coastguard Worker                            "-DCMAKE_CXX_STANDARD=17",
58*cd0cc2e3SAndroid Build Coastguard Worker                            '-DCMAKE_SHARED_LINKER_FLAGS=-z max-page-size=16384'
59*cd0cc2e3SAndroid Build Coastguard Worker                    cFlags '-fvisibility=hidden',
60*cd0cc2e3SAndroid Build Coastguard Worker                            '-DBORINGSSL_SHARED_LIBRARY',
61*cd0cc2e3SAndroid Build Coastguard Worker                            '-DBORINGSSL_IMPLEMENTATION',
62*cd0cc2e3SAndroid Build Coastguard Worker                            '-DOPENSSL_SMALL',
63*cd0cc2e3SAndroid Build Coastguard Worker                            '-D_XOPEN_SOURCE=700',
64*cd0cc2e3SAndroid Build Coastguard Worker                            '-Wno-unused-parameter'
65*cd0cc2e3SAndroid Build Coastguard Worker                    targets 'conscrypt_jni'
66*cd0cc2e3SAndroid Build Coastguard Worker                }
67*cd0cc2e3SAndroid Build Coastguard Worker            }
68*cd0cc2e3SAndroid Build Coastguard Worker            ndk {
69*cd0cc2e3SAndroid Build Coastguard Worker                abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
70*cd0cc2e3SAndroid Build Coastguard Worker            }
71*cd0cc2e3SAndroid Build Coastguard Worker        }
72*cd0cc2e3SAndroid Build Coastguard Worker        buildTypes {
73*cd0cc2e3SAndroid Build Coastguard Worker            release {
74*cd0cc2e3SAndroid Build Coastguard Worker                minifyEnabled false
75*cd0cc2e3SAndroid Build Coastguard Worker                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
76*cd0cc2e3SAndroid Build Coastguard Worker            }
77*cd0cc2e3SAndroid Build Coastguard Worker        }
78*cd0cc2e3SAndroid Build Coastguard Worker        sourceSets.main {
79*cd0cc2e3SAndroid Build Coastguard Worker            java {
80*cd0cc2e3SAndroid Build Coastguard Worker                srcDirs = [
81*cd0cc2e3SAndroid Build Coastguard Worker                        "${rootDir}/common/src/main/java",
82*cd0cc2e3SAndroid Build Coastguard Worker                        "src/main/java"
83*cd0cc2e3SAndroid Build Coastguard Worker                ]
84*cd0cc2e3SAndroid Build Coastguard Worker                // Requires evaluationDependsOn(':conscrypt-constants') above.
85*cd0cc2e3SAndroid Build Coastguard Worker                srcDirs += project(':conscrypt-constants').sourceSets.main.java.srcDirs
86*cd0cc2e3SAndroid Build Coastguard Worker            }
87*cd0cc2e3SAndroid Build Coastguard Worker            resources {
88*cd0cc2e3SAndroid Build Coastguard Worker                srcDirs += "build/generated/resources"
89*cd0cc2e3SAndroid Build Coastguard Worker            }
90*cd0cc2e3SAndroid Build Coastguard Worker        }
91*cd0cc2e3SAndroid Build Coastguard Worker        externalNativeBuild {
92*cd0cc2e3SAndroid Build Coastguard Worker            cmake {
93*cd0cc2e3SAndroid Build Coastguard Worker                path 'CMakeLists.txt'
94*cd0cc2e3SAndroid Build Coastguard Worker                version androidCmakeVersion
95*cd0cc2e3SAndroid Build Coastguard Worker            }
96*cd0cc2e3SAndroid Build Coastguard Worker        }
97*cd0cc2e3SAndroid Build Coastguard Worker        lintOptions {
98*cd0cc2e3SAndroid Build Coastguard Worker            lintConfig file('lint.xml')
99*cd0cc2e3SAndroid Build Coastguard Worker        }
100*cd0cc2e3SAndroid Build Coastguard Worker
101*cd0cc2e3SAndroid Build Coastguard Worker        publishing {
102*cd0cc2e3SAndroid Build Coastguard Worker            singleVariant("release") {
103*cd0cc2e3SAndroid Build Coastguard Worker                withSourcesJar()
104*cd0cc2e3SAndroid Build Coastguard Worker            }
105*cd0cc2e3SAndroid Build Coastguard Worker        }
106*cd0cc2e3SAndroid Build Coastguard Worker    }
107*cd0cc2e3SAndroid Build Coastguard Worker
108*cd0cc2e3SAndroid Build Coastguard Worker    configurations {
109*cd0cc2e3SAndroid Build Coastguard Worker        publicApiDocs
110*cd0cc2e3SAndroid Build Coastguard Worker    }
111*cd0cc2e3SAndroid Build Coastguard Worker
112*cd0cc2e3SAndroid Build Coastguard Worker    preBuild {
113*cd0cc2e3SAndroid Build Coastguard Worker        dependsOn generateProperties
114*cd0cc2e3SAndroid Build Coastguard Worker    }
115*cd0cc2e3SAndroid Build Coastguard Worker
116*cd0cc2e3SAndroid Build Coastguard Worker    dependencies {
117*cd0cc2e3SAndroid Build Coastguard Worker        publicApiDocs project(':conscrypt-api-doclet')
118*cd0cc2e3SAndroid Build Coastguard Worker        androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', {
119*cd0cc2e3SAndroid Build Coastguard Worker            exclude module: 'support-annotations'
120*cd0cc2e3SAndroid Build Coastguard Worker            exclude module: 'support-v4'
121*cd0cc2e3SAndroid Build Coastguard Worker            exclude module: 'support-v13'
122*cd0cc2e3SAndroid Build Coastguard Worker            exclude module: 'recyclerview-v7'
123*cd0cc2e3SAndroid Build Coastguard Worker            exclude module: 'appcompat-v7'
124*cd0cc2e3SAndroid Build Coastguard Worker            exclude module: 'design'
125*cd0cc2e3SAndroid Build Coastguard Worker        })
126*cd0cc2e3SAndroid Build Coastguard Worker        compileOnly project(':conscrypt-android-stub')
127*cd0cc2e3SAndroid Build Coastguard Worker
128*cd0cc2e3SAndroid Build Coastguard Worker        // Adds the constants module as a dependency so that we can include its generated source
129*cd0cc2e3SAndroid Build Coastguard Worker        compileOnly project(':conscrypt-constants')
130*cd0cc2e3SAndroid Build Coastguard Worker    }
131*cd0cc2e3SAndroid Build Coastguard Worker
132*cd0cc2e3SAndroid Build Coastguard Worker    def javadocs = tasks.register("javadocs", Javadoc) {
133*cd0cc2e3SAndroid Build Coastguard Worker        dependsOn configurations.publicApiDocs
134*cd0cc2e3SAndroid Build Coastguard Worker        source = android.sourceSets.main.java.srcDirs
135*cd0cc2e3SAndroid Build Coastguard Worker        classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) +
136*cd0cc2e3SAndroid Build Coastguard Worker                project(':conscrypt-android-stub').sourceSets.main.output
137*cd0cc2e3SAndroid Build Coastguard Worker        options {
138*cd0cc2e3SAndroid Build Coastguard Worker            showFromPublic()
139*cd0cc2e3SAndroid Build Coastguard Worker            encoding = 'UTF-8'
140*cd0cc2e3SAndroid Build Coastguard Worker            doclet = "org.conscrypt.doclet.FilterDoclet"
141*cd0cc2e3SAndroid Build Coastguard Worker            links = ['https://docs.oracle.com/en/java/javase/21/docs/api/java.base/']
142*cd0cc2e3SAndroid Build Coastguard Worker            docletpath = configurations.publicApiDocs.files as List
143*cd0cc2e3SAndroid Build Coastguard Worker        }
144*cd0cc2e3SAndroid Build Coastguard Worker        failOnError false
145*cd0cc2e3SAndroid Build Coastguard Worker
146*cd0cc2e3SAndroid Build Coastguard Worker        doLast {
147*cd0cc2e3SAndroid Build Coastguard Worker            copy {
148*cd0cc2e3SAndroid Build Coastguard Worker                from "$rootDir/api-doclet/src/main/resources/styles.css"
149*cd0cc2e3SAndroid Build Coastguard Worker                into "$buildDir/docs/javadoc"
150*cd0cc2e3SAndroid Build Coastguard Worker            }
151*cd0cc2e3SAndroid Build Coastguard Worker        }
152*cd0cc2e3SAndroid Build Coastguard Worker    }
153*cd0cc2e3SAndroid Build Coastguard Worker
154*cd0cc2e3SAndroid Build Coastguard Worker    def javadocsJar = tasks.register("javadocsJar", Jar) {
155*cd0cc2e3SAndroid Build Coastguard Worker        dependsOn javadocs
156*cd0cc2e3SAndroid Build Coastguard Worker        archiveClassifier = 'javadoc'
157*cd0cc2e3SAndroid Build Coastguard Worker        from {
158*cd0cc2e3SAndroid Build Coastguard Worker            javadocs.get().destinationDir
159*cd0cc2e3SAndroid Build Coastguard Worker        }
160*cd0cc2e3SAndroid Build Coastguard Worker    }
161*cd0cc2e3SAndroid Build Coastguard Worker
162*cd0cc2e3SAndroid Build Coastguard Worker    afterEvaluate {
163*cd0cc2e3SAndroid Build Coastguard Worker        apply from: "$rootDir/gradle/publishing.gradle"
164*cd0cc2e3SAndroid Build Coastguard Worker        publishing.publications.maven {
165*cd0cc2e3SAndroid Build Coastguard Worker            pom.packaging = 'aar'
166*cd0cc2e3SAndroid Build Coastguard Worker            from components.release
167*cd0cc2e3SAndroid Build Coastguard Worker            artifact javadocsJar.get()
168*cd0cc2e3SAndroid Build Coastguard Worker        }
169*cd0cc2e3SAndroid Build Coastguard Worker    }
170*cd0cc2e3SAndroid Build Coastguard Worker} else {
171*cd0cc2e3SAndroid Build Coastguard Worker    logger.warn('Android SDK has not been detected. The Android module will not be built.')
172*cd0cc2e3SAndroid Build Coastguard Worker
173*cd0cc2e3SAndroid Build Coastguard Worker    // Disable all tasks
174*cd0cc2e3SAndroid Build Coastguard Worker    tasks.configureEach {
175*cd0cc2e3SAndroid Build Coastguard Worker        it.enabled = false
176*cd0cc2e3SAndroid Build Coastguard Worker    }
177*cd0cc2e3SAndroid Build Coastguard Worker}
178