mirror of
				https://github.com/thunderbrewhq/thunderbrew
				synced 2025-11-01 00:36:04 +03:00 
			
		
		
		
	 706c8903a1
			
		
	
	
		706c8903a1
		
			
		
	
	
	
	
		
			
			* chore(build): add vendored SDL 3.0.0 library * chore(build): add vendored glew-cmake-2.2.0 library * feat(console): in the presence of -opengl launch flag, change GxApi to OpenGl * feat(gx): add uncompleted CGxDeviceGLSDL targeting Windows and Linux * chore(build): change SDL3 linkage from shared (bad) to to static (good)
		
			
				
	
	
		
			316 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			316 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/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/SDL3/SDL_version.h")
 | |
| sdl_minor=$(sed -ne 's/^#define SDL_MINOR_VERSION  *//p' "${sdl_root}/include/SDL3/SDL_version.h")
 | |
| sdl_patch=$(sed -ne 's/^#define SDL_PATCHLEVEL  *//p' "${sdl_root}/include/SDL3/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 \
 | |
|             -DSDL_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/SDL${sdl_major}"
 | |
|         cp -r "${abi_build_prefix}/include/SDL${sdl_major}/"* "${sdl_moduleworkdir}/include/SDL${sdl_major}"
 | |
| 
 | |
|         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/SDL${sdl_major}"
 | |
|         cp -r "${abi_build_prefix}/include/SDL${sdl_major}/"* "${sdl_moduleworkdir}/include/SDL${sdl_major}"
 | |
| 
 | |
|         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_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_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}"
 |