|
@@ -0,0 +1,351 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+set -e
|
|
|
+
|
|
|
+if ! [ "x$ANDROID_NDK_HOME" != "x" -a -d "$ANDROID_NDK_HOME" ]; then
|
|
|
+ echo "ANDROID_NDK_HOME environment variable is not set"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+if ! [ "x$ANDROID_HOME" != "x" -a -d "$ANDROID_HOME" ]; then
|
|
|
+ echo "ANDROID_HOME environment variable is not set"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ "x$ANDROID_API" = "x" ]; then
|
|
|
+ ANDROID_API="$(ls "$ANDROID_HOME/platforms" | grep -E "^android-[0-9]+$" | sed 's/android-//' | sort -n -r | head -1)"
|
|
|
+ if [ "x$ANDROID_API" = "x" ]; then
|
|
|
+ echo "No Android platform found in $ANDROID_HOME/platforms"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+else
|
|
|
+ if ! [ -d "$ANDROID_HOME/platforms/android-$ANDROID_API" ]; then
|
|
|
+ echo "Android api version $ANDROID_API is not available ($ANDROID_HOME/platforms/android-$ANDROID_API does not exist)" >2
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+android_platformdir="$ANDROID_HOME/platforms/android-$ANDROID_API"
|
|
|
+
|
|
|
+echo "Building for android api version $ANDROID_API"
|
|
|
+echo "android_platformdir=$android_platformdir"
|
|
|
+
|
|
|
+scriptdir=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)")
|
|
|
+sdl_root=$(cd -P -- "$(dirname -- "$0")/.." && printf '%s\n' "$(pwd -P)")
|
|
|
+
|
|
|
+build_root="${sdl_root}/build-android-prefab"
|
|
|
+
|
|
|
+android_abis="armeabi-v7a arm64-v8a x86 x86_64"
|
|
|
+android_api=19
|
|
|
+android_ndk=21
|
|
|
+android_stl="c++_shared"
|
|
|
+
|
|
|
+sdl_major=$(sed -ne 's/^#define SDL_MAJOR_VERSION *//p' "${sdl_root}/include/SDL_version.h")
|
|
|
+sdl_minor=$(sed -ne 's/^#define SDL_MINOR_VERSION *//p' "${sdl_root}/include/SDL_version.h")
|
|
|
+sdl_patch=$(sed -ne 's/^#define SDL_PATCHLEVEL *//p' "${sdl_root}/include/SDL_version.h")
|
|
|
+sdl_version="${sdl_major}.${sdl_minor}.${sdl_patch}"
|
|
|
+echo "Building Android prefab package for SDL version $sdl_version"
|
|
|
+
|
|
|
+prefabhome="${build_root}/prefab-${sdl_version}"
|
|
|
+rm -rf "$prefabhome"
|
|
|
+mkdir -p "${prefabhome}"
|
|
|
+
|
|
|
+build_cmake_projects() {
|
|
|
+ for android_abi in $android_abis; do
|
|
|
+ echo "Configuring CMake project for $android_abi"
|
|
|
+ cmake -S "$sdl_root" -B "${build_root}/build_${android_abi}" \
|
|
|
+ -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
|
|
|
+ -DANDROID_PLATFORM=${android_platform} \
|
|
|
+ -DANDROID_ABI=${android_abi} \
|
|
|
+ -DSDL_SHARED=ON \
|
|
|
+ -DSDL_STATIC=ON \
|
|
|
+ -DSDL_STATIC_PIC=ON \
|
|
|
+ -DSDL_TEST=ON \
|
|
|
+ -DSDL2_DISABLE_SDL2MAIN=OFF \
|
|
|
+ -DSDL2_DISABLE_INSTALL=OFF \
|
|
|
+ -DCMAKE_INSTALL_PREFIX="${build_root}/build_${android_abi}/prefix" \
|
|
|
+ -DCMAKE_INSTALL_INCLUDEDIR=include \
|
|
|
+ -DCMAKE_INSTALL_LIBDIR=lib \
|
|
|
+ -DCMAKE_BUILD_TYPE=Release \
|
|
|
+ -GNinja
|
|
|
+
|
|
|
+ rm -rf "${build_root}/build_${android_abi}/prefix"
|
|
|
+
|
|
|
+ echo "Building CMake project for $android_abi"
|
|
|
+ cmake --build "${build_root}/build_${android_abi}"
|
|
|
+
|
|
|
+ echo "Installing CMake project for $android_abi"
|
|
|
+ cmake --install "${build_root}/build_${android_abi}"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+classes_sources_jar_path="${prefabhome}/classes-sources.jar"
|
|
|
+classes_jar_path="${prefabhome}/classes.jar"
|
|
|
+compile_java() {
|
|
|
+ classes_sources_root="${prefabhome}/classes-sources"
|
|
|
+
|
|
|
+ rm -rf "${classes_sources_root}"
|
|
|
+ mkdir -p "${classes_sources_root}/META-INF"
|
|
|
+
|
|
|
+ echo "Copying LICENSE.txt to java build folder"
|
|
|
+ cp "$sdl_root/LICENSE.txt" "${classes_sources_root}/META-INF"
|
|
|
+
|
|
|
+ echo "Copy JAVA sources to java build folder"
|
|
|
+ cp -r "$sdl_root/android-project/app/src/main/java/org" "${classes_sources_root}"
|
|
|
+
|
|
|
+ java_sourceslist_path="${prefabhome}/java_sources.txt"
|
|
|
+ pushd "${classes_sources_root}"
|
|
|
+ echo "Collecting sources for classes-sources.jar"
|
|
|
+ find "." -name "*.java" >"${java_sourceslist_path}"
|
|
|
+ find "META-INF" -name "*" >>"${java_sourceslist_path}"
|
|
|
+
|
|
|
+ echo "Creating classes-sources.jar"
|
|
|
+ jar -cf "${classes_sources_jar_path}" "@${java_sourceslist_path}"
|
|
|
+ popd
|
|
|
+
|
|
|
+ classes_root="${prefabhome}/classes"
|
|
|
+ mkdir -p "${classes_root}/META-INF"
|
|
|
+ cp "$sdl_root/LICENSE.txt" "${classes_root}/META-INF"
|
|
|
+ java_sourceslist_path="${prefabhome}/java_sources.txt"
|
|
|
+
|
|
|
+ echo "Collecting sources for classes.jar"
|
|
|
+ find "$sdl_root/android-project/app/src/main/java" -name "*.java" >"${java_sourceslist_path}"
|
|
|
+
|
|
|
+ echo "Compiling classes"
|
|
|
+ javac -encoding utf-8 -classpath "$android_platformdir/android.jar" -d "${classes_root}" "@${java_sourceslist_path}"
|
|
|
+
|
|
|
+ java_classeslist_path="${prefabhome}/java_classes.txt"
|
|
|
+ pushd "${classes_root}"
|
|
|
+ find "." -name "*.class" >"${java_classeslist_path}"
|
|
|
+ find "META-INF" -name "*" >>"${java_classeslist_path}"
|
|
|
+ echo "Creating classes.jar"
|
|
|
+ jar -cf "${classes_jar_path}" "@${java_classeslist_path}"
|
|
|
+ popd
|
|
|
+}
|
|
|
+
|
|
|
+pom_filename="SDL${sdl_major}-${sdl_version}.pom"
|
|
|
+pom_filepath="${prefabhome}/${pom_filename}"
|
|
|
+create_pom_xml() {
|
|
|
+ echo "Creating ${pom_filename}"
|
|
|
+ cat >"${pom_filepath}" <<EOF
|
|
|
+<project>
|
|
|
+ <modelVersion>4.0.0</modelVersion>
|
|
|
+ <groupId>org.libsdl.android</groupId>
|
|
|
+ <artifactId>SDL${sdl_major}</artifactId>
|
|
|
+ <version>${sdl_version}</version>
|
|
|
+ <packaging>aar</packaging>
|
|
|
+ <name>SDL${sdl_major}</name>
|
|
|
+ <description>The AAR for SDL${sdl_major}</description>
|
|
|
+ <url>https://libsdl.org/</url>
|
|
|
+ <licenses>
|
|
|
+ <license>
|
|
|
+ <name>zlib License</name>
|
|
|
+ <url>https://github.com/libsdl-org/SDL/blob/main/LICENSE.txt</url>
|
|
|
+ <distribution>repo</distribution>
|
|
|
+ </license>
|
|
|
+ </licenses>
|
|
|
+ <scm>
|
|
|
+ <connection>scm:git:https://github.com/libsdl-org/SDL</connection>
|
|
|
+ <url>https://github.com/libsdl-org/SDL</url>
|
|
|
+ </scm>
|
|
|
+</project>
|
|
|
+EOF
|
|
|
+}
|
|
|
+
|
|
|
+create_aar_androidmanifest() {
|
|
|
+ echo "Creating AndroidManifest.xml"
|
|
|
+ cat >"${aar_root}/AndroidManifest.xml" <<EOF
|
|
|
+<manifest
|
|
|
+ xmlns:android="http://schemas.android.com/apk/res/android"
|
|
|
+ package="org.libsdl.android" android:versionCode="1"
|
|
|
+ android:versionName="1.0">
|
|
|
+ <uses-sdk android:minSdkVersion="16"
|
|
|
+ android:targetSdkVersion="29"/>
|
|
|
+</manifest>
|
|
|
+EOF
|
|
|
+}
|
|
|
+
|
|
|
+echo "Creating AAR root directory"
|
|
|
+aar_root="${prefabhome}/SDL${sdl_major}-${sdl_version}"
|
|
|
+mkdir -p "${aar_root}"
|
|
|
+
|
|
|
+aar_metainfdir_path=${aar_root}/META-INF
|
|
|
+mkdir -p "${aar_metainfdir_path}"
|
|
|
+cp "${sdl_root}/LICENSE.txt" "${aar_metainfdir_path}"
|
|
|
+
|
|
|
+prefabworkdir="${aar_root}/prefab"
|
|
|
+mkdir -p "${prefabworkdir}"
|
|
|
+
|
|
|
+cat >"${prefabworkdir}/prefab.json" <<EOF
|
|
|
+{
|
|
|
+ "schema_version": 2,
|
|
|
+ "name": "SDL$sdl_major",
|
|
|
+ "version": "$sdl_version",
|
|
|
+ "dependencies": []
|
|
|
+}
|
|
|
+EOF
|
|
|
+
|
|
|
+modulesworkdir="${prefabworkdir}/modules"
|
|
|
+mkdir -p "${modulesworkdir}"
|
|
|
+
|
|
|
+create_shared_sdl_module() {
|
|
|
+ echo "Creating SDL${sdl_major} prefab module"
|
|
|
+ for android_abi in $android_abis; do
|
|
|
+ sdl_moduleworkdir="${modulesworkdir}/SDL${sdl_major}"
|
|
|
+ mkdir -p "${sdl_moduleworkdir}"
|
|
|
+
|
|
|
+ abi_build_prefix="${build_root}/build_${android_abi}/prefix"
|
|
|
+
|
|
|
+ cat >"${sdl_moduleworkdir}/module.json" <<EOF
|
|
|
+{
|
|
|
+ "export_libraries": [],
|
|
|
+ "library_name": "libSDL${sdl_major}"
|
|
|
+}
|
|
|
+EOF
|
|
|
+ mkdir -p "${sdl_moduleworkdir}/include"
|
|
|
+ cp -r "${abi_build_prefix}/include/SDL${sdl_major}/"* "${sdl_moduleworkdir}/include/"
|
|
|
+ rm "${sdl_moduleworkdir}/include/SDL_config.h"
|
|
|
+ cp "$sdl_root/include/SDL_config.h" "$sdl_root/include/SDL_config_android.h" "${sdl_moduleworkdir}/include/"
|
|
|
+
|
|
|
+ abi_sdllibdir="${sdl_moduleworkdir}/libs/android.${android_abi}"
|
|
|
+ mkdir -p "${abi_sdllibdir}"
|
|
|
+ cat >"${abi_sdllibdir}/abi.json" <<EOF
|
|
|
+{
|
|
|
+ "abi": "${android_abi}",
|
|
|
+ "api": ${android_api},
|
|
|
+ "ndk": ${android_ndk},
|
|
|
+ "stl": "${android_stl}",
|
|
|
+ "static": false
|
|
|
+}
|
|
|
+EOF
|
|
|
+ cp "${abi_build_prefix}/lib/libSDL${sdl_major}.so" "${abi_sdllibdir}"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+create_static_sdl_module() {
|
|
|
+ echo "Creating SDL${sdl_major}-static prefab module"
|
|
|
+ for android_abi in $android_abis; do
|
|
|
+ sdl_moduleworkdir="${modulesworkdir}/SDL${sdl_major}-static"
|
|
|
+ mkdir -p "${sdl_moduleworkdir}"
|
|
|
+
|
|
|
+ abi_build_prefix="${build_root}/build_${android_abi}/prefix"
|
|
|
+
|
|
|
+ cat >"${sdl_moduleworkdir}/module.json" <<EOF
|
|
|
+{
|
|
|
+ "export_libraries": ["-ldl", "-lGLESv1_CM", "-lGLESv2", "-llog", "-landroid", "-lOpenSLES"]
|
|
|
+ "library_name": "libSDL${sdl_major}"
|
|
|
+}
|
|
|
+EOF
|
|
|
+ mkdir -p "${sdl_moduleworkdir}/include"
|
|
|
+ cp -r "${abi_build_prefix}/include/SDL${sdl_major}/"* "${sdl_moduleworkdir}/include"
|
|
|
+ rm "${sdl_moduleworkdir}/include/SDL_config.h"
|
|
|
+ cp "$sdl_root/include/SDL_config.h" "$sdl_root/include/SDL_config_android.h" "${sdl_moduleworkdir}/include/"
|
|
|
+
|
|
|
+ abi_sdllibdir="${sdl_moduleworkdir}/libs/android.${android_abi}"
|
|
|
+ mkdir -p "${abi_sdllibdir}"
|
|
|
+ cat >"${abi_sdllibdir}/abi.json" <<EOF
|
|
|
+{
|
|
|
+ "abi": "${android_abi}",
|
|
|
+ "api": ${android_api},
|
|
|
+ "ndk": ${android_ndk},
|
|
|
+ "stl": "${android_stl}",
|
|
|
+ "static": true
|
|
|
+}
|
|
|
+EOF
|
|
|
+ cp "${abi_build_prefix}/lib/libSDL${sdl_major}.a" "${abi_sdllibdir}"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+create_sdlmain_module() {
|
|
|
+ echo "Creating SDL${sdl_major}main prefab module"
|
|
|
+ for android_abi in $android_abis; do
|
|
|
+ sdl_moduleworkdir="${modulesworkdir}/SDL${sdl_major}main"
|
|
|
+ mkdir -p "${sdl_moduleworkdir}"
|
|
|
+
|
|
|
+ abi_build_prefix="${build_root}/build_${android_abi}/prefix"
|
|
|
+
|
|
|
+ cat >"${sdl_moduleworkdir}/module.json" <<EOF
|
|
|
+{
|
|
|
+ "export_libraries": [],
|
|
|
+ "library_name": "libSDL${sdl_major}main"
|
|
|
+}
|
|
|
+EOF
|
|
|
+ abi_sdllibdir="${sdl_moduleworkdir}/libs/android.${android_abi}"
|
|
|
+ mkdir -p "${abi_sdllibdir}"
|
|
|
+ cat >"${abi_sdllibdir}/abi.json" <<EOF
|
|
|
+{
|
|
|
+ "abi": "${android_abi}",
|
|
|
+ "api": ${android_api},
|
|
|
+ "ndk": ${android_ndk},
|
|
|
+ "stl": "${android_stl}",
|
|
|
+ "static": true
|
|
|
+}
|
|
|
+EOF
|
|
|
+ cp "${abi_build_prefix}/lib/libSDL${sdl_major}main.a" "${abi_sdllibdir}"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+create_sdltest_module() {
|
|
|
+ echo "Creating SDL${sdl_major}test prefab module"
|
|
|
+ for android_abi in $android_abis; do
|
|
|
+ sdl_moduleworkdir="${modulesworkdir}/SDL${sdl_major}test"
|
|
|
+ mkdir -p "${sdl_moduleworkdir}"
|
|
|
+
|
|
|
+ abi_build_prefix="${build_root}/build_${android_abi}/prefix"
|
|
|
+
|
|
|
+ cat >"${sdl_moduleworkdir}/module.json" <<EOF
|
|
|
+{
|
|
|
+ "export_libraries": [],
|
|
|
+ "library_name": "libSDL${sdl_major}_test"
|
|
|
+}
|
|
|
+EOF
|
|
|
+ abi_sdllibdir="${sdl_moduleworkdir}/libs/android.${android_abi}"
|
|
|
+ mkdir -p "${abi_sdllibdir}"
|
|
|
+ cat >"${abi_sdllibdir}/abi.json" <<EOF
|
|
|
+{
|
|
|
+ "abi": "${android_abi}",
|
|
|
+ "api": ${android_api},
|
|
|
+ "ndk": ${android_ndk},
|
|
|
+ "stl": "${android_stl}",
|
|
|
+ "static": true
|
|
|
+}
|
|
|
+EOF
|
|
|
+ cp "${abi_build_prefix}/lib/libSDL${sdl_major}_test.a" "${abi_sdllibdir}"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+build_cmake_projects
|
|
|
+
|
|
|
+compile_java
|
|
|
+
|
|
|
+create_pom_xml
|
|
|
+
|
|
|
+create_aar_androidmanifest
|
|
|
+
|
|
|
+create_shared_sdl_module
|
|
|
+
|
|
|
+create_static_sdl_module
|
|
|
+
|
|
|
+create_sdlmain_module
|
|
|
+
|
|
|
+create_sdltest_module
|
|
|
+
|
|
|
+pushd "${aar_root}"
|
|
|
+ aar_filename="SDL${sdl_major}-${sdl_version}.aar"
|
|
|
+ cp "${classes_jar_path}" ./classes.jar
|
|
|
+ cp "${classes_sources_jar_path}" ./classes-sources.jar
|
|
|
+ zip -r "${aar_filename}" AndroidManifest.xml classes.jar classes-sources.jar prefab META-INF
|
|
|
+ zip -Tv "${aar_filename}" 2>/dev/null ;
|
|
|
+ mv "${aar_filename}" "${prefabhome}"
|
|
|
+popd
|
|
|
+
|
|
|
+maven_filename="SDL${sdl_major}-${sdl_version}.zip"
|
|
|
+
|
|
|
+pushd "${prefabhome}"
|
|
|
+ zip_filename="SDL${sdl_major}-${sdl_version}.zip"
|
|
|
+ zip "${maven_filename}" "${aar_filename}" "${pom_filename}" 2>/dev/null;
|
|
|
+ zip -Tv "${zip_filename}" 2>/dev/null;
|
|
|
+popd
|
|
|
+
|
|
|
+echo "Prefab zip is ready at ${prefabhome}/${aar_filename}"
|
|
|
+echo "Maven archive is ready at ${prefabhome}/${zip_filename}"
|