Skip to content

Commit 20d15fa

Browse files
committed
libjpeg-turbo: Change library name on Android
When using libjpeg-turbo as a shared object (libjpeg.so) on Android, there are crashes when accessing JPEG functions on some arm devices. Static linking increases binary size when the library is used by multiple other shared objects (Qt plugin, GDAL, Poppler, TIFF). Assuming that the issue is related to some other "libjpeg.so", try to resolve the dynamic linking issue by changing the filename to "libjpeg-turbo.so" in Android builds. Some depending libraries can find the alternative name via pkg-config. Depending CMake projects must be configured with -DJPEG_NAMES=jpeg-turbo. GDAL needs an individual patch.
1 parent 0b56d18 commit 20d15fa

File tree

5 files changed

+141
-3
lines changed

5 files changed

+141
-3
lines changed

gdal-3.1.3+dfsg.cmake

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,81 @@ set(test_system_gdal [[
7171
set(extra_cxxflags "-Wno-strict-overflow -Wno-null-dereference -Wno-old-style-cast" PARENT_SCOPE)
7272
]])
7373

74+
set(libjpeg_patch [[
75+
--- a/configure
76+
+++ b/configure
77+
@@ -1247,6 +1247,7 @@
78+
CXXCPP
79+
PKG_CONFIG
80+
bashcompdir
81+
+LIBJPEG_SUFFIX
82+
PQ_CFLAGS
83+
PQ_LIBS
84+
OGDI_CFLAGS
85+
@@ -30093,13 +30093,13 @@
86+
87+
elif test "$with_jpeg" = "yes" -o "$with_jpeg" = "" ; then
88+
89+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_scanlines in -ljpeg" >&5
90+
-$as_echo_n "checking for jpeg_read_scanlines in -ljpeg... " >&6; }
91+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_scanlines in -ljpeg${LIBJPEG_SUFFIX}" >&5
92+
+$as_echo_n "checking for jpeg_read_scanlines in -ljpeg${LIBJPEG_SUFFIX}... " >&6; }
93+
if ${ac_cv_lib_jpeg_jpeg_read_scanlines+:} false; then :
94+
$as_echo_n "(cached) " >&6
95+
else
96+
ac_check_lib_save_LIBS=$LIBS
97+
-LIBS="-ljpeg $LIBS"
98+
+LIBS="-ljpeg${LIBJPEG_SUFFIX} $LIBS"
99+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
100+
/* end confdefs.h. */
101+
102+
@@ -30172,7 +30172,7 @@
103+
fi
104+
105+
if test "$JPEG_SETTING" = "external" ; then
106+
- LIBS="-ljpeg $LIBS"
107+
+ LIBS="-ljpeg${LIBJPEG_SUFFIX} $LIBS"
108+
echo "using pre-installed libjpeg."
109+
else
110+
echo "using internal jpeg code."
111+
@@ -30187,7 +30187,7 @@
112+
else
113+
114+
JPEG_SETTING=external
115+
- LIBS="-L$with_jpeg -L$with_jpeg/lib -ljpeg $LIBS"
116+
+ LIBS="-L$with_jpeg -L$with_jpeg/lib -ljpeg${LIBJPEG_SUFFIX} $LIBS"
117+
EXTRA_INCLUDES="-I$with_jpeg -I$with_jpeg/include $EXTRA_INCLUDES"
118+
119+
echo "using libjpeg from $with_jpeg."
120+
@@ -31550,7 +31550,7 @@
121+
$as_echo_n "(cached) " >&6
122+
else
123+
ac_check_lib_save_LIBS=$LIBS
124+
-LIBS="-lmfhdfalt -ldfalt -ljpeg -lz $LIBS"
125+
+LIBS="-lmfhdfalt -ldfalt -ljpeg${LIBJPEG_SUFFIX} -lz $LIBS"
126+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
127+
/* end confdefs.h. */
128+
129+
@@ -31596,7 +31596,7 @@
130+
$as_echo_n "(cached) " >&6
131+
else
132+
ac_check_lib_save_LIBS=$LIBS
133+
-LIBS="-lmfhdfalt -ldfalt -lsz -ljpeg -lz $LIBS"
134+
+LIBS="-lmfhdfalt -ldfalt -lsz -ljpeg${LIBJPEG_SUFFIX} -lz $LIBS"
135+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
136+
/* end confdefs.h. */
137+
138+
@@ -40801,7 +40801,7 @@
139+
PDFIUM_LIB="-L$with_pdfium/lib -lpdfium"
140+
fi
141+
142+
- PDFIUM_LIB="$PDFIUM_LIB -ljpeg -lpng -lz -llcms2 -lpthread -lm -lstdc++"
143+
+ PDFIUM_LIB="$PDFIUM_LIB -ljpeg${LIBJPEG_SUFFIX} -lpng -lz -llcms2 -lpthread -lm -lstdc++"
144+
145+
if test ! -z "`uname | grep Darwin`" ; then
146+
PDFIUM_LIB="-stdlib=libstdc++ $PDFIUM_LIB"
147+
]])
148+
74149
superbuild_package(
75150
NAME gdal-patches
76151
VERSION ${patch_version}
@@ -103,13 +178,17 @@ superbuild_package(
103178
tiff
104179
zlib
105180

181+
SOURCE_WRITE
182+
libjpeg.patch libjpeg_patch
106183
SOURCE
107184
URL ${base_url}gdal_${version}.orig.tar.xz
108185
URL_HASH ${download_hash}
109186
PATCH_COMMAND
110187
"${CMAKE_COMMAND}"
111188
-Dpackage=gdal-patches-${patch_version}
112189
-P "${APPLY_PATCHES_SERIES}"
190+
COMMAND
191+
patch -p1 < libjpeg.patch
113192

114193
USING USE_SYSTEM_GDAL patch_version extra_cflags extra_cxxflags
115194
BUILD_CONDITION ${test_system_gdal}
@@ -120,6 +199,9 @@ superbuild_package(
120199
COMMAND
121200
"${CMAKE_COMMAND}" -E copy_directory "${SOURCE_DIR}" "${BINARY_DIR}"
122201
COMMAND
202+
$<$<BOOL:@ANDROID@>:
203+
"${CMAKE_COMMAND}" -E env LIBJPEG_SUFFIX=-turbo # needs libjpeg patch
204+
>
123205
"${BINARY_DIR}/configure"
124206
"--prefix=${CMAKE_INSTALL_PREFIX}"
125207
$<$<BOOL:@CMAKE_CROSSCOMPILING@>:

libjpeg-turbo-2.0.5.cmake

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,55 @@ set(test_system_jpeg [[
4848
endif()
4949
]])
5050

51+
set(suffix_patch [[
52+
--- a/CMakeLists.txt
53+
+++ b/CMakeLists.txt
54+
@@ -189,6 +189,13 @@
55+
report_option(ENABLE_SHARED "Shared libraries")
56+
report_option(ENABLE_STATIC "Static libraries")
57+
58+
+if(NOT MSVC)
59+
+ set(LIBJPEG_SUFFIX "" CACHE STRING "Suffix to be added the library name")
60+
+ report_option(LIBJPEG_SUFFIX "Library name suffix")
61+
+else()
62+
+ set(LIBJPEG_SUFFIX "")
63+
+endif()
64+
+
65+
if(WITH_12BIT)
66+
set(WITH_ARITH_DEC 0)
67+
set(WITH_ARITH_ENC 0)
68+
@@ -566,7 +573,7 @@
69+
add_library(jpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
70+
${SIMD_OBJS})
71+
if(NOT MSVC)
72+
- set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
73+
+ set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg${LIBJPEG_SUFFIX})
74+
endif()
75+
endif()
76+
77+
--- a/release/libjpeg.pc.in
78+
+++ b/release/libjpeg.pc.in
79+
@@ -6,5 +6,5 @@
80+
Name: libjpeg
81+
Description: A SIMD-accelerated JPEG codec that provides the libjpeg API
82+
Version: @VERSION@
83+
-Libs: -L${libdir} -ljpeg
84+
+Libs: -L${libdir} -ljpeg@LIBJPEG_SUFFIX@
85+
Cflags: -I${includedir}
86+
--- a/sharedlib/CMakeLists.txt
87+
+++ b/sharedlib/CMakeLists.txt
88+
@@ -38,6 +38,9 @@
89+
add_library(jpeg SHARED ${JPEG_SRCS} ${DEFFILE} $<TARGET_OBJECTS:simd>
90+
${SIMD_OBJS})
91+
92+
+if(NOT MSVC)
93+
+ set_target_properties(jpeg PROPERTIES OUTPUT_NAME jpeg${LIBJPEG_SUFFIX})
94+
+endif()
95+
set_target_properties(jpeg PROPERTIES SOVERSION ${SO_MAJOR_VERSION}
96+
VERSION ${SO_MAJOR_VERSION}.${SO_AGE}.${SO_MINOR_VERSION})
97+
if(APPLE AND (NOT CMAKE_OSX_DEPLOYMENT_TARGET OR
98+
]])
99+
51100
superbuild_package(
52101
NAME libjpeg-turbo-patches
53102
VERSION ${patch_version}
@@ -64,6 +113,8 @@ superbuild_package(
64113
source:libjpeg-turbo-patches-${patch_version}
65114
host:nasm
66115

116+
SOURCE_WRITE
117+
suffix.patch suffix_patch
67118
SOURCE
68119
DOWNLOAD_NAME libjpeg-turbo_${version}.orig.tar.gz
69120
URL ${base_url}libjpeg-turbo_${version}.orig.tar.gz
@@ -72,6 +123,8 @@ superbuild_package(
72123
"${CMAKE_COMMAND}"
73124
-Dpackage=libjpeg-turbo-patches-${patch_version}
74125
-P "${APPLY_PATCHES_SERIES}"
126+
COMMAND
127+
patch -p1 < suffix.patch
75128

76129
USING USE_SYSTEM_LIBJPEG patch_version
77130
BUILD_CONDITION ${test_system_jpeg}
@@ -82,8 +135,7 @@ superbuild_package(
82135
-DENABLE_SHARED=ON
83136
-DENABLE_STATIC=OFF
84137
$<$<BOOL:@ANDROID@>:
85-
-DENABLE_SHARED=OFF
86-
-DENABLE_STATIC=ON
138+
-DLIBJPEG_SUFFIX=-turbo # needs suffix patch
87139
-DCMAKE_ASM_FLAGS="--target=${SUPERBUILD_TOOLCHAIN_TRIPLET}${ANDROID_NATIVE_API_LEVEL}"
88140
>
89141
INSTALL_COMMAND

libwebp-1.1.0.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ superbuild_package(
5757
VERSION ${patch_version}
5858
DEPENDS
5959
giflib
60-
libjpeg
6160
libpng
6261
zlib
6362

@@ -84,6 +83,7 @@ superbuild_package(
8483
-DWEBP_BUILD_WEBPMUX=OFF
8584
-DWEBP_BUILD_EXTRAS=OFF
8685
-DWEBP_BUILD_WEBP_JS=OFF
86+
-DCMAKE_DISABLE_FIND_PACKAGE_JPEG=ON
8787
-DCMAKE_DISABLE_FIND_PACKAGE_TIFF=ON # Our libtiff depends on libwebp.
8888
INSTALL_COMMAND
8989
"${CMAKE_COMMAND}" --build . --target install/strip/fast

poppler-20.09.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ superbuild_package(
118118
-DCMAKE_DISABLE_FIND_PACKAGE_NSS3=ON
119119
${poppler_font_configuration}
120120
$<$<BOOL:@ANDROID@>:
121+
-DJPEG_NAMES=jpeg-turbo
121122
-D_FILE_OFFSET_BITS=
122123
>
123124
INSTALL_COMMAND

tiff-4.1.0.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ superbuild_package(
107107
# We don't provide all possible sources (yet)
108108
"-Djbig:BOOL=OFF"
109109
"-Dzstd:BOOL=OFF"
110+
$<$<BOOL:@ANDROID@>:
111+
-DJPEG_NAMES=jpeg-turbo
112+
>
110113
# GNUInstallDirs doesn't work with CMAKE_STAGING_PREFIX
111114
-UCMAKE_STAGING_PREFIX
112115
INSTALL_COMMAND

0 commit comments

Comments
 (0)