76 lines
3.2 KiB
Python
76 lines
3.2 KiB
Python
|
from pythonforandroid.toolchain import Recipe, shprint, shutil, current_directory
|
||
|
from pythonforandroid.util import ensure_dir
|
||
|
from os.path import exists, join
|
||
|
import sh
|
||
|
|
||
|
|
||
|
class LibZMQRecipe(Recipe):
|
||
|
version = '4.1.4'
|
||
|
url = 'http://download.zeromq.org/zeromq-{version}.tar.gz'
|
||
|
depends = []
|
||
|
|
||
|
def should_build(self, arch):
|
||
|
super(LibZMQRecipe, self).should_build(arch)
|
||
|
return True
|
||
|
return not exists(join(self.ctx.get_libs_dir(arch.arch), 'libzmq.so'))
|
||
|
|
||
|
def build_arch(self, arch):
|
||
|
super(LibZMQRecipe, self).build_arch(arch)
|
||
|
env = self.get_recipe_env(arch)
|
||
|
#
|
||
|
# libsodium_recipe = Recipe.get_recipe('libsodium', self.ctx)
|
||
|
# libsodium_dir = libsodium_recipe.get_build_dir(arch.arch)
|
||
|
# env['sodium_CFLAGS'] = '-I{}'.format(join(
|
||
|
# libsodium_dir, 'src'))
|
||
|
# env['sodium_LDLAGS'] = '-L{}'.format(join(
|
||
|
# libsodium_dir, 'src', 'libsodium', '.libs'))
|
||
|
|
||
|
curdir = self.get_build_dir(arch.arch)
|
||
|
prefix = join(curdir, "install")
|
||
|
with current_directory(curdir):
|
||
|
bash = sh.Command('sh')
|
||
|
shprint(
|
||
|
bash, './configure',
|
||
|
'--host=arm-linux-androideabi',
|
||
|
'--without-documentation',
|
||
|
'--prefix={}'.format(prefix),
|
||
|
'--with-libsodium=no',
|
||
|
_env=env)
|
||
|
shprint(sh.make, _env=env)
|
||
|
shprint(sh.make, 'install', _env=env)
|
||
|
shutil.copyfile('.libs/libzmq.so', join(
|
||
|
self.ctx.get_libs_dir(arch.arch), 'libzmq.so'))
|
||
|
|
||
|
bootstrap_obj_dir = join(self.ctx.bootstrap.build_dir, 'obj', 'local', arch.arch)
|
||
|
ensure_dir(bootstrap_obj_dir)
|
||
|
shutil.copyfile(
|
||
|
'{}/sources/cxx-stl/gnu-libstdc++/{}/libs/{}/libgnustl_shared.so'.format(
|
||
|
self.ctx.ndk_dir, self.ctx.toolchain_version, arch),
|
||
|
join(bootstrap_obj_dir, 'libgnustl_shared.so'))
|
||
|
|
||
|
# Copy libgnustl_shared.so
|
||
|
with current_directory(self.get_build_dir(arch.arch)):
|
||
|
sh.cp(
|
||
|
"{ctx.ndk_dir}/sources/cxx-stl/gnu-libstdc++/{ctx.toolchain_version}/libs/{arch.arch}/libgnustl_shared.so".format(ctx=self.ctx, arch=arch),
|
||
|
self.ctx.get_libs_dir(arch.arch)
|
||
|
)
|
||
|
|
||
|
def get_recipe_env(self, arch):
|
||
|
# XXX should stl be configuration for the toolchain itself?
|
||
|
env = super(LibZMQRecipe, self).get_recipe_env(arch)
|
||
|
env['CFLAGS'] += ' -Os'
|
||
|
env['CXXFLAGS'] += ' -Os -fPIC -fvisibility=default'
|
||
|
env['CXXFLAGS'] += ' -I{}/sources/cxx-stl/gnu-libstdc++/{}/include'.format(
|
||
|
self.ctx.ndk_dir, self.ctx.toolchain_version)
|
||
|
env['CXXFLAGS'] += ' -I{}/sources/cxx-stl/gnu-libstdc++/{}/libs/{}/include'.format(
|
||
|
self.ctx.ndk_dir, self.ctx.toolchain_version, arch)
|
||
|
env['CXXFLAGS'] += ' -L{}/sources/cxx-stl/gnu-libstdc++/{}/libs/{}'.format(
|
||
|
self.ctx.ndk_dir, self.ctx.toolchain_version, arch)
|
||
|
env['CXXFLAGS'] += ' -lgnustl_shared'
|
||
|
env['LDFLAGS'] += ' -L{}/sources/cxx-stl/gnu-libstdc++/{}/libs/{}'.format(
|
||
|
self.ctx.ndk_dir, self.ctx.toolchain_version, arch)
|
||
|
return env
|
||
|
|
||
|
|
||
|
recipe = LibZMQRecipe()
|