From 939ca0c15d9a44a2e1e664274994c4147d8700b9 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Wed, 20 Nov 2024 10:10:37 +0100 Subject: [PATCH 1/6] build: update the ndk version for android --- .github/workflows/android.yml | 2 +- platforms/android/app/build.gradle | 2 +- platforms/build-android.sh | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index e7792ad22..1142704d6 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -46,7 +46,7 @@ jobs: - name: Setup NDK run: | - sdkmanager --install "ndk;28.0.12433566" + sdkmanager --install "ndk;28.0.12674087" - name: Build native libraries run: | diff --git a/platforms/android/app/build.gradle b/platforms/android/app/build.gradle index 5577e5b22..f21e86caa 100644 --- a/platforms/android/app/build.gradle +++ b/platforms/android/app/build.gradle @@ -248,7 +248,7 @@ android { } compileSdkVersion 35 - ndkVersion "28.0.12433566" + ndkVersion "28.0.12674087" defaultConfig { if (buildAsApplication) { applicationId "com.github.oopetris" diff --git a/platforms/build-android.sh b/platforms/build-android.sh index 41719d90e..c39717494 100755 --- a/platforms/build-android.sh +++ b/platforms/build-android.sh @@ -6,8 +6,8 @@ if [ ! -d "toolchains" ]; then mkdir -p toolchains fi -export NDK_VER_DOWNLOAD="r28-beta1" -export NDK_VER_DESC="r28-beta1" +export NDK_VER_DOWNLOAD="r28-beta2" +export NDK_VER_DESC="r28-beta2" export BASE_PATH="$PWD/toolchains/android-ndk-$NDK_VER_DESC" export ANDROID_NDK_HOME="$BASE_PATH" From 9d09cdbe9453c68e247fc49a4f305ca67a2a6fa4 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Wed, 20 Nov 2024 12:21:59 +0100 Subject: [PATCH 2/6] fix: fix android build, by correctly setting some defines --- platforms/android/app/jni/Application.mk | 4 +++ tools/dependencies/meson.build | 9 +++++- tools/options/meson.build | 36 ++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/platforms/android/app/jni/Application.mk b/platforms/android/app/jni/Application.mk index c4361e699..b500af6ff 100644 --- a/platforms/android/app/jni/Application.mk +++ b/platforms/android/app/jni/Application.mk @@ -11,3 +11,7 @@ APP_PLATFORM := android-35 # support 16KB page sizes: # see: https://developer.android.com/guide/practices/page-sizes APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true + +# support weak api defs: +# see https://developer.android.com/ndk/guides/using-newer-apis +APP_WEAK_API_DEFS := true diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index b3827400d..000bde325 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -384,7 +384,14 @@ if build_application curl_cpp_wrapper = dependency( 'cpr', required: true, - default_options: {'tests': 'disabled'}, + default_options: { + 'tests': 'disabled', + 'curl:tests': 'disabled', + 'curl:unittests': 'disabled', + 'curl:bearer-auth': 'enabled', + 'curl:brotli': 'enabled', + 'curl:libz': 'enabled', + }, ) graphics_lib += { diff --git a/tools/options/meson.build b/tools/options/meson.build index 9032fdfd1..43c26c1e1 100644 --- a/tools/options/meson.build +++ b/tools/options/meson.build @@ -34,6 +34,42 @@ if meson.is_cross_build() and host_machine.system() == 'serenity' ] core_lib += {'compile_args': temp} temp = 0 +elif meson.is_cross_build() and host_machine.system() == 'android' + cpp = meson.get_compiler('cpp') + target_android_api = '35' + + android_api = cpp.get_define( + '__ANDROID_API__', + prefix: '#include ', + ).strip('"') + assert( + android_api != '', + 'failed to get android_api version', + ) + + android_compile_args = [] + android_link_args = [] + + # APP_SUPPORT_FLEXIBLE_PAGE_SIZES + android_link_args += '-Wl,-z,max-page-size=16384' + + if android_api != target_android_api + android_compile_args += ('-D__ANDROID_API__=' + target_android_api) + endif + + android_compile_args += [ + '-D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__', + '-Werror=unguarded-availability', + ] + + if not meson.is_subproject() + add_global_link_arguments(android_link_args, language: ['cpp']) + add_global_arguments(android_compile_args, language: ['cpp']) + else + add_project_link_arguments(android_link_args, language: ['cpp']) + add_project_arguments(android_compile_args, language: ['cpp']) + + endif endif cpp = meson.get_compiler('cpp') From 1d21faf0a0b56b924ef9943e9f556a05977cf3f6 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Wed, 20 Nov 2024 12:27:17 +0100 Subject: [PATCH 3/6] build: update agp to 8.7.2 --- platforms/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/android/build.gradle b/platforms/android/build.gradle index da0461b62..573779681 100644 --- a/platforms/android/build.gradle +++ b/platforms/android/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:8.7.0' + classpath 'com.android.tools.build:gradle:8.7.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 1f3ce6abc008443ace89f767911357d5b2837b4c Mon Sep 17 00:00:00 2001 From: Totto16 Date: Wed, 20 Nov 2024 13:08:22 +0100 Subject: [PATCH 4/6] fix: nintendo: disable and enable curl features explicitly --- platforms/build-3ds.sh | 7 ++++++- platforms/build-switch.sh | 7 ++++++- tools/dependencies/meson.build | 5 ----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/platforms/build-3ds.sh b/platforms/build-3ds.sh index 31ab955bd..d1b714055 100755 --- a/platforms/build-3ds.sh +++ b/platforms/build-3ds.sh @@ -255,7 +255,12 @@ if [ "$COMPILE_TYPE" == "complete_rebuild" ] || [ ! -e "$BUILD_DIR" ]; then "--wipe" \ --cross-file "$CROSS_FILE" \ "-Dbuildtype=$BUILDTYPE" \ - -Ddefault_library=static + -Ddefault_library=static \ + -Dcurl:tests=disabled \ + -Dcurl:unittests=disabled \ + -Dcurl:bearer-auth=enabled \ + -Dcurl:brotli=enabled \ + -Dcurl:libz=enabled fi diff --git a/platforms/build-switch.sh b/platforms/build-switch.sh index 0f0f92136..55810e6ac 100755 --- a/platforms/build-switch.sh +++ b/platforms/build-switch.sh @@ -152,7 +152,12 @@ if [ "$COMPILE_TYPE" == "complete_rebuild" ] || [ ! -e "$BUILD_DIR" ]; then "--wipe" \ --cross-file "$CROSS_FILE" \ "-Dbuildtype=$BUILDTYPE" \ - -Ddefault_library=static + -Ddefault_library=static \ + -Dcurl:tests=disabled \ + -Dcurl:unittests=disabled \ + -Dcurl:bearer-auth=enabled \ + -Dcurl:brotli=enabled \ + -Dcurl:libz=enabled fi diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index 000bde325..1a324d675 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -386,11 +386,6 @@ if build_application required: true, default_options: { 'tests': 'disabled', - 'curl:tests': 'disabled', - 'curl:unittests': 'disabled', - 'curl:bearer-auth': 'enabled', - 'curl:brotli': 'enabled', - 'curl:libz': 'enabled', }, ) From 16cdae5a3cb2228d6b655ef93ebb72fcefb38416 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Wed, 20 Nov 2024 13:21:48 +0100 Subject: [PATCH 5/6] build: update android depedendencies openssl to 3.4.0 mpg123 to 1.32.9 --- platforms/build-android.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/platforms/build-android.sh b/platforms/build-android.sh index c39717494..ccc1b9644 100755 --- a/platforms/build-android.sh +++ b/platforms/build-android.sh @@ -181,15 +181,17 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do cd "$BUILD_DIR_MPG123" - if [ ! -e "mpg123-1.32.6.tar.bz2" ]; then - wget -q "https://www.mpg123.de/download/mpg123-1.32.6.tar.bz2" + MPG123_VERSION="1.32.9" + + if [ ! -e "mpg123-$MPG123_VERSION.tar.bz2" ]; then + wget -q "https://www.mpg123.de/download/mpg123-$MPG123_VERSION.tar.bz2" fi - if [ ! -d "mpg123-1.32.6" ]; then - tar -xf "mpg123-1.32.6.tar.bz2" + if [ ! -d "mpg123-$MPG123_VERSION" ]; then + tar -xf "mpg123-$MPG123_VERSION.tar.bz2" fi - cd "mpg123-1.32.6" + cd "mpg123-$MPG123_VERSION" cd ports/cmake/ @@ -239,15 +241,17 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do cd "$BUILD_DIR_OPENSSL" - if [ ! -e "openssl-3.3.0.tar.gz" ]; then - wget -q "https://github.com/openssl/openssl/releases/download/openssl-3.3.0/openssl-3.3.0.tar.gz" + OPENSSL_VERSION="3.4.0" + + if [ ! -e "openssl-$OPENSSL_VERSION.tar.gz" ]; then + wget -q "https://github.com/openssl/openssl/releases/download/openssl-$OPENSSL_VERSION/openssl-$OPENSSL_VERSION.tar.gz" fi - if [ ! -d "openssl-3.3.0" ]; then - tar -xzf "openssl-3.3.0.tar.gz" + if [ ! -d "openssl-$OPENSSL_VERSION" ]; then + tar -xzf "openssl-$OPENSSL_VERSION.tar.gz" fi - cd "openssl-3.3.0" + cd "openssl-$OPENSSL_VERSION" OPENSSL_TARGET_ARCH="android-$ARCH" @@ -293,7 +297,7 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do MESON_CPU_FAMILY="aarch64" fi - export COMPILE_FLAGS="'--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-DAUDIO_PREFER_MP3'" + export COMPILE_FLAGS="'--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-D__ANDROID_API__=$SDK_VERSION', '-DAUDIO_PREFER_MP3'" export LINK_FLAGS="'-fPIE','-L$SYS_ROOT/usr/lib'" From 5542d2968cba4b74f7d8816b776fa08726bc1495 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Wed, 20 Nov 2024 15:51:08 +0100 Subject: [PATCH 6/6] fix: android, build flac manually also use pkg-config for android, by setting the correct pkg_conf_libdir variable and using the host pkg-config --- platforms/android/app/jni/Android.mk | 8 +-- platforms/build-android.sh | 76 ++++++++++++++++++++++++---- tools/dependencies/meson.build | 10 +++- 3 files changed, 76 insertions(+), 18 deletions(-) diff --git a/platforms/android/app/jni/Android.mk b/platforms/android/app/jni/Android.mk index af51c87e4..86754b76d 100644 --- a/platforms/android/app/jni/Android.mk +++ b/platforms/android/app/jni/Android.mk @@ -50,12 +50,6 @@ LOCAL_SRC_FILES := $(shell find "${SUBPROJECTS_PATH}" -name libogg.so) include $(PREBUILT_SHARED_LIBRARY) -include $(CLEAR_VARS) -LOCAL_MODULE := flac -LOCAL_SRC_FILES := $(shell find "${SUBPROJECTS_PATH}" -name libFLAC.so) -include $(PREBUILT_SHARED_LIBRARY) - - include $(CLEAR_VARS) LOCAL_MODULE := sdl2_image LOCAL_SRC_FILES := $(shell find "${SUBPROJECTS_PATH}" -name libsdl2image.so) @@ -105,7 +99,7 @@ include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := main -LOCAL_SHARED_LIBRARIES := SDL2 sdl2_ttf freetype png16 sdl2_mixer vorbis vorbisfile ogg flac sdl2_image fmt keyutils oopetris_core oopetris_recordings oopetris_graphics oopetris +LOCAL_SHARED_LIBRARIES := SDL2 sdl2_ttf freetype png16 sdl2_mixer vorbis vorbisfile ogg sdl2_image fmt keyutils oopetris_core oopetris_recordings oopetris_graphics oopetris LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -lOpenSLES -llog -landroid LOCAL_LDFLAGS := -Wl,--no-undefined include $(BUILD_SHARED_LIBRARY) diff --git a/platforms/build-android.sh b/platforms/build-android.sh index ccc1b9644..7cd318b32 100755 --- a/platforms/build-android.sh +++ b/platforms/build-android.sh @@ -165,7 +165,7 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do ## BUILD dependencies not buildable with meson (to complicated to port) - ## build mpg123 with autotools (meson port is to much work atm, for this feature) + ## build mpg123 with cmake (meson port is to much work atm, for this feature) LAST_DIR="$PWD" @@ -173,7 +173,7 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do BUILD_DIR_MPG123="build-mpg123" - BUILD_MPG123_FILE="$SYS_ROOT/$BUILD_DIR_MPG123/build_succesfull.meta" + BUILD_MPG123_FILE="$SYS_ROOT/$BUILD_DIR_MPG123/build_successfull.meta" if [ "$COMPILE_TYPE" == "complete_rebuild" ] || ! [ -e "$BUILD_MPG123_FILE" ]; then @@ -195,8 +195,6 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do cd ports/cmake/ - BUILD_DIR_MPG123="build-mpg123" - mkdir -p "$BUILD_DIR_MPG123" cd "$BUILD_DIR_MPG123" @@ -225,6 +223,64 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do cd "$LAST_DIR" + ## build flac with cmake (meson port doesn't work for 32 bits machines atm) (we need to check for fseeko and ftello correctly in there) + + LAST_DIR="$PWD" + + cd "$SYS_ROOT" + + BUILD_DIR_FLAC="build-flac" + + BUILD_FLAC_FILE="$SYS_ROOT/$BUILD_DIR_FLAC/build_successfull.meta" + + if [ "$COMPILE_TYPE" == "complete_rebuild" ] || ! [ -e "$BUILD_FLAC_FILE" ]; then + + mkdir -p "$BUILD_DIR_FLAC" + + cd "$BUILD_DIR_FLAC" + + FLAC_VERSION="1.4.3" + + if [ ! -e "flac-$FLAC_VERSION.tar.xz" ]; then + wget -q "https://github.com/xiph/flac/releases/download/$FLAC_VERSION/flac-$FLAC_VERSION.tar.xz" + fi + + if [ ! -d "flac-$FLAC_VERSION" ]; then + tar -xf "flac-$FLAC_VERSION.tar.xz" + fi + + cd "flac-$FLAC_VERSION" + + mkdir -p "$BUILD_DIR_FLAC" + + cd "$BUILD_DIR_FLAC" + + cmake .. --install-prefix "$SYS_ROOT/usr" "-DCMAKE_SYSROOT=$SYS_ROOT" -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + "-DCMAKE_SYSTEM_NAME=Android" \ + "-DCMAKE_SYSTEM_VERSION=$SDK_VERSION" \ + "-DCMAKE_ANDROID_ARCH_ABI=$KEY" \ + "-DCMAKE_ANDROID_NDK=$ANDROID_NDK" \ + "-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang" \ + -DBUILD_PROGRAMS=OFF \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_TESTING=OFF \ + -DBUILD_CXXLIBS=OFF \ + -DBUILD_DOCS=OFF \ + -DWITH_OGG=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DINSTALL_PKGCONFIG_MODULES=ON + + + cmake --build . + + cmake --install . + + touch "$BUILD_FLAC_FILE" + + fi + + cd "$LAST_DIR" + ## build openssl with make (meson port is to much work atm, for this feature) LAST_DIR="$PWD" @@ -233,7 +289,7 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do BUILD_DIR_OPENSSL="build-openssl" - BUILD_OPENSSL_FILE="$SYS_ROOT/$BUILD_DIR_OPENSSL/build_succesfull.meta" + BUILD_OPENSSL_FILE="$SYS_ROOT/$BUILD_DIR_OPENSSL/build_successfull.meta" if [ "$COMPILE_TYPE" == "complete_rebuild" ] || ! [ -e "$BUILD_OPENSSL_FILE" ]; then @@ -297,7 +353,7 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do MESON_CPU_FAMILY="aarch64" fi - export COMPILE_FLAGS="'--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-D__ANDROID_API__=$SDK_VERSION', '-DAUDIO_PREFER_MP3'" + export COMPILE_FLAGS="'--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-D__ANDROID_API__=$SDK_VERSION', '-DBITNESS=$BITNESS','-DAUDIO_PREFER_MP3'" export LINK_FLAGS="'-fPIE','-L$SYS_ROOT/usr/lib'" @@ -322,7 +378,7 @@ as = '$AS' ranlib = '$RANLIB' strip = '$STRIP' objcopy = '$OBJCOPY' -pkg-config = 'false' +pkg-config = 'pkg-config' llvm-config = '$LLVM_CONFIG' [built-in options] @@ -337,7 +393,7 @@ prefix = '$SYS_ROOT' libdir = '$LIB_PATH' [properties] -pkg_config_libdir = '$LIB_PATH' +pkg_config_libdir = '$SYS_ROOT/usr/lib/pkgconfig' sys_root = '${SYS_ROOT}' EOF @@ -367,7 +423,7 @@ meson.override_dependency( EOF fi - export LIBRARY_PATH="$LIBRARY_PATH:usr/lib/$ARM_NAME_TRIPLE/$SDK_VERSION:$LIB_PATH" + export LIBRARY_PATH="$LIBRARY_PATH:$SYS_ROOT/usr/lib/$ARM_NAME_TRIPLE/$SDK_VERSION:$LIB_PATH" if [ "$COMPILE_TYPE" == "complete_rebuild" ] || [ ! -e "$BUILD_DIR" ]; then @@ -376,7 +432,7 @@ EOF "--prefix=$SYS_ROOT" \ "--wipe" \ "--includedir=$INC_PATH" \ - "--libdir=usr/lib/$ARM_NAME_TRIPLE/$SDK_VERSION" \ + "--libdir=$SYS_ROOT/usr/lib/$ARM_NAME_TRIPLE/$SDK_VERSION" \ --cross-file "./platforms/crossbuild-android-$ARM_TARGET_ARCH.ini" \ "-Dbuildtype=$BUILDTYPE" \ -Dsdl2:use_hidapi=enabled \ diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index 1a324d675..f00e47fd1 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -29,7 +29,15 @@ if meson.is_cross_build() # ) # endif elif host_machine.system() == 'android' - # noop + + flac_dep = dependency( + 'flac', + allow_fallback: false, + required: true, + ) + + meson.override_dependency('libflac', flac_dep) + elif host_machine.system() == 'emscripten' # check if the command line flags are supported and a simple example compiles