From: Twaik Yont <9674930+twaik@users.noreply.github.com> Build the APK from an explicitly staged Android project tree. Add the Android ABI name separately from exec_prefix and use it to prepare the assets and lib directories before invoking Gradle. The APK build now installs the Wine prefix into assets, copies the freetype shared library into the matching lib directory, removes unneeded files, and replaces launcher symlinks in bin with shell wrappers suitable for APK packaging. These are the additional preparation steps required by wineandroid: the APK cannot be built directly from the normal install layout and needs a staged prefix with Android-specific path fixups before the final Gradle build. Signed-off-by: Twaik Yont <9674930+twaik@users.noreply.github.com> --- configure | 47 ++++++++++++++++++++++++++++++++++++++--------- configure.ac | 47 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/configure b/configure index 08ae1b52e89..7e660111844 100755 --- a/configure +++ b/configure @@ -13060,14 +13060,15 @@ printf "%s\n" "#define SONAME_LIBGLESV2 \"$ac_cv_lib_soname_GLESv2\"" >>confdefs esac fi + case $HOST_ARCH in + i386) android_abi='x86' ;; + x86_64) android_abi='x86_64' ;; + arm) android_abi='armeabi-v7a' ;; + aarch64) android_abi='arm64-v8a' ;; + esac if test "x$exec_prefix" = xNONE then - case $HOST_ARCH in - i386) exec_prefix='${prefix}/x86' ;; - x86_64) exec_prefix='${prefix}/x86_64' ;; - arm) exec_prefix='${prefix}/armeabi-v7a' ;; - aarch64) exec_prefix='${prefix}/arm64-v8a' ;; - esac + exec_prefix='${prefix}/'${android_abi} fi ;; @@ -24679,14 +24680,42 @@ server/wineserver" fi +freetype_copy_cmd=true + +freetype_copy_cmd=true +rm -f conftest.c conftest +echo "int main(void) { return 0; }" > conftest.c +freetype_so=`$CC conftest.c $CPPFLAGS $CFLAGS $LDFLAGS $FREETYPE_LIBS -Wl,-t -o conftest 2>&1 | grep -m1 'libfreetype\.so'` +rm -f conftest.c conftest +if test -n "$freetype_so" && test -f "$freetype_so"; then + freetype_copy_cmd="cp -f '$freetype_so' dlls/wineandroid.drv/lib/${android_abi}/" +fi + as_fn_append wine_rules " dlls/ntdll/unix/version.c: dummy @version=\`(GIT_DIR=${wine_srcdir}.git git describe HEAD 2>/dev/null || echo \"wine-\$(PACKAGE_VERSION)\") | sed -n -e '\$\$s/\(.*\)/const char wine_build[] = \"\\1\";/p'\` && (echo \$\$version | cmp -s - \$@) || echo \$\$version >\$@ || (rm -f \$@ && exit 1) programs/winetest/build.rc: dummy @build=\"STRINGTABLE { 1 \\\"\`GIT_DIR=${wine_srcdir}.git git rev-parse HEAD 2>/dev/null\`\\\" }\" && (echo \$\$build | cmp -s - \$@) || echo \$\$build >\$@ || (rm -f \$@ && exit 1) -dlls/wineandroid.drv/wine-debug.apk: dlls/wineandroid.drv/build.gradle ${wine_srcdir}dlls/wineandroid.drv/AndroidManifest.xml ${wine_srcdir}dlls/wineandroid.drv/WineActivity.java ${wine_srcdir}dlls/wineandroid.drv/wine.svg - cd dlls/wineandroid.drv && gradle -q -Psrcdir=$srcdir assembleDebug - mv dlls/wineandroid.drv/build/outputs/apk/wine-debug.apk \$@" +dlls/wineandroid.drv/wine-debug.apk: all dlls/wineandroid.drv/build.gradle ${wine_srcdir}dlls/wineandroid.drv/AndroidManifest.xml ${wine_srcdir}dlls/wineandroid.drv/WineActivity.java ${wine_srcdir}dlls/wineandroid.drv/wine.svg + @rm -rf dlls/wineandroid.drv/assets + @mkdir -p dlls/wineandroid.drv/assets dlls/wineandroid.drv/lib/${android_abi} + @\$(MAKE) install prefix= DESTDIR=dlls/wineandroid.drv/assets STRIP=true + @${freetype_copy_cmd} + @rm -rf dlls/wineandroid.drv/assets/include + @for f in dlls/wineandroid.drv/assets/${android_abi}/bin/*; \ +do \ + if test -L "\$\$f"; then \ + rm -f "\$\$f"; \ + printf '%s\n' '#!/system/bin/sh' \ + 'name=\$\${0##*/}' \ + 'name=\$\${name%.exe}' \ + 'name=\$\${name%%-*}' \ + 'exec ../lib/wine/i386-unix/wine "\$\$name.exe" "\$\$@"' > "\$\$f"; \ + chmod 755 "\$\$f"; \ + fi; \ +done + @cd dlls/wineandroid.drv && gradle -q -Psrcdir=$srcdir assembleDebug + @mv dlls/wineandroid.drv/build/outputs/apk/debug/wine-debug.apk \$@" EXTERNAL_SUBDIRS="libs/capstone libs/c++ libs/c++abi libs/faudio libs/fluidsynth libs/gsm libs/icucommon libs/icui18n libs/jpeg libs/jxr libs/lcms2 libs/ldap libs/mpg123 libs/musl libs/png libs/tiff libs/tomcrypt libs/unwind libs/vkd3d libs/xml2 libs/xslt libs/zlib libs/compiler-rt" diff --git a/configure.ac b/configure.ac index 89243b45be0..51c3c6ac98f 100644 --- a/configure.ac +++ b/configure.ac @@ -1056,14 +1056,15 @@ case $host_os in WINE_CHECK_SONAME(GLESv2,glFlush) + case $HOST_ARCH in + i386) android_abi='x86' ;; + x86_64) android_abi='x86_64' ;; + arm) android_abi='armeabi-v7a' ;; + aarch64) android_abi='arm64-v8a' ;; + esac if test "x$exec_prefix" = xNONE then - case $HOST_ARCH in - i386) exec_prefix='${prefix}/x86' ;; - x86_64) exec_prefix='${prefix}/x86_64' ;; - arm) exec_prefix='${prefix}/armeabi-v7a' ;; - aarch64) exec_prefix='${prefix}/arm64-v8a' ;; - esac + exec_prefix='${prefix}/'${android_abi} fi ;; @@ -3831,14 +3832,42 @@ fi dnl Rules for generated source files +freetype_copy_cmd=true + +freetype_copy_cmd=true +rm -f conftest.c conftest +echo "int main(void) { return 0; }" > conftest.c +freetype_so=`$CC conftest.c $CPPFLAGS $CFLAGS $LDFLAGS $FREETYPE_LIBS -Wl,-t -o conftest 2>&1 | grep -m1 'libfreetype\.so'` +rm -f conftest.c conftest +if test -n "$freetype_so" && test -f "$freetype_so"; then + freetype_copy_cmd="cp -f '$freetype_so' dlls/wineandroid.drv/lib/${android_abi}/" +fi + WINE_APPEND_RULE( [dlls/ntdll/unix/version.c: dummy @version=\`(GIT_DIR=${wine_srcdir}.git git describe HEAD 2>/dev/null || echo \"wine-\$(PACKAGE_VERSION)\") | sed -n -e '\$\$s/\(.*\)/const char wine_build[[]] = \"\\1\";/p'\` && (echo \$\$version | cmp -s - \$[@]) || echo \$\$version >\$[@] || (rm -f \$[@] && exit 1) programs/winetest/build.rc: dummy @build=\"STRINGTABLE { 1 \\\"\`GIT_DIR=${wine_srcdir}.git git rev-parse HEAD 2>/dev/null\`\\\" }\" && (echo \$\$build | cmp -s - \$[@]) || echo \$\$build >\$[@] || (rm -f \$[@] && exit 1) -dlls/wineandroid.drv/wine-debug.apk: dlls/wineandroid.drv/build.gradle ${wine_srcdir}dlls/wineandroid.drv/AndroidManifest.xml ${wine_srcdir}dlls/wineandroid.drv/WineActivity.java ${wine_srcdir}dlls/wineandroid.drv/wine.svg - cd dlls/wineandroid.drv && gradle -q -Psrcdir=$srcdir assembleDebug - mv dlls/wineandroid.drv/build/outputs/apk/wine-debug.apk \$[@]]) +dlls/wineandroid.drv/wine-debug.apk: all dlls/wineandroid.drv/build.gradle ${wine_srcdir}dlls/wineandroid.drv/AndroidManifest.xml ${wine_srcdir}dlls/wineandroid.drv/WineActivity.java ${wine_srcdir}dlls/wineandroid.drv/wine.svg + @rm -rf dlls/wineandroid.drv/assets + @mkdir -p dlls/wineandroid.drv/assets dlls/wineandroid.drv/lib/${android_abi} + @\$(MAKE) install prefix= DESTDIR=dlls/wineandroid.drv/assets STRIP=true + @${freetype_copy_cmd} + @rm -rf dlls/wineandroid.drv/assets/include + @for f in dlls/wineandroid.drv/assets/${android_abi}/bin/*; \ +do \ + if test -L "\$\$f"; then \ + rm -f "\$\$f"; \ + printf '%s\n' '#!/system/bin/sh' \ + 'name=\$\${0##*/}' \ + 'name=\$\${name%.exe}' \ + 'name=\$\${name%%-*}' \ + 'exec ../lib/wine/i386-unix/wine "\$\$name.exe" "\$\$@"' > "\$\$f"; \ + chmod 755 "\$\$f"; \ + fi; \ +done + @cd dlls/wineandroid.drv && gradle -q -Psrcdir=$srcdir assembleDebug + @mv dlls/wineandroid.drv/build/outputs/apk/debug/wine-debug.apk \$[@]]) dnl Misc rules -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10354