lbry-android-sdk/p4a/pythonforandroid/recipes/jpeg/__init__.py

79 lines
3 KiB
Python
Raw Normal View History

from pythonforandroid.recipe import Recipe
2017-08-13 03:24:00 +02:00
from pythonforandroid.logger import shprint
from pythonforandroid.util import current_directory
from os.path import join, exists
from os import environ, uname
from glob import glob
2017-08-13 03:24:00 +02:00
import sh
class JpegRecipe(Recipe):
'''
.. versionchanged:: 0.6.0
rewrote recipe to be build with clang and updated libraries to latest
version of the official git repo.
'''
name = 'jpeg'
version = '2.0.1'
url = 'https://github.com/libjpeg-turbo/libjpeg-turbo/archive/{version}.tar.gz' # noqa
# we will require this below patch to build the shared library
# patches = ['remove-version.patch']
2017-08-13 03:24:00 +02:00
def should_build(self, arch):
return not exists(join(self.get_build_dir(arch.arch),
'libturbojpeg.a'))
2017-08-13 03:24:00 +02:00
def build_arch(self, arch):
super(JpegRecipe, self).build_arch(arch)
build_dir = self.get_build_dir(arch.arch)
2017-08-13 03:24:00 +02:00
# TODO: Fix simd/neon
with current_directory(build_dir):
env = self.get_recipe_env(arch)
toolchain_file = join(self.ctx.ndk_dir,
'build/cmake/android.toolchain.cmake')
2017-08-13 03:24:00 +02:00
shprint(sh.rm, '-f', 'CMakeCache.txt', 'CMakeFiles/')
shprint(sh.cmake, '-G', 'Unix Makefiles',
'-DCMAKE_SYSTEM_NAME=Android',
'-DCMAKE_SYSTEM_PROCESSOR={cpu}'.format(cpu='arm'),
'-DCMAKE_POSITION_INDEPENDENT_CODE=1',
'-DCMAKE_ANDROID_ARCH_ABI={arch}'.format(arch=arch.arch),
'-DCMAKE_ANDROID_NDK=' + self.ctx.ndk_dir,
'-DCMAKE_C_COMPILER={toolchain}/bin/clang'.format(
toolchain=env['TOOLCHAIN']),
'-DCMAKE_CXX_COMPILER={toolchain}/bin/clang++'.format(
toolchain=env['TOOLCHAIN']),
'-DCMAKE_BUILD_TYPE=Release',
'-DCMAKE_INSTALL_PREFIX=./install',
'-DCMAKE_TOOLCHAIN_FILE=' + toolchain_file,
2017-08-13 03:24:00 +02:00
'-DANDROID_ABI={arch}'.format(arch=arch.arch),
'-DANDROID_ARM_NEON=ON',
'-DENABLE_NEON=ON',
# '-DREQUIRE_SIMD=1',
# Force disable shared, with the static ones is enough
'-DENABLE_SHARED=0',
'-DENABLE_STATIC=1',
_env=env)
shprint(sh.make, _env=env)
# copy static libs to libs collection
for lib in glob(join(build_dir, '*.a')):
shprint(sh.cp, '-L', lib, self.ctx.libs_dir)
def get_recipe_env(self, arch=None, with_flags_in_cc=False, clang=True):
env = environ.copy()
build_platform = '{system}-{machine}'.format(
system=uname()[0], machine=uname()[-1]).lower()
env['TOOLCHAIN'] = join(self.ctx.ndk_dir, 'toolchains/llvm/'
'prebuilt/{build_platform}'.format(
build_platform=build_platform))
return env
2017-08-13 03:24:00 +02:00
recipe = JpegRecipe()