IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Multicore acceleration  >

クローズアップ SDK 3.1: 第 2 回 make.footer を使おう

SDK 3.1 の "ビルド環境" を使ったビルドについて、1 つ 1 つ詳しく解説していきます

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

議論する

原文はこちら

原文はこちら


レベル: 初級

Brian Horton, Cell/B.E. Software Developer, IBM

2008年 11月 25日

Cell/B.E. SDK 3.1 で提供されている make.footer ファイルをメイクファイルへインクルードすると、サンプルやデモプログラムをビルドするのに便利な疑似的「ビルド環境」を利用できます。本記事では、make.footer ファイルで利用可能な機能や特徴と、それらが SDK のサンプルプログラムでどのように使われているか解説します。

Cell Broadband Engine™ (Cell/B.E.)™ SDK を使ったコード開発は、少々面倒なものであり、特別なメイクファイルを必要とします。 Cell/B.E. アプリケーションをビルドするには、次に示す 2 セットのツールを使う必要があり、一般の make でこれを行うのは少々荷が重いという方もいらっしゃるでしょう。

  • ppu-gcc と spu-gcc でオブジェクトファイルを作成
  • ppu-embedspu でそれらを結合

make.footer メイクファイルを使った疑似ビルド環境は、Cell/B.E.™ アーキテクチャの開発初期段階に作成されました。この環境は時と共に進化を遂げてきていますが、 make.footer は全ての機能を網羅したビルド環境ではありません。基本的な Cell/B.E. コードを構築するのに十分な機能はサポートしていますが、実のところ SDK に同梱されているサンプルやデモのコードをビルドすることのみを目的として設計されたものです。

本記事では、 make.footer で利用可能な変数を紹介し、それらが SDK サンプルのメイクファイルでどのように使われているかを紹介します。

make の環境ファイル群

SDK 3.1 には make を正しく動かすのに必要な 3 つの環境ファイルがあります。

  • make.header
    このファイルにはメイクファイルの処理に先立って必要な定義が含まれています。また、このファイルが主要な make 環境ファイルの 1 つである make.env のインクルードも行います。

  • make.env
    このファイルは、 make で使用されるデフォルトのコンパイラやツールの設定を行います。ユーザ環境変数を定義するか、このファイルを編集することで、これらの設定を上書きできます。 SDK 3.1 で利用可能なコンパイラ指定用変数は以下のとおりです :
    • HOST_COMPILER
      コードをホストシステム用にビルドする場合にデフォルトで使われるコンパイラを指定します。

    • PPU_COMPILER, PPU32_COMPILER, PPU64_COMPILER
      32 ビットまたは 64 ビットの PPU 用 C コンパイラを指定します (gcc または xlc) 。

    • SPU_COMPILER
      SPE 用 C コンパイラを指定します (gcc または xlc) 。

    • FTN_PPU_COMPILER, FTN_PPU32_COMPILER, FTN_PPU64_COMPILER
      32 ビットまたは 64 ビットの PPU 用 FORTRAN コンパイラを指定します。 (gfortran または xlf) 。

    • FTN_SPU_COMPILER
      SPE用 FORTRAN コンパイラを指定します。 (gfortran または xlf) 。

    • XLC_REL, XLF_REL
      xlc および xlf のリリースナンバーを指定します。

    • SPU_TIMING
      生成された全てのアセンブリファイル (.s) について、自動的に静的タイミング解析ファイル (訳注 : .s.timing) も生成するかどうかを指定します。


  • make.footer
    このファイルは、適用されるすべてのビルドルールを定義しています。ユーザはこのファイルを変更してはなりませんが、フラグのデフォルト値やビルド手順の理解に役立ちます。



上に戻る


SDK サンプルのメイクファイルを解剖する

SDK に含まれるすべてのサンプルとデモのメイクファイルの基本的な構造は同じです。大体、次のような順で並んでいます :

  • サブディレクトリ
  • ビルドターゲットとターゲットプロセッサ
  • オブジェクト
  • コンパイルとリンクのフラグ
  • make.footer のインクルード

サブディレクトリ

このディレクトリのターゲットをビルドする前に処理したいサブディレクトリを指定します :

DIRS := <スペースで区切られたサブディレクトリのリスト>

複数のプログラムをビルドするために使われたり、別ディレクトリにある SPU コードをビルドするために使われたりしています。

ビルドターゲットとターゲットプロセッサ

ビルドターゲットとターゲットプロセッサを指定する方法は何種類かあります。注意すべきは、このビルド環境では1つのメイクファイル (ディレクトリ) で 1 種類のプロセッサ種別にしか対応していないということです。複数のプロセッサ向けにビルドする場合は、別々のディレクトリ及びメイクファイルにする必要があります。ですので、 SPU コードは常に別のディレクトリに置かれているのです。サンプルによって、 PPU 用のコードが上位のディレクトリにあったり、 PPU 用ディレクトリと SPU 用ディレクトリが同じ場所にあったりします。

ターゲットプロセッサを指定するには、次のようにします :

TARGET_PROCESSOR := "spu" | "ppu" | "ppu64" | "host"

ビルドするプログラムまたはプログラムのリストを指定します :

PROGRAM  := <プログラム> 
PROGRAMS := <スペースで区切られたプログラムのリスト>

別の方法として、プログラムとプロセッサ種別を一度に指定することもできます。この方法は ppu (32 ビット ) と ppu64 (64 ビット ) のプログラムを区別するためによく用いられます。

PROGRAM_<ターゲット> := <プログラム>
PROGRAMS_<ターゲット>:= <スペースで区切られたプログラムのリスト>

ライブラリターゲットの名前 (共有または非共有) の指定には次のいずれかを用います :

LIBRARY         := <ライブラリ名>
SHARED_LIBRARY  := <共有ライブラリ名>

SPU プログラムを PPU の実行ファイルに埋め込むためのライブラリを作成するには、次のどちらかを用います (PPU の実行形式が 32 ビットであるか 64 ビットであるかによって異なります) :

LIBRARY_embed   := <ライブラリ名>
LIBRARY_embed64 := <ライブラリ名>

プログラムでもライブラリでもないその他のビルドターゲットがある場合に使います :

OTHER_TARGETS := <スペースで区切られたその他のプログラム>

オブジェクト

ほかにビルドすべきオブジェクトがあれば、それを指定する方法があります。

カレントディレクトリ以外のディレクトリのファイルを入力として使う場合、 VPATH ディレクティブで定義できます。 SDK サンプルの中に、 32 ビットと 64 ビットの PPU コードを同じソースファイルから作成するためにこの方法を使っている例があります。

VPATH := <コロンで区切られたパスのリスト>

全オブジェクトファイルを指定しない場合は、ターゲット(ライブラリまたはプログラム)はソースディレクトリにあるソースファイルから生成したすべてのオブジェクトを生成して取り込みます (VPATH で指定されたものも含みます)。代わりにオブジェクトファイル名を直接指定することもできます。

OBJS := <スペースで区切られたオブジェクトファイルのリスト>

各プログラム毎に ( または特定のプログラムだけ ) オブジェクトファイルを指定する場合は次のようにします :

OBJS_<プログラム名> := <スペースで区切られたオブジェクト名のリスト>

コンパイルとリンクのフラグ

コンパイル、アセンブル、リンクに関するフラグを設定するための定義もあります。 メイクファイルにこれらを書き込むことで、デフォルトの動作を変更できます。 以下のようなものがあります :

  • CPPFLAGS, CPPFLAGS_gcc, CPPFLAGS_xlc, CPPFLAGS_<プログラム名>
    C プリプロセッサのためのフラグを指定します。デフォルトコンパイラまたはコンパイラごとに全プログラム一括指定、または、プログラムごとの指定もできます。

  • CC_OPT_LEVEL
    最適化レベルを指定します。デフォルトは -O3 です。$(CC_OPT_LEVEL_DEBUG) を指定すると、デバッグ用のビルドを行えます。

  • CFLAGS, CFLAGS_gcc, CFLAGS_xlc, CFLAGS_<プログラム名>
    C コンパイラの追加フラグを指定します。デフォルトコンパイラまたはコンパイラごとに全プログラム一括指定、または、プログラムごとの指定もできます。

  • CXXFLAGS, CXXFLAGS_<プログラム名>
    C++ コンパイラの追加フラグを指定します。デフォルトコンパイラまたはコンパイラごとに全プログラム一括指定、または、プログラムごとの指定もできます。

  • FFLAGS
    FORTRANコンパイラの追加フラグを指定します。

  • INCLUDE
    追加のインクルードディレクトリを、 -I を前につけて追加します。

  • ASFLAGS, ASFLAGS_<プログラム名>
    アセンブラの追加フラグを指定します。全プログラム一括指定のほか、プログラムごとの指定もできます。

  • LDFLAGS, LDFLAGS_gcc, LDFLAGS_xlc, LDFLAGS_<プログラム名>
    リンカの追加オプションを指定します。デフォルトコンパイラまたはコンパイラごとに全プログラム一括指定、または、プログラムごとの指定もできます。

  • IMPORTS, IMPORTS_<プログラム名>
    リンクするライブラリまたはオブジェクトファイルを指定します。全プログラム一括指定のほか、プログラムごとの指定もできます。パス名とファイル名のほか、リンカの検索パス内に存在する libname.so または libname.a に対しては -lnameの形式での指定も可能です。

  • TARGET_INSTALL_DIR
    ビルド後に、作成されたすべてのプログラムをインストール (コピー) する先のディレクトリを指定します。

  • INSTALL_FILES, INSTALL_DIR
    インストールされるファイルとディレクトリのリストを指定します。こちらは、ビルドするコードでないもの、たとえばデータファイルやヘッダファイルのコピーなどに使います。

make.footer のインクルード

サンプルのメイクファイルが本記事で紹介されている変数を使うためには、 make.footer ファイルをインクルードする必要があります。メイクファイルの次のような部分でこれを行っています。 SDK のディレクトリ構造に応じた深さの分だけ ../ をつなげています。

ifdef CELL_TOP
   include $(CELL_TOP)/buildutils/make.footer
else
   include ../../buildutils/make.footer
endif

make.footer の後にビルドルールを追加したい場合もあるでしょう。その場合は、 make.footer のインクルード文の後にルールを追加してください。




上に戻る


make で使えるターゲット

本ビルド環境では、以下のような基本的なビルドターゲットをいくつか提供しており、コマンドラインから利用できます :

  • all
    ターゲットが指定されない場合に使われるデフォルトのビルドターゲットです。dirs, libraries, programs, misc_, install の各ターゲットのビルドを含みます。

  • dirs
    ディレクトリツリーを移動しながら、指定されたターゲットをビルドします。通常、libraries, programs, misc_, install の各ターゲットと組み合わせて使われます。

  • libraries
    LIBRARY, SHARED_LIBRARY, LIBRARY_embed の各ターゲットのみをビルドします。

  • programs
    PROGRAM_<target>PROGRAMS_<target> ターゲットのみをビルドします。

  • misc_
    OTHER_TARGETS を含むその他のターゲットをビルドします。その他のターゲットの種類については make.footer を参照してください。

  • install
    ビルドされたターゲットをインストールします。TARGET_INSTALL_DIR, INSTALL_FILES および INSTALL_DIR の各定義も参照してください。

  • clean
    すべてのビルドまたはインストールされたターゲット、オブジェクトファイル、ライブラリ、プログラムを削除します。

  • listenv
    カレントディレクトリに適用されるコンパイル環境を表示します。このターゲットは、 make によって使われるターゲットやツール、フラグ指定を参照するためのデバッグ用です。



上に戻る


その他の便利なメイクファイル変数について

ビルド環境によって定義されたその他の変数を使っているメイクファイルもあります。これらの変数の利点は、 PPU と SPU の区別 (例えば /usr/include と /usr/spu/include) や、 32 ビットと 64 ビットの区別 (例えば /usr/lib と /usr/lib64) や、ネイティブ開発環境 (QS22、GigaAccel180、PS3 などの PowerPC マシン) とクロス開発環境 (x86 マシン) の区別 (例えば /usr/include と /opt/cell/sysroot/usr/include) が、 make.footer によって自動的に扱える点です。

次の変数はファイルを読み込むディレクトリを与えます ( -L-I のディレクトリ ) :

  • $(SDKBIN), $(SDKLIB), $(SDKINC)
    正式版のコードが含まれる bin, library, include のディレクトリパスです (/usr/bin など ) 。

  • $(SDKEXBIN), $(SDKEXLIB), $(SDKEXINC)
    SDK サンプルコードの bin, library, include のディレクトリパスです (/opt/cell/sdk/usr/bin など ) 。

  • $(SDKPRBIN), $(SDKPRLIB), $(SDKPRINC)
    SDK のプロトタイプコードの bin, library, include のディレクトリパスです (/opt/cell/sdk/prototype/usr/bin など )。

次の変数はファイルがインストール(エクスポート)された場所を与えます :

  • $(EXP_SDKBIN), $(EXP_SDKLIB), $(EXP_SDKINC)
    インストールされたコードの bin, library, and include ディレクトリパスです (/opt/cell/sdk/) 。

リンカの -R フラグとともに使用される、ランタイムライブラリの場所を示す変数です :

  • $(SDKRPATH), $(SDKEXRPATH), $(SDKPRRPATH)
    正式版コード、サンプル、プロトタイプの各ライブラリがインストールされたディレクトリパスです (/opt/cell/sdk/usr/lib) 。

シミュレータ関連の変数です :

  • $(SYSTEMSIM_INCLUDE)
    callthuru と関連ヘッダファイル (profile.h) があるディレクトリです。



上に戻る


その他の SDK ビルドツール

make.footer だけでなく、他にもサンプルのビルドや実行を制御するツールがあります。

  • cellsdk_select_compiler
    このツールは /opt/cell/sdk/buildutils ディレクトリにあり、gnu gcc/gfortran と IBM XL xlc/xlf コンパイラを切り替えるために使われます(後者はインストールされている場合のみ)。オプションなしで実行すると、使用できるオプションを表示します。このスクリプトは ${CELL_TOP}/buildutils/make.env ファイルを書き換え、デフォルトコンパイラを変更することができます。

  • cellsdk_sync_simulator
    このツールは /opt/cell ディレクトリにあり、ビルド環境の sysroot からシミュレータの sysroot にファイルをコピーするために使用されます。サンプルファイルを再構築すると、 各バイナリは /opt/cell/sysroot ディレクトリ以下にインストールされます。 cellsdk_sync_simulator スクリプトを使って、 この sysroot とシミュレータが使う sysroot の内容を同期しましょう。



上に戻る


まとめ

本記事では、 IBM SDK for Multicore Acceleration 3.1 に含まれている make.footer の変数について(そしてそれを使って疑似ビルド環境を使う方法について)解説しました。本記事が、サンプルやデモプログラムをビルドする方法を理解する助けになるでしょう。



参考文献

学ぶために
  • RSS feedを使って、このシリーズの更新をチェックしましょう(developerWorks Japan RSS フィードについてはこちら)。

  • このシリーズの第 1 回もどうぞ : "A close-up on SDK 3.0, Part 1: Rebuilding code from src.rpm" (developerWorks, 2008) では、 SDK 3.0 の src.rpm に含まれるコードのインストール方法およびビルド方法を紹介しています。 SDK 3.0 ですが、まだまだ参考になります。

  • GCC online documentation repository は、 GCC のマニュアルの宝庫です。リリース 2.95.3 から 4.3.2 までに加え、現在行われている開発に関するユーザ向けと内部向けの資料もそろっています。

  • information center for IBM compilers supporting Cell/B.E. processorsには、IBM XL C/C++ for Multicore Acceleration for Linux™ 9.0 および IBM XL FORTRAN for Multicore Acceleration for Linux 11.1 を含む、 SDK 3.0/3.1 の C または FORTRAN 用の各コンパイラについての情報があります。

  • Cell Resource Center's Docs page には、思いつく限りのすべての Cell/B.E. 関連ドキュメント —ガイド, ハンドブック, チュートリアル, 仕様書— があります。 "Programmer's Guide to the IBM SDK for Multicore Acceleration" へのリンクもここです。

  • IBM Systems® Information Center は、 IBM Systems のハードウェア、オペレーティングシステムそしてサーバー製品に関する製品ドキュメントを、ワンストップで探せる情報センターです。 ナビゲーションバーを選んで SDK ドキュメントへ進みましょう : System software > Cell Broadband Engine solution > Software Deelopment Kit > Software Deelopment Kit 3.1

  • おもな Cell/B.E. 関連テクノロジを、まとめて素早く知りたい方は :
    • Programming with ALF: このシリーズ (developerWorks, October 2007-July 2008) には、 SDK の Accelerated Library Framework について解説した、短いガイド集と少し詳しい記事がまとまっています。
    • Programming with DaCS: このシリーズ (developerWorks, October 2007-August 2008) には、SDK の Data Communication and Synchronization サービスについて解説した、短いガイド集と少し詳しい記事がまとまっています。
    • Programming with BLAS: このシリーズ (developerWorks, November 2007-July 2008)には、SDK の Basic Linear Algebra Subroutines ライブラリについて解説した、短いガイド集と少し詳しい記事がまとまっています。

  • もっとCell/B.E.プログラミングを学ぶには、次のdeveloperWorksシリーズに挑戦しましょう:
  • The IBM Semiconductor Solutions Technical Library のCell Broadband Engine documentation セクションには、ダウンロードマニュアルや、仕様書などたくさんの有益な情報があります。

  • developerWorks ニュースレターに登録すると、最新の開発者向けニュースと Cell/B.E.に関する最新情報を毎週メールで受け取れます。ニュースレターで Cell/B.E.関連のニュースを受信するには、登録する際にPower Architecture® にチェック・マークを付けてください。


製品や技術を入手するために

議論するために


著者について

author photo

Brian Horton は2007年のはじめから、 Cell/B.E. SDK 開発チームとしてサンプルやビルド環境の構築、そして DaCS ライブラリの開発を行っています。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


この記事は、土居 意弘 (munepi@jp.ibm.com) (IBM Systems & Technology Group, AKD48) が翻訳しました。

IBM, developerWorks, IBM Systemsは、International Business Machines Corporationの米国およびその他の国における商標。 Linux は、米国およびその他の国における Linus Torvalds の商標。 Cell Broadband Engine, Cell/B.Eは、米国およびその他の国におけるSony Computer Entertainment, Inc.の商標。 他の会社名、製品名およびサービス名等はそれぞれ各社の商標。 他の会社名、製品名およびサービス名等はそれぞれ各社の商標です。

    日本IBMについて プライバシー お問い合わせ