Snap for 6258215 from d8b6911d90afd3fa39e7ac046fc618f1a9286da0 to r-keystone-qcom-release

Change-Id: I2deb1ce0749b50129c4301b5d7b18dce54b260d5
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..2185c83
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,15 @@
+FROM gcr.io/cloud-builders/gradle:5.6.2-jdk-8
+
+RUN apt-get update
+RUN apt-get install -y curl
+RUN apt-get install -y ninja-build
+RUN apt-get install -y python3-pip
+RUN pip3 install meson
+RUN curl -o ndk.zip \
+    https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip
+RUN unzip ndk.zip
+RUN mv android-ndk-r20b /ndk
+
+WORKDIR /src
+ENTRYPOINT ["./gradlew"]
+CMD ["-PndkPath=/ndk", "run"]
diff --git a/README.md b/README.md
index a40c3df..7d47a9b 100644
--- a/README.md
+++ b/README.md
@@ -72,3 +72,5 @@
 ```
 
 Note that dependencies currently need to be already built or ordered explicitly.
+
+To build all ports using Docker, use `scripts/build.sh`.
diff --git a/ports/curl/port.kts b/ports/curl/port.kts
index 4a47446..734fa27 100644
--- a/ports/curl/port.kts
+++ b/ports/curl/port.kts
@@ -54,4 +54,17 @@
             "--with-ssl=$sslPrefix"
         )
     }
+
+    override fun configureEnv(
+        workingDirectory: File,
+        toolchain: Toolchain
+    ): Map<String, String> = mapOf(
+        // aarch64 still defaults to bfd which transitively checks libraries.
+        // When curl is linking one of its own libraries which depends on
+        // openssl, it doesn't pass -rpath-link to be able to find the SSL
+        // libraries and fails to build because of it.
+        //
+        // TODO: Switch to lld once we're using r21.
+        "LDFLAGS" to "-fuse-ld=gold"
+    )
 }
\ No newline at end of file
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100755
index 0000000..e7c16b6
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+set -e
+docker build -t ndkports .
+docker run --rm -v $(pwd):/src ndkports
diff --git a/src/main/kotlin/com/android/ndkports/AutoconfPort.kt b/src/main/kotlin/com/android/ndkports/AutoconfPort.kt
index 053fe8d..1c009cb 100644
--- a/src/main/kotlin/com/android/ndkports/AutoconfPort.kt
+++ b/src/main/kotlin/com/android/ndkports/AutoconfPort.kt
@@ -24,6 +24,11 @@
         toolchain: Toolchain
     ): List<String> = emptyList()
 
+    open fun configureEnv(
+        workingDirectory: File,
+        toolchain: Toolchain
+    ): Map<String, String> = emptyMap()
+
     override fun configure(
         toolchain: Toolchain,
         sourceDirectory: File,
@@ -39,14 +44,14 @@
                 "--prefix=${installDirectory.absolutePath}"
             ) + configureArgs(workingDirectory, toolchain),
             buildDirectory,
-            additionalEnvironment = mapOf(
+            additionalEnvironment = mutableMapOf(
                 "AR" to toolchain.ar.absolutePath,
                 "CC" to toolchain.clang.absolutePath,
                 "CXX" to toolchain.clangxx.absolutePath,
                 "RANLIB" to toolchain.ranlib.absolutePath,
                 "STRIP" to toolchain.strip.absolutePath,
                 "PATH" to "${toolchain.binDir}:${System.getenv("PATH")}"
-            )
+            ).apply { putAll(configureEnv(workingDirectory, toolchain)) }
         )
     }