Pages

April 18, 2011

VS2010でboostを扱う準備

研究室配属されて、スクリプト言語ばかり使っていた生活も変わるだろうとDreamSparkからVS2010を拝借した。
で、巷で話題のboostをVS2010で使えるようにした。(boostすげぇーってしか分かってないw
それとVSがうまくインスコされていないのか各PATHを手動で通している。

準備:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.batの修正
最初の行に
@SET VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 10.0
@SET VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 10.0\VC
@SET FrameworkDir32=C:\Windows\Microsoft.NET\Framework
@SET FrameworkVersion32=v4.0.30319
@SET Framework35Version=v3.5
を追加

:: @call :GetVSCommonToolsDir
:: @if "%VS100COMNTOOLS%"=="" goto error_no_VS100COMNTOOLSDIR
:: @call "%VS100COMNTOOLS%VCVarsQueryRegistry.bat" 32bit No64bit
該当部分をコメントにする。
※当環境ではこのようになったが各自インスコ場所とVer.は確認しておくこと。

PATHに
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
C:\Program Files\Microsoft Visual Studio 10.0\VC\include
を追加

INCLUDEに
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include
C:\Program Files\Microsoft Visual Studio 10.0\VC\include
を追加

LIBに
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib
C:\Program Files\Microsoft Visual Studio 10.0\VC\lib
を追加

ビルド:
Visual Studio コマンドプロンプトからboostrap.batのあるディレクトリに移動して
bootstrapを実行。
>bootstrap
bjam.exeが生成されると思う。
できなかったら、「boost\tools\build\bjam.log」あたりをチェックしてみるといいかもしれない。

bjamからboostのコンパイル
>bjam toolset=msvc-10.0 variant=debug,release threading=multi link=static
スペックが糞なせいかだいぶビルドに時間かかった。

VS2010の設定:
プロジェクトを読み込んだら
「Microsoft.Cpp.Win32.user」をダブルクリック、Includeディレクトリをクリックしboostディレクトリを追加。
Libraryディレクトリをクリックし、ビルドされた「stage/lib」を追加。

以上で終了です。
VS側の設定はまだビルドが終わってないので試してないけど、たぶん大丈夫でしょうw


参考:
VS2010 command prompt gives error : Cannot determine the location of the VS Common Tools folder.
MS C++ 2010 and mspdb100.dll
Compiling and configuring Boost C++ libraries for Visual Studio 2010

April 06, 2011

PythonモジュールをSL4A向けにビルドしてみた

SL4AのVer.が上がってAPIも結構数サポートされて驚いていたのだが、それよりうれしいとおもったのがPythonのCモジュールのビルド方法が確立されたこと。
以前まではソースにそのようなツールは用意されていなくクロスコンパイラでとりあえずビルドって感じだった。
ということでPythonモジュールのビルド方法を。
ツールのソースコード追ってないので正しいかどうか分からないけどAndroidソースが必要みたい。
Androidのソースは各自準備してください。

/home/hoge/android/mydroid ← Androidのソース置き場
/home/hoge/android/sl4a ← SL4Aのソース置き場
とします。

今回はPyLZMAをビルドする例を紹介します。

SL4Aのソースをとってくる。
$pwd
/home/hoge/android/
$cd sl4a
$hg clone https://android-scripting.googlecode.com/hg/ android-scripting

ビルドツールの一部を修正する。
$cd android-scripting/tools/agcc
$vim agcc
126行目以降のものを以下のように1行追加
# Also need: -Wl,-soname,libXXXX.so
my @shared_args = (
    "-nostdlib",
    "-Wl,-T,$DROID/build/core/armelf.xsc",
    "-Wl,--gc-sections",
    "-Wl,-shared,-Bsymbolic",
    "-L$ALIB",
    "-Wl,--no-whole-archive",
    "-L/home/hoge/android/mydroid/prebuilt/ndk/android-ndk-r4/platforms/android-3/arch-arm/usr/lib ",
    "-lc",
    "-lm",
    "-ldl",
    #"-Wl,--no-undefined",
    "$TOOLCHAIN/lib/gcc/arm-eabi/4.4.0/interwork/libgcc.a",
    "-Wl,--whole-archive"); # .a, .o input files go *after* here

PyLZMAをとってくる。
$pwd
/home/hoge/android/sl4a
$mkdir Modules
$cd Modules
$wget http://pypi.python.org/packages/source/p/pylzma/pylzma-0.4.4.tar.gz
$tar zxvf pylzma-0.4.4.tar.gz

Moduleをビルド
$cd pylzma*
$export SL4A_TRUNC=/home/hoge/android/sl4a/android-scripting
$export ANDROID_SRC=/home/hoge/android
$export PATH=$PATH:$ANDROID_SRC/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin
$export PATH=$PATH:$SL4A_TRUNC/tools/agcc
$export AR=arm-eabi-ar
$export PYBASE=$SL4A_TRUNC/python/src
$export INCLUDES="-I$PYBASE -I$PYBASE/Include"
$export OPT="-DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fno-short-enums $INCLUDES"
$export CXX=agcc
$export LDSHARED="agcc -shared"
$export RANLIB=arm-eabi-ranlib
$export CC=agcc
$python -E setup.py build

これで問題なくビルド出来ると思う。
$cd build/lib*
$zip pylzma.zip *
でパッケージングしたらPython for Androidでそのzipファイルをインポートすれば使えると思う。
またlib*の他にscripts*ってのが出来てたらそれも必要。
それを/sdcard/downloadに置く。

で、これだとなんかうまくいかない…
root取れれば
*.soを
/data/data/com.googlecode.pythonforandroid/files/python/lib/python2.6
*.pyを
/sdcard/com.googlecode.pythonforandroid/extras
に置けばいいと思う。

なんか説明が足らないな…
ソース見ろってことかねw
その部分のソース: PythonMain.java