Задача:Собрать ImageMagick 6.8.8-2 для Android с поддержкой чтения/записи изображений в форматах PNG и JPEG. Получить статические исполняемые файлы, оптимизированные для процессора Cortex-A9 (MT6577T).
Собрать с помощью кросс-компилятора из Android NDK на хосте Linux x86_64. (Ubuntu 12.04).
Решение:1. Скачать и установить
Android NDK. Я установил r9c.
2. Скачать и распаковать исходные коды
ImageMagick,
libjpeg-turbo и
libpng. Распакованные каталоги с исходниками положить в один общий каталог рядом, для удобства.
3. Собрать libjpeg таким скриптом:
читать дальше#!/bin/bash
NDK=/mnt/data/Temp/compressed/zfs/zfs/BUILD/Android-NDK/android-ndk-r9c
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export CFLAGS="-O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp --sysroot=$SYSROOT -s -fPIC -DANDROID -nostdlib -lc -lgcc"
export CPPFLAGS="-O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp --sysroot=$SYSROOT -s -DANDROID -mandroid -lc -lgcc"
#export LDFLAGS="-Wl,-rpath-link=$SYSROOT/usr/lib/ -L$SYSROOT/usr/lib/"
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export PATH=$TOOLCHAIN/bin:$PATH
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
export CROSS_COMPILE=arm-linux-androideabi
export CC=${CROSS_COMPILE}-gcc
export CXX=${CROSS_COMPILE}-g++
export AR=${CROSS_COMPILE}-ar
export AS=${CROSS_COMPILE}-as
export LD=${CROSS_COMPILE}-gcc
export RANLIB=${CROSS_COMPILE}-ranlib
export NM=${CROSS_COMPILE}-nm
export STRIP=${CROSS_COMPILE}-strip
export LIBS="-lc "
./configure \
--prefix=$PREFIX \
--host=arm-linux-eabi \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--disable-largefile \
--enable-relocatable \
--disable-rpath \
read
make clean
make -j 4
make install
4. Собрать libpng таким скриптом:#!/bin/bash
NDK=/mnt/data/Temp/compressed/zfs/zfs/BUILD/Android-NDK/android-ndk-r9c
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export CFLAGS="-O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp --sysroot=$SYSROOT -s -fPIC -DANDROID -nostdlib -lc -lgcc"
export CPPFLAGS="-O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp --sysroot=$SYSROOT -s -DANDROID -mandroid -lc -lgcc"
#export LDFLAGS="-Wl,-rpath-link=$SYSROOT/usr/lib/ -L$SYSROOT/usr/lib/"
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export PATH=$TOOLCHAIN/bin:$PATH
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
export CROSS_COMPILE=arm-linux-androideabi
export CC=${CROSS_COMPILE}-gcc
export CXX=${CROSS_COMPILE}-g++
export AR=${CROSS_COMPILE}-ar
export AS=${CROSS_COMPILE}-as
export LD=${CROSS_COMPILE}-gcc
export RANLIB=${CROSS_COMPILE}-ranlib
export NM=${CROSS_COMPILE}-nm
export STRIP=${CROSS_COMPILE}-strip
export LIBS="-lc "
./configure \
--prefix=$PREFIX \
--host=arm-linux-eabi \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--enable-arm-neon \
read
make clean
make -j 4
make install
5. Собрать ImageMagick таким скриптом:
#!/bin/bash
NDK=/mnt/data/Temp/compressed/zfs/zfs/BUILD/Android-NDK/android-ndk-r9c
SYSROOT=$NDK/platforms/android-9/arch-arm/
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
COPT="-O3 -marm -march=armv7-a -mtune=cortex-a9 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp -s"
export CFLAGS="$COPT --sysroot=$SYSROOT -I../libjpeg-turbo-1.3.0/android/arm/include -I../libpng-1.6.8/android/arm/include"
export CXXFLAGS="$COPT --sysroot=$SYSROOT -I../libjpeg-turbo-1.3.0/android/arm/include -I../libpng-1.6.8/android/arm/include"
export LDFLAGS="-L../libjpeg-turbo-1.3.0/android/arm/lib/ -L../libpng-1.6.8/android/arm/lib/"
#-Wl,-rpath,$FFLIBDIR
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
PATH=$TOOLCHAIN/bin:$PATH
CROSS_COMPILE=arm-linux-androideabi
./configure \
--prefix=$PREFIX \
--program-prefix="" \
--host=arm-linux-androideabi \
--target=arm-linux-androideabi \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--with-gcc-arch=$CPU \
--disable-largefile \
--without-freetype \
--without-fontconfig \
--without-lzma \
--without-pango \
--without-webp --without-wmf --without-dps --without-djvu --without-fftw --without-fpx \
--without-x --without-gslib --without-rsvg \
--without-xml \
--without-magick-plus-plus \
--without-openexr \
#./configure --with-jpeg=yes --with-png=yes --with-xml=$SYSROOT --with-freetype=$SYSROOT --with-tiff --without-fontconfig --without-pango --without-lzma --without-webp --without-wmf --without-dps --without-djvu --without-fftw --without-fpx --with-bzlib --without-x --without-gslib --enable-static=yes --enable-shared=yes LDFLAGS="$LDFLAGS_DEFAULT -lxml2"
read
make clean
make -j 4
make install
Пояснения:
Версии библиотек можно увидеть в скриптах.
Возможно хорошо бы собрать zlib с оптимизацией. Может ускорилось бы кодирование/декодирование PNG.
Конвертация 8Мпикс JPEG в JPEG занимает ~1,5c, в PNG ~21c.
Некоторые параметры конфигурации взяты из
SCRIPTSET, но с его помощью собрать ImageMagick у меня не получилось.
Скажите, а не могли бы Вы скомпилировать и поделиться Imagemagick для Андроид 6+ ? Был бы очень благодарен!