Add GameController to the built libraries in the SDK

This adds GameController to the libraries. There is no need for the prefab "hack" as the GameController project is properly using prefabPublishing.

The build.sh has been updated so that the library is built and packaged both in the ZIP and as a jetpack library.

Test: ./gradlew packageLocalZip -Plibraries=game_controller (and check the gamesdk.zip)
Test: ./gradlew packageMavenZip -Plibraries=game_controller (and check the output files)
Test: see presubmits results
Bug: 191017502
Change-Id: I5b8fe34ab5db005c9d3e6900ac567ac5f22a9b5c
diff --git a/GameController/build.gradle b/GameController/build.gradle
index 4ba0d7d..12e8b7a 100644
--- a/GameController/build.gradle
+++ b/GameController/build.gradle
@@ -19,12 +19,12 @@
 }
 
 android {
-    compileSdkVersion 30
-    ndkVersion '22.0.7026061'
+    compileSdkVersion 28
+    ndkVersion '20.0.55.94570'
 
     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 30
+        targetSdkVersion 28
         versionCode 1
         versionName "1.0"
 
@@ -81,6 +81,11 @@
 
 def get_properties() {
     Properties properties = new Properties()
-    properties.load(new File(rootDir.absolutePath + '/local.properties').newDataInputStream())
+    if (project.rootProject.file('local.properties').exists()) {
+        properties.load(project.rootProject.file('local.properties').newDataInputStream())
+    }
+    else {
+        properties.setProperty('sdk.dir', System.getenv("ANDROID_HOME"))
+    }
     return properties
 }
\ No newline at end of file
diff --git a/GameController/src/main/cpp/CMakeLists.txt b/GameController/src/main/cpp/CMakeLists.txt
index affcf70..f7a93af 100644
--- a/GameController/src/main/cpp/CMakeLists.txt
+++ b/GameController/src/main/cpp/CMakeLists.txt
@@ -14,7 +14,7 @@
 # limitations under the License.
 #
 
-cmake_minimum_required(VERSION 3.6)
+cmake_minimum_required(VERSION 3.4.1)
 
 project(paddleboat)
 
diff --git a/build.bat b/build.bat
index 51cfac1..d460ab0 100755
--- a/build.bat
+++ b/build.bat
@@ -1,4 +1,7 @@
 set ANDROID_HOME=C:\win_build_extras\sdk

+set ANDROID_NDK_HOME=C:\win_build_extras\ndk\r21

+set BUILDBOT_SCRIPT=true

+set BUILDBOT_CMAKE="%CD%\..\prebuilts\cmake\windows-x86"

 

 if not defined DIST_DIR set DIST_DIR="%CD%\..\package"

 

diff --git a/build.gradle b/build.gradle
index 86fd4cb..dd7cd69 100644
--- a/build.gradle
+++ b/build.gradle
@@ -36,6 +36,22 @@
     }
 }
 
+// The following is needed for sub-projects that have their own gradle script and that are
+// not using the general swappy/tuningfork multi-ndk build logic below and in buildSrc.
+def buildScript = System.getenv("BUILDBOT_SCRIPT")
+if (buildScript) {
+    Properties properties = new Properties()
+
+    if (project.rootProject.file('local.properties').exists()) {
+        properties.load(project.rootProject.file('local.properties').newDataInputStream())
+    }
+    properties.setProperty('sdk.dir', System.getenv("ANDROID_HOME"))
+    properties.setProperty('ndk.dir', System.getenv("ANDROID_NDK_HOME"))
+    properties.setProperty('cmake.dir', System.getenv("BUILDBOT_CMAKE"))
+
+    properties.store(project.rootProject.file('local.properties').newDataOutputStream(), '')
+}
+
 def swappyNativeLibrary = new NativeLibrary('swappy')
         .setAarLibrary("games-frame-pacing", "1.7.0-rc01")
         .addSampleAndroidProject(
@@ -98,12 +114,17 @@
 
 def gameActivityLibrary = new AndroidArchiveLibrary('game_activity', "GameActivity")
         .setAarLibrary("games-activity", "1.0.0-alpha01")
+        // This can be removed after migrating to prefabPublishing:
         .setPrefabFolderName("prefab-src")
 
 def gameInputLibrary = new AndroidArchiveLibrary('game_input', "GameInput")
         .setAarLibrary("games-text-input", "1.0.0-alpha01")
+        // This can be removed after migrating to prefabPublishing:
         .setPrefabFolderName("prefab-src")
 
+def gameControllerLibrary = new AndroidArchiveLibrary('game_controller', "GameController")
+        .setAarLibrary("games-controller", "1.0.0-alpha01")
+
 def protobufInstallDir() {
     return new File("$projectDir/third_party/protobuf-3.0.0/install/"
             + osFolderName(ExternalToolName.PROTOBUF)).getPath()
@@ -177,6 +198,7 @@
         oboeNativeLibrary,
         gameActivityLibrary,
         gameInputLibrary,
+        gameControllerLibrary,
 ]
 
 def getBuildPath() {
diff --git a/build.sh b/build.sh
index 745662e..6d8d229 100755
--- a/build.sh
+++ b/build.sh
@@ -13,6 +13,8 @@
 # Set up the environment
 export ANDROID_HOME=$(pwd)/../prebuilts/sdk
 export ANDROID_NDK_HOME=$(pwd)/../prebuilts/ndk/r20
+export BUILDBOT_SCRIPT=true
+export BUILDBOT_CMAKE=$(pwd)/../prebuilts/cmake/linux-x86
 cp -Rf samples/sdk_licenses ../prebuilts/sdk/licenses
 
 # Use the distribution path given to the script by the build bot in DIST_DIR. Otherwise,
@@ -28,13 +30,14 @@
 if [[ $1 == "full" ]]
 then
     package_name=fullsdk
-    ./gradlew packageZip -Plibraries=swappy,tuningfork,oboe,game_activity,game_input -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir" -PpackageName=$package_name
+    ./gradlew packageZip -Plibraries=swappy,tuningfork,oboe,game_activity,game_input,game_controller -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=swappy -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=tuningfork -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=oboe -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=game_activity -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=game_input -PdistPath="$dist_dir" -PpackageName=$package_name
-    ./gradlew jetpadJson -Plibraries=swappy,tuningfork,game_activity,game_input -PdistPath="$dist_dir" -PpackageName=$package_name
+    ./gradlew packageMavenZip -Plibraries=game_controller -PdistPath="$dist_dir" -PpackageName=$package_name
+    ./gradlew jetpadJson -Plibraries=swappy,tuningfork,game_activity,game_input,game_controller -PdistPath="$dist_dir" -PpackageName=$package_name
 elif [[ $1 == "samples" ]]
 then
     package_name=gamesdk
@@ -42,13 +45,14 @@
     ./gradlew packageMavenZip -Plibraries=swappy -PdistPath="$dist_dir"
 else
     package_name=gamesdk
-    ./gradlew packageZip -Plibraries=swappy,tuningfork,oboe,game_activity,game_input -PincludeSampleSources -PdistPath="$dist_dir"
+    ./gradlew packageZip -Plibraries=swappy,tuningfork,oboe,game_activity,game_input,game_controller -PincludeSampleSources -PdistPath="$dist_dir"
     ./gradlew packageMavenZip -Plibraries=swappy -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=tuningfork -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=oboe -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=game_activity -PdistPath="$dist_dir" -PpackageName=$package_name
     ./gradlew packageMavenZip -Plibraries=game_input -PdistPath="$dist_dir" -PpackageName=$package_name
-    ./gradlew jetpadJson -Plibraries=swappy,tuningfork,game_activity,game_input -PdistPath="$dist_dir" -PpackageName=$package_name
+    ./gradlew packageMavenZip -Plibraries=game_controller -PdistPath="$dist_dir" -PpackageName=$package_name
+    ./gradlew jetpadJson -Plibraries=swappy,tuningfork,game_activity,game_input,game_controller -PdistPath="$dist_dir" -PpackageName=$package_name
 fi
 
 # Calculate hash of the zip file
diff --git a/buildSrc/src/main/java/com/google/androidgamesdk/Toolchain.kt b/buildSrc/src/main/java/com/google/androidgamesdk/Toolchain.kt
index 56d3999..19877ff 100644
--- a/buildSrc/src/main/java/com/google/androidgamesdk/Toolchain.kt
+++ b/buildSrc/src/main/java/com/google/androidgamesdk/Toolchain.kt
@@ -42,7 +42,7 @@
     protected fun getNdkVersionFromPropertiesFile(): String {
         val file = File(getAndroidNDKPath(), "source.properties")
         if (!file.exists()) {
-            println("Warning: can't get NDK version from source.properties")
+            println("Warning: can't get NDK version from " + getAndroidNDKPath()+ "/source.properties")
             return "UNKNOWN"
         } else {
             val props = loadPropertiesFromFile(file)
diff --git a/settings.gradle b/settings.gradle
index f1c22cc..6a76246 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,6 +1,7 @@
 rootProject.name = 'androidgamesdk'
 include ':GameActivity'
 include ':GameInput'
+include ':GameController'
 include ':extras'
 project(':extras').projectDir= new File('src/extras')
 include 'extras:aar'
diff --git a/src/maven/games-controller.pom b/src/maven/games-controller.pom
new file mode 100644
index 0000000..48e51ef
--- /dev/null
+++ b/src/maven/games-controller.pom
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>androidx.games</groupId>
+  <artifactId>games-controller</artifactId>
+  <version>@aarVersion@</version>
+  <packaging>aar</packaging>
+  <licenses>
+    <license>
+      <name>The Apache Software License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+</project>