Commit 61daf8f14377a192598fe42b912cc5cdc1900918

Authored by Jay Berkenbilt
1 parent 9e189725

Fix android build issues (fixes #950)

.github/workflows/main.yml
@@ -163,6 +163,7 @@ jobs: @@ -163,6 +163,7 @@ jobs:
163 - test-alt-zlib 163 - test-alt-zlib
164 - test-unsigned-char 164 - test-unsigned-char
165 - test-c++-next 165 - test-c++-next
  166 + - build-android-ndk
166 steps: 167 steps:
167 - uses: actions/checkout@v4 168 - uses: actions/checkout@v4
168 - name: ${{ matrix.script }} 169 - name: ${{ matrix.script }}
build-scripts/build-android-ndk 0 → 100755
  1 +#!/bin/bash
  2 +set -xeo pipefail
  3 +cd $(dirname $0)/..
  4 +
  5 +# Build a static libqpdf for android with an ABI version <= 24. This
  6 +# is just to exercise that configuring for that platform works.
  7 +
  8 +declare -a android_flags
  9 +android_flags=( \
  10 + -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake" \
  11 + -DANDROID_ABI=armeabi-v7a \
  12 + -DANDROID_PLATFORM=android-21 \
  13 +)
  14 +
  15 +rm -rf android-work build-android
  16 +mkdir android-work
  17 +pushd android-work
  18 +export WORK=$PWD
  19 +git clone https://github.com/libjpeg-turbo/libjpeg-turbo
  20 +cd libjpeg-turbo
  21 +cmake -S . -B build \
  22 + "${android_flags[@]}" \
  23 + -DCMAKE_INSTALL_PREFIX="$WORK" \
  24 + -DENABLE_STATIC=ON \
  25 + -DENABLE_SHARED=OFF \
  26 + -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  27 +make -C build -j$(nproc)
  28 +make -C build install
  29 +popd
  30 +
  31 +export CMAKE_PREFIX_PATH=$WORK LDFLAGS="-L$WORK/lib"
  32 +cmake -S . -B build-android \
  33 + "${android_flags[@]}" \
  34 + -DCMAKE_BUILD_TYPE=RelWithDebinfo \
  35 + -DUSE_IMPLICIT_CRYPTO=OFF \
  36 + -DBUILD_SHARED_LIBS=OFF \
  37 + -DBUILD_STATIC_LIBS=ON \
  38 + -DREQUIRE_CRYPTO_NATIVE=ON
  39 +
  40 +cmake --build build-android -t libqpdf --verbose -j$(nproc) -- -k
  41 +file build-android/libqpdf/CMakeFiles/libqpdf_object.dir/QUtil.cc.o | grep 'ARM, EABI5'
libqpdf/CMakeLists.txt
@@ -349,7 +349,11 @@ int main(int argc, char* argv[]) { @@ -349,7 +349,11 @@ int main(int argc, char* argv[]) {
349 LFS_WITHOUT_MACROS) 349 LFS_WITHOUT_MACROS)
350 350
351 check_c_source_compiles( 351 check_c_source_compiles(
352 -"#define _FILE_OFFSET_BITS 64 352 +"#if !(defined(__ANDROID__) && __ANDROID_API__ <= 24)
  353 +// Defining _FILE_OFFSET_BITS on Android <= 24 is known to
  354 +// produce incorrect results.
  355 +#define _FILE_OFFSET_BITS 64
  356 +#endif
353 #include <stdio.h> 357 #include <stdio.h>
354 #include <sys/types.h> 358 #include <sys/types.h>
355 int main(int argc, char* argv[]) { 359 int main(int argc, char* argv[]) {
@@ -359,11 +363,6 @@ int main(int argc, char* argv[]) { @@ -359,11 +363,6 @@ int main(int argc, char* argv[]) {
359 if(LFS_WITH_MACROS AND NOT LFS_WITHOUT_MACROS) 363 if(LFS_WITH_MACROS AND NOT LFS_WITHOUT_MACROS)
360 set(_FILE_OFFSET_BITS 64) 364 set(_FILE_OFFSET_BITS 64)
361 endif() 365 endif()
362 -  
363 -# fseeko may not exist with _FILE_OFFSET_BITS=64 but can exist with  
364 -# _FILE_OFFSET_BITS unset or 32 (e.g. Android ARMv7 with NDK 26b and  
365 -# API level < 24) so we need to test fseeko after testing for  
366 -# _FILE_OFFSET_BITS. See https://github.com/qpdf/qpdf/issues/950.  
367 check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO) 366 check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO)
368 check_symbol_exists(fseeko64 "stdio.h" HAVE_FSEEKO64) 367 check_symbol_exists(fseeko64 "stdio.h" HAVE_FSEEKO64)
369 368