xref: /aosp_15_r20/tools/ndkports/openssl/build.gradle.kts (revision 2e149f73a8e792fff6dc6aadc18d0d919a071282)
1*2e149f73SXin Li import com.android.ndkports.AdHocPortTask
2*2e149f73SXin Li import com.android.ndkports.AndroidExecutableTestTask
3*2e149f73SXin Li import com.android.ndkports.CMakeCompatibleVersion
4*2e149f73SXin Li 
5*2e149f73SXin Li val portVersion = "3.2.1"
6*2e149f73SXin Li 
7*2e149f73SXin Li group = "com.android.ndk.thirdparty"
8*2e149f73SXin Li version = "$portVersion${rootProject.extra.get("snapshotSuffix")}"
9*2e149f73SXin Li 
<lambda>null10*2e149f73SXin Li plugins {
11*2e149f73SXin Li     id("maven-publish")
12*2e149f73SXin Li     id("com.android.ndkports.NdkPorts")
13*2e149f73SXin Li     distribution
14*2e149f73SXin Li }
15*2e149f73SXin Li 
<lambda>null16*2e149f73SXin Li ndkPorts {
17*2e149f73SXin Li     ndkPath.set(File(project.findProperty("ndkPath") as String))
18*2e149f73SXin Li     source.set(project.file("src.tar.gz"))
19*2e149f73SXin Li     minSdkVersion.set(21)
20*2e149f73SXin Li }
21*2e149f73SXin Li 
<lambda>null22*2e149f73SXin Li val buildTask = tasks.register<AdHocPortTask>("buildPort") {
23*2e149f73SXin Li     builder {
24*2e149f73SXin Li         run {
25*2e149f73SXin Li             args(
26*2e149f73SXin Li                 sourceDirectory.resolve("Configure").absolutePath,
27*2e149f73SXin Li                 "android-${toolchain.abi.archName}",
28*2e149f73SXin Li                 "-D__ANDROID_API__=${toolchain.api}",
29*2e149f73SXin Li                 "--prefix=${installDirectory.absolutePath}",
30*2e149f73SXin Li                 "--openssldir=${installDirectory.absolutePath}",
31*2e149f73SXin Li                 "no-sctp",
32*2e149f73SXin Li                 "shared"
33*2e149f73SXin Li             )
34*2e149f73SXin Li 
35*2e149f73SXin Li             env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
36*2e149f73SXin Li             env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
37*2e149f73SXin Li         }
38*2e149f73SXin Li 
39*2e149f73SXin Li         run {
40*2e149f73SXin Li             args("make", "-j$ncpus", "SHLIB_EXT=.so")
41*2e149f73SXin Li 
42*2e149f73SXin Li             env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
43*2e149f73SXin Li             env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
44*2e149f73SXin Li         }
45*2e149f73SXin Li 
46*2e149f73SXin Li         run {
47*2e149f73SXin Li             args("make", "install_sw", "SHLIB_EXT=.so")
48*2e149f73SXin Li 
49*2e149f73SXin Li             env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
50*2e149f73SXin Li             env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
51*2e149f73SXin Li         }
52*2e149f73SXin Li     }
53*2e149f73SXin Li }
54*2e149f73SXin Li 
<lambda>null55*2e149f73SXin Li tasks.prefabPackage {
56*2e149f73SXin Li     version.set(CMakeCompatibleVersion.parse(portVersion))
57*2e149f73SXin Li 
58*2e149f73SXin Li     licensePath.set("LICENSE.txt")
59*2e149f73SXin Li 
60*2e149f73SXin Li     modules {
61*2e149f73SXin Li         create("crypto")
62*2e149f73SXin Li         create("ssl")
63*2e149f73SXin Li     }
64*2e149f73SXin Li }
65*2e149f73SXin Li 
<lambda>null66*2e149f73SXin Li tasks.register<AndroidExecutableTestTask>("test") {
67*2e149f73SXin Li     val srcDir = tasks.extractSrc.get().outDir.asFile.get()
68*2e149f73SXin Li     val testSrc = srcDir.resolve("test/ssl-tests")
69*2e149f73SXin Li     val deviceTestRelPath = File("testconf")
70*2e149f73SXin Li 
71*2e149f73SXin Li     val unsupportedTests = listOf(
72*2e149f73SXin Li         // This test is empty and appears to just be broken in 1.1.1k.
73*2e149f73SXin Li         "16-certstatus.conf",
74*2e149f73SXin Li         // zlib support is not enabled.
75*2e149f73SXin Li         "22-compression.conf",
76*2e149f73SXin Li         // Android does not support SCTP sockets and this test requires them.
77*2e149f73SXin Li         "29-dtls-sctp-label-bug.conf"
78*2e149f73SXin Li     )
79*2e149f73SXin Li 
80*2e149f73SXin Li     push {
81*2e149f73SXin Li         val ignoredExtensions = listOf("o", "d")
82*2e149f73SXin Li         val buildDirectory = buildTask.get().buildDirectoryFor(abi)
83*2e149f73SXin Li         push(
84*2e149f73SXin Li             srcDir.resolve("test/ct/log_list.conf"), File("log_list.conf")
85*2e149f73SXin Li         )
86*2e149f73SXin Li         for (file in buildDirectory.walk()) {
87*2e149f73SXin Li             if (!file.isFile) {
88*2e149f73SXin Li                 continue
89*2e149f73SXin Li             }
90*2e149f73SXin Li 
91*2e149f73SXin Li             if (file.extension in ignoredExtensions) {
92*2e149f73SXin Li                 continue
93*2e149f73SXin Li             }
94*2e149f73SXin Li 
95*2e149f73SXin Li             push(file, file.relativeTo(buildDirectory))
96*2e149f73SXin Li         }
97*2e149f73SXin Li         for (file in testSrc.walk()) {
98*2e149f73SXin Li             if (file.extension == "conf") {
99*2e149f73SXin Li                 push(
100*2e149f73SXin Li                     file, deviceTestRelPath.resolve(file.relativeTo(testSrc))
101*2e149f73SXin Li                 )
102*2e149f73SXin Li             }
103*2e149f73SXin Li         }
104*2e149f73SXin Li         push(srcDir.resolve("test/certs"), File("certs"))
105*2e149f73SXin Li     }
106*2e149f73SXin Li 
107*2e149f73SXin Li     run {
108*2e149f73SXin Li         // https://github.com/openssl/openssl/blob/master/test/README.ssltest.md
109*2e149f73SXin Li         val sslTest = deviceDirectory.resolve("test/ssl_test")
110*2e149f73SXin Li         val ctlogFile = deviceDirectory.resolve("log_list.conf")
111*2e149f73SXin Li         val testCertDir = deviceDirectory.resolve("certs")
112*2e149f73SXin Li         for (file in testSrc.walk()) {
113*2e149f73SXin Li             val test = deviceDirectory.resolve(deviceTestRelPath)
114*2e149f73SXin Li                 .resolve(file.relativeTo(testSrc))
115*2e149f73SXin Li             if (file.extension == "conf" && file.name !in unsupportedTests) {
116*2e149f73SXin Li                 shellTest(
117*2e149f73SXin Li                     file.relativeTo(testSrc).toString(), listOf(
118*2e149f73SXin Li                         "LD_LIBRARY_PATH=$deviceDirectory",
119*2e149f73SXin Li                         "CTLOG_FILE=$ctlogFile",
120*2e149f73SXin Li                         "TEST_CERTS_DIR=$testCertDir",
121*2e149f73SXin Li                         sslTest.toString(),
122*2e149f73SXin Li                         test.toString()
123*2e149f73SXin Li                     )
124*2e149f73SXin Li                 )
125*2e149f73SXin Li             }
126*2e149f73SXin Li         }
127*2e149f73SXin Li     }
128*2e149f73SXin Li }
129*2e149f73SXin Li 
<lambda>null130*2e149f73SXin Li publishing {
131*2e149f73SXin Li     publications {
132*2e149f73SXin Li         create<MavenPublication>("maven") {
133*2e149f73SXin Li             from(components["prefab"])
134*2e149f73SXin Li             pom {
135*2e149f73SXin Li                 name.set("OpenSSL")
136*2e149f73SXin Li                 description.set("The ndkports AAR for OpenSSL.")
137*2e149f73SXin Li                 url.set(
138*2e149f73SXin Li                     "https://android.googlesource.com/platform/tools/ndkports"
139*2e149f73SXin Li                 )
140*2e149f73SXin Li                 licenses {
141*2e149f73SXin Li                     license {
142*2e149f73SXin Li                         name.set("Dual OpenSSL and SSLeay License")
143*2e149f73SXin Li                         url.set("https://www.openssl.org/source/license-openssl-ssleay.txt")
144*2e149f73SXin Li                         distribution.set("repo")
145*2e149f73SXin Li                     }
146*2e149f73SXin Li                 }
147*2e149f73SXin Li                 developers {
148*2e149f73SXin Li                     developer {
149*2e149f73SXin Li                         name.set("The Android Open Source Project")
150*2e149f73SXin Li                     }
151*2e149f73SXin Li                 }
152*2e149f73SXin Li                 scm {
153*2e149f73SXin Li                     url.set("https://android.googlesource.com/platform/tools/ndkports")
154*2e149f73SXin Li                     connection.set("scm:git:https://android.googlesource.com/platform/tools/ndkports")
155*2e149f73SXin Li                 }
156*2e149f73SXin Li             }
157*2e149f73SXin Li         }
158*2e149f73SXin Li     }
159*2e149f73SXin Li 
160*2e149f73SXin Li     repositories {
161*2e149f73SXin Li         maven {
162*2e149f73SXin Li             url = uri("${project.buildDir}/repository")
163*2e149f73SXin Li         }
164*2e149f73SXin Li     }
165*2e149f73SXin Li }
166*2e149f73SXin Li 
<lambda>null167*2e149f73SXin Li distributions {
168*2e149f73SXin Li     main {
169*2e149f73SXin Li         contents {
170*2e149f73SXin Li             from("${project.buildDir}/repository")
171*2e149f73SXin Li             include("**/*.aar")
172*2e149f73SXin Li             include("**/*.pom")
173*2e149f73SXin Li         }
174*2e149f73SXin Li     }
175*2e149f73SXin Li }
176*2e149f73SXin Li 
<lambda>null177*2e149f73SXin Li tasks {
178*2e149f73SXin Li     distZip {
179*2e149f73SXin Li         dependsOn("publish")
180*2e149f73SXin Li         destinationDirectory.set(File(rootProject.buildDir, "distributions"))
181*2e149f73SXin Li     }
182*2e149f73SXin Li }
183