SIP ライブラリの PSP への移植に関するヘルプ
-
01-07-2019 - |
質問
現在、SIP スタック ライブラリ (pjSIP) を PSP コンソール (PSPSDK ツールチェーンを使用) に移植しようとしていますが、メイクファイルで非常に問題が発生しています (適切な変更を加え、リンクの問題を解決する)。
ライブラリの移植に関する洞察を得るのに役立つテキスト、本、または何かを知っている人はいますか?
このプロジェクトが移植に関して提供する唯一のドキュメントは、主要な OS に特化しすぎているように思えます。
解決
PSP に移植された他のライブラリを見てください。Linux バージョンのライブラリと PSP バージョンの差分を実行すると、それがわかるはずです。
また、PSP が POSIX とどの程度互換性があるのかを知るようにしてください。それによって、ライブラリを移植するという仕事がどれほど大きいかがわかります。
他のヒント
PSP は UNIX ではなく、POSIX に準拠していませんが、オープン ソース ツールチェーンは gcc 4.3、bintutils 1.16.1、および newlib 1.16 で構成されています。
C ライブラリの大部分はすでに存在しており、ほとんどのコードをコンパイルできます。次の引数を指定してconfigureスクリプトを呼び出すだけで、多くのライブラリが移植されています。
LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(pwd)/../target/psp
ただし、ホストの mips allegrex (PSP CPU) を知るには、configure スクリプトと configure.ac スクリプトにパッチを適用する必要がある場合があります。そのためには、mips を検索します*--) 行を作成し、次のように allegrex にクローンを作成します。
mips*-*-*)
noconfigdirs="$noconfigdirs target-libgloss"
;;
mipsallegrex*-*-*)
noconfigdirs="$noconfigdirs target-libgloss"
;;
次に、make コマンドを実行して、newlib に必要なものがすべて揃っていることを望みます。そうでない場合は、不足している関数の代替を作成するだけで済みます。
移植はプラットフォームに非常に固有であるため、このテーマに関する一般的な文献はあまり見つからないと思います。
思いつく限りでは、次のようなことに遭遇する可能性があります。
- エンディアンネス
- ワードサイズ
- 利用可能なライブラリ
- コンパイラの違い
- リンカーの違い (それについてはすでに見たはずです)
- 周辺ハードウェアの違い
- ...
さらに調査したところ、ps2dev フォーラムで次の投稿を見つけました。
PSP は Unix システムではなく、pspsdk は POSIX に準拠していません。近いところもありますが、POSIX システムで適切にコンパイルされるコードをそのまま使用して動作させることは期待できません。例えば:
- pspsdk は newlib を使用しますが、これには glibc の機能とヘッダーの一部がありません。
- libc はデフォルトではリンクされていないため、一般的な autoconf テストはビルドに失敗します。
- autoconf は PSP について何も知りません
- PSP_MODULE_INFO を定義し、実行可能ファイルで psp-fixup-imports を実行する必要があります。そうしないと実行されません。
(psp および pspware リポジトリにある) 移植された他のライブラリとプログラムをすべて確認する必要があります。たとえば、すべての SDL ライブラリは autoconf を使用します。
これは私が探していたものをより詳細に示していると思います。また、@[Jonathan Arkell] がすでに移植されているライブラリを調べる際のポイントも示しています。
ご返信いただきありがとうございます。