Skip to content

Commit

Permalink
Merge pull request #3015 from T-Dynamos/uvloop
Browse files Browse the repository at this point in the history
recipes: add new `uvloop` recipe
  • Loading branch information
AndreMiras authored May 22, 2024
2 parents 344fd34 + 1461b61 commit 9e467a5
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 0 deletions.
51 changes: 51 additions & 0 deletions pythonforandroid/recipes/libpthread/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
from os import makedirs, remove
from os.path import exists, join
import sh

from pythonforandroid.recipe import Recipe
from pythonforandroid.logger import shprint


class LibPthread(Recipe):
'''
This is a dumb recipe. We may need this because some recipes inserted some
flags `-lpthread` without our control, case of:
- :class:`~pythonforandroid.recipes.uvloop.UvloopRecipe`
.. note:: the libpthread doesn't exist in android but it is integrated into
libc, so we create a symbolic link which we will remove when our build
finishes'''

def build_arch(self, arch):
libc_path = join(arch.ndk_lib_dir_versioned, 'libc')
# Create a temporary folder to add to link path with a fake libpthread.so:
fake_libpthread_temp_folder = join(
self.get_build_dir(arch.arch),
"p4a-libpthread-recipe-tempdir"
)
if not exists(fake_libpthread_temp_folder):
makedirs(fake_libpthread_temp_folder)

# Set symlinks, and make sure to update them on every build run:
if exists(join(fake_libpthread_temp_folder, "libpthread.so")):
remove(join(fake_libpthread_temp_folder, "libpthread.so"))
shprint(sh.ln, '-sf',
libc_path + '.so',
join(fake_libpthread_temp_folder, "libpthread.so"),
)
if exists(join(fake_libpthread_temp_folder, "libpthread.a")):
remove(join(fake_libpthread_temp_folder, "libpthread.a"))
shprint(sh.ln, '-sf',
libc_path + '.a',
join(fake_libpthread_temp_folder, "libpthread.a"),
)

# Add folder as -L link option for all recipes if not done yet:
if fake_libpthread_temp_folder not in arch.extra_global_link_paths:
arch.extra_global_link_paths.append(
fake_libpthread_temp_folder
)


recipe = LibPthread()
16 changes: 16 additions & 0 deletions pythonforandroid/recipes/uvloop/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from pythonforandroid.recipe import PyProjectRecipe


class UvloopRecipe(PyProjectRecipe):
version = 'v0.19.0'
url = 'git+https://github.com/MagicStack/uvloop'
depends = ['librt', 'libpthread']

def get_recipe_env(self, arch, **kwargs):
env = super().get_recipe_env(arch, **kwargs)
env["LIBUV_CONFIGURE_HOST"] = arch.command_prefix
env["PLATFORM"] = "android"
return env


recipe = UvloopRecipe()

0 comments on commit 9e467a5

Please sign in to comment.