● ToolBox API徒然草(2006/02/24)

  このニュースは、MOSAの会員にのみ配布されているデベロッパー向けの
  デジタルマガジンMOSADeNのに掲載された記事です。ほぼ一ヶ月遅れで
  ここに掲載されて行きます

 〜 アプリケーションのUniversal Binary化(その1) 〜


今回からは、本サンプルアプリケーションのUniversal Binary化(Intel x86 CPU対応)について解説していきたいと思います。最初に、現在の開発プロジェクトを、Metrowerks CodeWarrior 9.6からXcode 2.2.1(最新バージョン)へ移植する作業から始め、次に、ソースコードの一部分をPowerPC用からx86用に修正し、最終的にUniversal Binary対応のMach-Oアプリケーションを完成させます。

開発プロジェクト移行の解説をする前に、まずは「Universal Binary化とは何ぞや?」と言う話をしておきたいと思います。本サンプルアプリケーションは、Carbon FramewrokとNibファイルを用いたMach-O形式アプリとして開発されています。また、若干のリソースデータも用いています。Universal Binary化を実行すると言っても特別なことはなく、こうした開発の仕組みについては何も変更する必要はありません。簡単に言えば、開発環境のコンパイラをPowerPC用からx86用に切り換え、再コンパイル&リンク(Make)をし直せば完了となります。

こう書いてしまうと、Universal Binary化の作業はとても簡単のように聞こえるのですが(笑)、実際にはプロジェクト形式(CocoaかCarbonかJavaか)やアプリケーションの規模(ソースコード量)、利用している専用フレームワークの種類などにより、その困難さは大きく変化します。ちなみに、移行作業の大部分は、アプリケーションのソースコードの一部分を、PowerPC対応からx86対応に書き換えるという作業に割り当てられることになります。この書き換え量が多いか少ないかにより、そのアプリケーションのUniversal Binary化が完了するまでの作業時間(困難さ)が決定します。

まずは、Apple社が提供しているUniversal Binary化に関連するドキュメントを調べてみましょう。Apple社のDeveloper Webサイトには、x86トランジション関連のリソースを集中的に集めた「Developer Transition Resource Center」というサイトがあります。ここからは、ドキュメントだけではなく、開発ツールやWWDCにおける関連セッションの映像にもアクセスできます。また、ここから「Xcode Users Mailing List」や「Performance Optimization Development Mailing List」といったメーリングリストへの参加も可能となっています。

http://developer.apple.com/transition/

このサイトの日本語訳サイトは以下のURLです。こちらからは、上記サイトに掲載されているドキュメントの日本語訳ドキュメントにアクセスすることが可能です(すべてが日本語訳されているわけではないが...)。

http://developer.apple.com/jp/transition/

また、ここからはIntel社の「Development Support for Intel-based Macs」というWebサイトにもリンクされており、Intel CPU版のMacintosh向け開発ツール(C/C++やFortranなど)のβ版リリースを無料でダウンロードすることが可能です。これらの開発ツールは、将来的には販売される予定だそうです。

http://www.intel.com/cd/ids/developer/asmo-na/eng/255716.htm

関連ドキュメントのうち、まず最初に読むべき物は「Universal Binary Programming Guide,Second Edition」、日本語訳名は「Universal Binaryプログラミングガイドライン(第2版)」です。最新版PDFの発行日付は、2006年1月10日ですので注意してください。このドキュメントを一読すれば、Universal Binary化に必要な知識をほとんど入手することが可能です。Universal Binary化の過程ついてもう少し大ざっぱに把握したい人は、「Adopting Universal Binary on Mac OS X」、日本語訳「Universal Binaryの導入」を先に読むのが良いでしょう。

ちなみに、開発アプリケーションがMach-O形式でなくCFM形式であったり、未だCarbon化されていない状況の場合には、最終ゴールは随分と遠くなります(笑)。その場合には、先んじて「Carbon Porting Guide」「Moving Your Code to Mac OS X」を、この機会にCarbonでなくCocoa Frameworkを利用して新規開発を行いたい人は、「The Objective-C Programming Language」、日本語訳名「Objective-C プログラミング言語」を参照されることをお勧めします。色々なタイプのプロジェクトを、どのようにx86対応へと移行させるのかのヒントは、「Scoping Your Transition Project」、日本語訳名「タイプ別移行計画」を参照してください。また、Mac OS Xのバージョン番号にセンシティブなアプリケーションを開発している場合には、「Cross-Development Programming Guide」、日本語訳名「クロス開発プログラミングガイド」が参考になります。

また、ソースコードでAltiVecコードを利用しているソフトは、この部分を完全に別コード(通常のCコードかx86のSSEコード)に差し換える必要があります。これは、x86 CPUにはAltiVecユニットがないためですが、この作業については、「AltiVec/SSE Migration Guide」が参考になります。また、AltiVecコードを直接記述しないで、特定の処理を高速にしたい場合には、関連ドキュメントとして「Taking Advantage of the Accelerate Framework」、日本語訳「Accelerateフレームワークの活用」を調べてみてください。また、「Optimizing Image Processing With vImage」「vecLib Framework Reference」「vDSP Library」などのドキュメントも処理の高速化についてのヒントを提供しています。ただし、残念ながらこれらのドキュメントには日本語訳が存在していません。

現在、最新版のCodeWarrior 10にはPowerPC用コンパイラしかなく、このバージョンを最後にメーカ側のサポートは終了してしまいます。つまり、現時点ではx86用gccコンパイラが使えるXcode 2.2.1を利用しないかぎり、アプリケーションのUniversal Binary化は行えません。開発環境をCodeWarriorからXcodeへ切り換える必要がある人は、「Xcode 2.2 User Guide」「Working with Xcode build Setting」「GCC Porting Guide」「Porting CodeWarrior Projects to Xcode」、日本語訳名は「Xcode 2.2ユーザガイド」「Xcodeビルド設定の取り扱い」「GCC ポーティングガイド」「CodeWarriorからXcodeへのプロジェクトの移行」(概要と詳細)などを読まれることをお勧めします。

次回は開発環境の移行について詳しく解説します。サンプルアプリケーションの開発プロジェクトを、Metrowerks CodeWarrior 9.6からXcode 2.2.1へ移植する話です。


copyright 2006 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact us: koike@ottimo.co.jp