2017-08-03 7 views
0

私はCythonを使用して、私が持っているいくつかのPythonモジュールのコンパイル済み.soファイルを生成しています。python distutilsを使って、拡張モジュールを別のアーキテクチャにクロスコンパイルするにはどうすればよいですか?

from distutils.core import setup 
from Cython.Build import cythonize 

setup(
    ext_modules = cythonize([ 
     'MyModule1.py', 
     'MyModule2.py', 
     'MyModule3.py' 
    ]) 
) 

をしてから、コマンドpython3 setup.py build_ext --inplaceを使用してモジュールをビルド:outlined in the Cython documentationとして、あなたは次のようにsetup.pyファイルを作成することができます。

これは問題なく動作しますが、ホストマシンのアーキテクチャー(私の場合はx86_64)と一致するバイナリーを作成します。私はクロスコンパイルと環境がすでに持っている別のアーキテクチャ(armv7l)を対象にしたいと思います。それはpythonのdistutilsで行うことは可能ですか?延長上extra_compile_args経由代替marchと関連するフラグで

+1

私はあなたの最善の策はエミュレートされたアーキテクチャで仮想マシンを実行し、そこにすべてのツールをネイティブで利用できるようにすることだと思います。 – phd

答えて

1

パス:

sources = ['MyModule1.py', 
      'MyModule2.py', 
      'MyModule3.py'] 

ext_modules=cythonize(sources, 
         extra_compile_args=['-march=armv7l'], 
         library_dirs=[<arm v7 libraries>], 
         include_path=[<arm v7 includes>]) 

がarmv7l作業用ビルドツールチェーンが必要です。

armv7lベースのlinux用のDockerコンテナはおそらく使いやすく、アーム構築を自動化します。

と同様に、ドッカーコンテナビルドをスクリプトで実行し、必要なすべてのアーキテクチャとOS用のネイティブパッケージを生成することができます。

関連する問題