Skip to content

Instantly share code, notes, and snippets.

@mattli001
Forked from verybada/x64 python
Created March 5, 2018 06:33
Show Gist options
  • Save mattli001/674c9b8c13208fa139becd5d6e776b76 to your computer and use it in GitHub Desktop.
Save mattli001/674c9b8c13208fa139becd5d6e776b76 to your computer and use it in GitHub Desktop.
CC-2193, x64 toolchain
# CC-2193, x64 toolchain
# TODO
1. shall we still need to support x86_es
2. Why there is still .pyc in python-lib
# Prepare necessary libraries
* There is no third-party libraries in x64 toolchain (libssl, libcrypto ...)
1. Build x64 library first
```
> @NasX86/Model/TS-X51
make QOS4=yes BUILD_OPT=pure BASE KERNEL COMLIB NAS_PRELIBRARY SYS_LIBRARY NAS_LIBRARY INSTALL_NAS_LIBRARY 2>&1 | tee build.log
```
2. Pickup libraries which get lost
* Actually, build results should be put in **NasX86/LinkFS** not **NasX86/Model/XXX/build/Rootfs**, but some module not follow build rule well we need to pickup those libraries manually.
```
> @NasX86/Model/TS-X51
cp -a build/RootFS/lib/libqsync.so* ../../LinkFS/lib
cp -a build/RootFS/lib/libgeneral.so* ../../LinkFS/lib
```
3. make a tarball
```
> @NasX86/LinkFS
tar -jcvf x86_64_ref.tar.bz2 lib include
```
4. Put tarball to buildserver
```
scp x86_64_ref.tar.bz2 anry@192.168.68.231:/home/anry/working
```
5. Decorate buildserver
```
ssh anry@192.168.68.231
mkdir -p /home/anry/working/x86_64_ref
tar -xvf /home/anry/working/x86_64_ref.tar.bz2 -C /home/anry/working/reference/x86_64/
```
# Python runtime
Start x86_64 image
```
ssh anry@192.168.68.231
cd deploy_wrapper/
./container_setup.sh x86_64
```
Generate host component
```
./configure
make python Parser/pgen
mv python hostpython; mv Parser/pgen Parser/hostpgen
make distclean
```
Add patch
```
patch -p1 < xxxx.patch
```
Set env
* Python uses CPPFLAGS as its include path not CFLAGS
```
export ARCH=x86_64
export REFERENCE_ROOT=/root/reference/$ARCH
export PATH=/root/CT/x86_64-QNAP-linux-gnu/cross-tools/bin/:$PATH
export CROSS_PREFIX="x86_64-QNAP-linux-gnu"
export CROSS_COMPILE="${CROSS_PREFIX}-"
export CC="${CROSS_COMPILE}gcc"
export CXX="${CROSS_COMPILE}g++"
export NM=${CROSS_COMPILE}nm
export LD=${CROSS_COMPILE}ld
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip
export LDFLAGS="-L/root/CT/x86_64-QNAP-linux-gnu/fs/lib -L$REFERENCE_ROOT/lib"
export CPPFLAGS="-I/root/CT/x86_64-QNAP-linux-gnu/fs/include -I$REFERENCE_ROOT/include -I$REFERENCE_ROOT/include/ncurses"
export LIBS="-lssl -lcrypto"
export ac_cv_file__dev_ptmx=no
export ac_cv_file__dev_ptc=no
export ac_cv_buggy_getaddrinfo=no
```
make
```
make distclean
./configure --prefix=$PWD/out/$ARCH \
--build=`uname -m`-linux-gnu \
--host=$CROSS_PREFIX \
--disable-ipv6 \
--with-system-expat \
--without-pymalloc
make BLDSHARED="${CC} -shared" CROSS_COMPILE=${CROSS_COMPILE} CROSS_COMPILE_TARGET=yes HOSTARCH=${CROSS_PREFIX} BUILDARCH=${CROSS_PREFIX}
make install BLDSHARED="${CC} -share" CROSS_COMPILE=${CROSS_COMPILE} CROSS_COMPILE_TARGET=yes HOSTARCH=${CROSS_PREFIX} BUILDARCH=${CROSS_PREFIX}
```
# python lib
### googleapi
* import setuptools error
# Troubleshooting
### Lose modules
We don't need these modules
```
_bsddb _tkinter bsddb185 dbm gdbm imageop linuxaudiodev ossaudiodev sunaudiodev
```
### error: '__PTHREAD_SPINS' undeclared here (not in a function)
link wrong pthreadtypes.h
There is a pthreadtypes.h in /usr/local/x86_64-linux-gnu/ and python's setup.py will add this path to CPPFLAGS automatically.

CC-2193, x64 toolchain

TODO

  1. poring python-runtime patch to 2.7.10
  2. ask anry should we still need to maintain x86_es

Prepare necessary libraries

  • Parameter OPENSSL_VER had been written in makefile

  • There is no third-party libraries in x64 toolchain (libssl, libcrypto ...)

    1. Build x64 library first
     > @NasX86/Model/TS-X51
     make QOS4=yes BUILD_OPT=pure BASE KERNEL COMLIB NAS_PRELIBRARY SYS_LIBRARY NAS_LIBRARY INSTALL_NAS_LIBRARY 2>&1 | tee build.log
    
    1. Pickup libraries which get lost
      • Actually, build results should be put in NasX86/LinkFS not NasX86/Model/XXX/build/Rootfs, but some module not follow build rule well we need to pickup those libraries manually.
     > @NasX86/Model/TS-X51
     cp -a build/RootFS/lib/libqsync.so* ../../LinkFS/lib
     cp -a build/RootFS/lib/libgeneral.so* ../../LinkFS/lib
    
    1. make a tarball
     > @NasX86/LinkFS
     tar -jcvf x86_64_ref.tar.bz2 lib include
    
    1. Put tarball to buildserver
     scp x86_64_ref.tar.bz2 anry@192.168.68.231:/home/anry/working
    
    1. Decorate buildserver
     ssh anry@192.168.68.231
     mkdir -p /home/anry/working/x86_64_ref
     tar -xvf /home/anry/working/x86_64_ref.tar.bz2 -C /home/anry/working/x86_64_ref/
    

Python runtime

Start x86_64 image

ssh anry@192.168.68.231
cd deploy_wrapper/
./container_setup.sh x86_64

Generate host component

./configure
make python Parser/pgen
mv python hostpython
mv Parser/pgen Parser/hostpgen
make distclean

Add patch

patch -pX < xxxx.patch

Set env

  • Python uses CPPFLAGS as its include path not CFLAGS
export PATH=$PATH:/root/CT/x86_64-QNAP-linux-gnu/cross-tools/bin/
export CROSS_PREFIX="x86_64-QNAP-linux-gnu"
export CROSS_COMPILE="${CROSS_PREFIX}-"
export CC="${CROSS_COMPILE}gcc"
export CXX="${CROSS_COMPILE}g++"
export NM=${CROSS_COMPILE}nm
export LD=${CROSS_COMPILE}ld
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip
export LDFLAGS="-L/root/CT/x86_64-QNAP-linux-gnu/fs/lib -L/root/x86_64_ref/lib"
export CPPFLAGS="-I/root/CT/x86_64-QNAP-linux-gnu/fs/include -I/root/x86_64_ref/include -I/root/x86_64_ref/include/ncurses"
export LIBS="-lssl -lcrypto"
export ac_cv_file__dev_ptmx=no
export ac_cv_file__dev_ptc=no
export ac_cv_buggy_getaddrinfo=no

make

make distclean
./configure --prefix=/root/python-build/x86_64 \
        --build=x86_64-linux-gnu \
        --host=${CROSS_PREFIX} \
        --disable-ipv6 \
        --with-system-expat \
        --without-pymalloc
        
make BLDSHARED="${CC} -shared" CROSS_COMPILE=${CROSS_COMPILE} CROSS_COMPILE_TARGET=yes HOSTARCH=${CROSS_PREFIX} BUILDARCH=${CROSS_PREFIX}

make install BLDSHARED="${CC} -share" CROSS_COMPILE=${CROSS_COMPILE} CROSS_COMPILE_TARGET=yes HOSTARCH=${CROSS_PREFIX} BUILDARCH=${CROSS_PREFIX}

CGI

googleapi

  • import setuptools error

Troubleshooting

Lose modules

We don't need these modules

_bsddb _tkinter bsddb185 dbm gdbm imageop linuxaudiodev ossaudiodev sunaudiodev
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment