[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] [pyqtdeploy] Qt Android Extras
From:       Sébastien RAMAGE <sramage () poifindus ! com>
Date:       2015-08-10 12:41:12
Message-ID: 55C89BE8.5000605 () poifindus ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


The following is based on kivy/python-for-android
So currently on Android pyjnius needs sdl so we need to compile sdl first

sdl source can be found here
https://github.com/kivy/python-for-android/tree/master/src/jni/

this is what python-for-android do for sdl :

push_arm <== initialize environment , define in distribute.sh
try ndk-build V=1 <== build
pop_arm <== leave environment
try cp -a $SRC_PATH/libs/$ARCH/*.so $LIBS_PATH

next for pyjnius :

push_arm <== initialize environment , define in distribute.sh

     export LDFLAGS="$LDFLAGS -L$LIBS_PATH"
     export LDSHARED="$LIBLINK"

     # fake try to be able to cythonize generated files
     $HOSTPYTHON setup.py build_ext   <=$HOSTPYTHON seems to be a local 
python binary compiled just before
     try find . -iname '*.pyx' -exec $CYTHON {} \;  <= $CYTHON is a 
system wide installed cython
     try $HOSTPYTHON setup.py build_ext -v
     try find build/lib.* -name "*.o" -exec $STRIP {} \;
     try $HOSTPYTHON setup.py install -O2
     try cp -a jnius/src/org $JAVACLASS_PATH

     unset LDSHARED
     pop_arm


detail of push_arm :

function push_arm() {
     info "Entering in ARM environment"

     # save for pop
     export OLD_PATH=$PATH
     export OLD_CFLAGS=$CFLAGS
     export OLD_CXXFLAGS=$CXXFLAGS
     export OLD_LDFLAGS=$LDFLAGS
     export OLD_CC=$CC
     export OLD_CXX=$CXX
     export OLD_AR=$AR
     export OLD_RANLIB=$RANLIB
     export OLD_STRIP=$STRIP
     export OLD_MAKE=$MAKE
     export OLD_LD=$LD

     # to override the default optimization, set OFLAG
     #export OFLAG="-Os"
     #export OFLAG="-O2"

     export CFLAGS="-DANDROID -mandroid $OFLAG -fomit-frame-pointer 
--sysroot $NDKPLATFORM"
     if [ "X$ARCH" == "Xarmeabi-v7a" ]; then
         CFLAGS+=" -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb"
     fi
     export CXXFLAGS="$CFLAGS"

     # that could be done only for darwin platform, but it doesn't hurt.
     export LDFLAGS="-lm"

     # this must be something depending of the API level of Android
     PYPLATFORM=$($PYTHON -c 'from __future__ import print_function; 
import sys; print(sys.platform)')
     if [ "$PYPLATFORM" == "linux2" ]; then
         PYPLATFORM="linux"
     elif [ "$PYPLATFORM" == "linux3" ]; then
         PYPLATFORM="linux"
     fi

     if [ "X$ANDROIDNDKVER" == "Xr5b" ]; then
         export TOOLCHAIN_PREFIX=arm-eabi
         export TOOLCHAIN_VERSION=4.4.0
     elif [ "X${ANDROIDNDKVER:0:2}" == "Xr7" ] || [ 
"X${ANDROIDNDKVER:0:2}" == "Xr8" ]; then
         export TOOLCHAIN_PREFIX=arm-linux-androideabi
         export TOOLCHAIN_VERSION=4.4.3
     elif  [ "X${ANDROIDNDKVER:0:2}" == "Xr9" ]; then
         export TOOLCHAIN_PREFIX=arm-linux-androideabi
         export TOOLCHAIN_VERSION=4.8
     elif [ "X${ANDROIDNDKVER:0:3}" == "Xr10" ]; then
         export TOOLCHAIN_PREFIX=arm-linux-androideabi
         export TOOLCHAIN_VERSION=4.9
     else
         echo "Error: Please report issue to enable support for newer ndk."
         exit 1
     fi

     export 
PATH="$ANDROIDNDK/toolchains/$TOOLCHAIN_PREFIX-$TOOLCHAIN_VERSION/prebuilt/$PYPLATFORM \
-x86/bin/:$ANDROIDNDK/toolchains/$TOOLCHAIN_PREFIX-$TOOLCHAIN_VERSION/prebuilt/$PYPLATFORM-x86_64/bin/:$ANDROIDNDK:$ANDROIDSDK/tools:$PATH"


     # search compiler in the path, to fail now instead of later.
     CC=$(which $TOOLCHAIN_PREFIX-gcc)
     if [ "X$CC" == "X" ]; then
         error "Unable to find compiler ($TOOLCHAIN_PREFIX-gcc) !!"
         error "1. Ensure that SDK/NDK paths are correct"
         error "2. Ensure that you've the Android API $ANDROIDAPI SDK 
Platform (via android tool)"
         exit 1
     else
         debug "Compiler found at $CC"
     fi

     export CC="$TOOLCHAIN_PREFIX-gcc $CFLAGS"
     export CXX="$TOOLCHAIN_PREFIX-g++ $CXXFLAGS"
     export AR="$TOOLCHAIN_PREFIX-ar"
     export RANLIB="$TOOLCHAIN_PREFIX-ranlib"
     export LD="$TOOLCHAIN_PREFIX-ld"
     export STRIP="$TOOLCHAIN_PREFIX-strip --strip-unneeded"
     export MAKE="make -j5"
     export READELF="$TOOLCHAIN_PREFIX-readelf"

     # This will need to be updated to support Python versions other 
than 2.7
     export BUILDLIB_PATH="$BUILD_hostpython/build/lib.linux-`uname 
-m`-2.7/"

     # Use ccache ?
     which ccache &>/dev/null
     if [ $? -eq 0 ]; then
         export CC="ccache $CC"
         export CXX="ccache $CXX"
     fi
}

*
*
Le 10/08/2015 10:49, Phil Thompson a écrit :
> On 10/08/2015 8:37 am, Sébastien RAMAGE wrote:
> > So having pyjnius could be awesome and this fork of pyjnius seems to
> > python3.4 compatible ^^
> > https://github.com/physion/pyjnius
> > 
> > I really want to help, but I don't know how I can try to compile it ? 
> > Any tips ?
> 
> If you can identify what steps need to be taken, rather than the 
> details of how to actually do it, for example...
> 
> The Cython source file that needs converting to C.
> The C files (generated or otherwise) that need compiling.
> Any .py files that need including.
> Any additional include directories that need to be searched.
> Any additional libraries that need to be linked.
> 
> I can then see how to add general support for Cython extensions to 
> pyqtdeploy.
> 
> Phil
> _______________________________________________
> PyQt mailing list    PyQt@riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt


[Attachment #5 (text/html)]

<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    The following is based on kivy/python-for-android<br>
    So currently on Android pyjnius needs sdl so we need to compile sdl
    first<br>
    <br>
    sdl source can be found here<br>
    <a class="moz-txt-link-freetext" \
href="https://github.com/kivy/python-for-android/tree/master/src/jni/">https://github.com/kivy/python-for-android/tree/master/src/jni/</a><br>
  <br>
    this is what python-for-android do for sdl :<br>
    <br>
    push_arm &lt;== initialize environment , define in distribute.sh<br>
    try ndk-build V=1 &lt;== build<br>
    pop_arm &lt;== leave environment <br>
    try cp -a $SRC_PATH/libs/$ARCH/*.so $LIBS_PATH <br>
    <br>
    next for pyjnius :<br>
    <br>
    push_arm &lt;== initialize environment , define in distribute.sh<br>
    <br>
        export LDFLAGS="$LDFLAGS -L$LIBS_PATH"<br>
        export LDSHARED="$LIBLINK"<br>
    <br>
        # fake try to be able to cythonize generated files<br>
        $HOSTPYTHON setup.py build_ext   &lt;=$HOSTPYTHON seems to be a
    local python binary compiled just before<br>
        try find . -iname '*.pyx' -exec $CYTHON {} \;  &lt;= $CYTHON is
    a system wide installed cython<br>
        try $HOSTPYTHON setup.py build_ext -v<br>
        try find build/lib.* -name "*.o" -exec $STRIP {} \;<br>
        try $HOSTPYTHON setup.py install -O2<br>
        try cp -a jnius/src/org $JAVACLASS_PATH<br>
    <br>
        unset LDSHARED<br>
        pop_arm<br>
    <br>
    <br>
    detail of push_arm :<br>
    <br>
    function push_arm() {<br>
        info "Entering in ARM environment"<br>
    <br>
        # save for pop<br>
        export OLD_PATH=$PATH<br>
        export OLD_CFLAGS=$CFLAGS<br>
        export OLD_CXXFLAGS=$CXXFLAGS<br>
        export OLD_LDFLAGS=$LDFLAGS<br>
        export OLD_CC=$CC<br>
        export OLD_CXX=$CXX<br>
        export OLD_AR=$AR<br>
        export OLD_RANLIB=$RANLIB<br>
        export OLD_STRIP=$STRIP<br>
        export OLD_MAKE=$MAKE<br>
        export OLD_LD=$LD<br>
    <br>
        # to override the default optimization, set OFLAG<br>
        #export OFLAG="-Os"<br>
        #export OFLAG="-O2"<br>
    <br>
        export CFLAGS="-DANDROID -mandroid $OFLAG -fomit-frame-pointer
    --sysroot $NDKPLATFORM"<br>
        if [ "X$ARCH" == "Xarmeabi-v7a" ]; then<br>
            CFLAGS+=" -march=armv7-a -mfloat-abi=softfp -mfpu=vfp
    -mthumb"<br>
        fi<br>
        export CXXFLAGS="$CFLAGS"<br>
    <br>
        # that could be done only for darwin platform, but it doesn't
    hurt.<br>
        export LDFLAGS="-lm"<br>
    <br>
        # this must be something depending of the API level of Android<br>
        PYPLATFORM=$($PYTHON -c 'from __future__ import print_function;
    import sys; print(sys.platform)')<br>
        if [ "$PYPLATFORM" == "linux2" ]; then<br>
            PYPLATFORM="linux"<br>
        elif [ "$PYPLATFORM" == "linux3" ]; then<br>
            PYPLATFORM="linux"<br>
        fi<br>
    <br>
        if [ "X$ANDROIDNDKVER" == "Xr5b" ]; then<br>
            export TOOLCHAIN_PREFIX=arm-eabi<br>
            export TOOLCHAIN_VERSION=4.4.0<br>
        elif [ "X${ANDROIDNDKVER:0:2}" == "Xr7" ] || [
    "X${ANDROIDNDKVER:0:2}" == "Xr8" ]; then<br>
            export TOOLCHAIN_PREFIX=arm-linux-androideabi<br>
            export TOOLCHAIN_VERSION=4.4.3<br>
        elif  [ "X${ANDROIDNDKVER:0:2}" == "Xr9" ]; then<br>
            export TOOLCHAIN_PREFIX=arm-linux-androideabi<br>
            export TOOLCHAIN_VERSION=4.8<br>
        elif [ "X${ANDROIDNDKVER:0:3}" == "Xr10" ]; then<br>
            export TOOLCHAIN_PREFIX=arm-linux-androideabi<br>
            export TOOLCHAIN_VERSION=4.9<br>
        else<br>
            echo "Error: Please report issue to enable support for newer
    ndk."<br>
            exit 1<br>
        fi<br>
    <br>
        export
PATH="$ANDROIDNDK/toolchains/$TOOLCHAIN_PREFIX-$TOOLCHAIN_VERSION/prebuilt/$PYPLATFORM \
-x86/bin/:$ANDROIDNDK/toolchains/$TOOLCHAIN_PREFIX-$TOOLCHAIN_VERSION/prebuilt/$PYPLATFORM-x86_64/bin/:$ANDROIDNDK:$ANDROIDSDK/tools:$PATH"<br>
  <br>
        # search compiler in the path, to fail now instead of later.<br>
        CC=$(which $TOOLCHAIN_PREFIX-gcc)<br>
        if [ "X$CC" == "X" ]; then<br>
            error "Unable to find compiler ($TOOLCHAIN_PREFIX-gcc) !!"<br>
            error "1. Ensure that SDK/NDK paths are correct"<br>
            error "2. Ensure that you've the Android API $ANDROIDAPI SDK
    Platform (via android tool)"<br>
            exit 1<br>
        else<br>
            debug "Compiler found at $CC"<br>
        fi<br>
    <br>
        export CC="$TOOLCHAIN_PREFIX-gcc $CFLAGS"<br>
        export CXX="$TOOLCHAIN_PREFIX-g++ $CXXFLAGS"<br>
        export AR="$TOOLCHAIN_PREFIX-ar" <br>
        export RANLIB="$TOOLCHAIN_PREFIX-ranlib"<br>
        export LD="$TOOLCHAIN_PREFIX-ld"<br>
        export STRIP="$TOOLCHAIN_PREFIX-strip --strip-unneeded"<br>
        export MAKE="make -j5"<br>
        export READELF="$TOOLCHAIN_PREFIX-readelf"<br>
    <br>
        # This will need to be updated to support Python versions other
    than 2.7<br>
        export BUILDLIB_PATH="$BUILD_hostpython/build/lib.linux-`uname
    -m`-2.7/"<br>
    <br>
        # Use ccache ?<br>
        which ccache &amp;&gt;/dev/null<br>
        if [ $? -eq 0 ]; then<br>
            export CC="ccache $CC"<br>
            export CXX="ccache $CXX"<br>
        fi<br>
    }<br>
    <br>
    <div class="moz-signature"><small><b> <br>
        </b> </small></div>
    <div class="moz-cite-prefix">Le 10/08/2015 10:49, Phil Thompson a
      écrit :<br>
    </div>
    <blockquote
      cite="mid:e1bfb55c849d6035dfe45012ca1e1467@riverbankcomputing.com"
      type="cite">On 10/08/2015 8:37 am, Sébastien RAMAGE wrote:
      <br>
      <blockquote type="cite">So having pyjnius could be awesome and
        this fork of pyjnius seems to
        <br>
        python3.4 compatible ^^
        <br>
        <a class="moz-txt-link-freetext" \
href="https://github.com/physion/pyjnius">https://github.com/physion/pyjnius</a>  \
<br>  <br>
        I really want to help, but I don't know how I can try to compile
        it ? Any tips ?
        <br>
      </blockquote>
      <br>
      If you can identify what steps need to be taken, rather than the
      details of how to actually do it, for example...
      <br>
      <br>
      The Cython source file that needs converting to C.
      <br>
      The C files (generated or otherwise) that need compiling.
      <br>
      Any .py files that need including.
      <br>
      Any additional include directories that need to be searched.
      <br>
      Any additional libraries that need to be linked.
      <br>
      <br>
      I can then see how to add general support for Cython extensions to
      pyqtdeploy.
      <br>
      <br>
      Phil
      <br>
      _______________________________________________
      <br>
      PyQt mailing list    <a class="moz-txt-link-abbreviated" \
href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a>  <br>
      <a class="moz-txt-link-freetext" \
href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><br>
  </blockquote>
    <br>
  </body>
</html>


[Attachment #6 (text/plain)]

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic