This is the documentation for Enlighten.
5.2. コードのコンパイル
Enlighten を実装するときは、ほとんどの場合、プリコンパイルされたライブラリおよびサンプル アプリケーションをそのまま使用できます。まれにですが、ライブラリおよびサンプル アプリケーションをソースからコンパイルすることもできます。
コンパイルは、付属する Enlighten.sln ファイルを使用して、任意のバージョンの Visual Studio で実行できます。
Visual Studio で Enlighten.sln を開くと、プロジェクトを新しいバージョンに変換するか確認される場合があります。この警告は無視して、変換をキャンセルしてください。
コマンド ラインでのコンパイル
コードは、CodeBuildTool
と呼ばれるカスタム ツールでビルドします。これは、配布パッケージの BuildTools
フォルダーにあります。ツールへの入力は以下のとおりです。
- ソース ファイルのリストを含む
.vcxproj
ファイル。 - プロジェクトに関するメタデータを含む
.xml
ファイル。 - (内部) 使用可能なツール チェーンの説明。
以下に例を示します。
CD /d E:\Enlighten_3.XX BuildTools\CodeBuildTool build DEBUG_WIN32_2010 Src\Samples\Programs\GeoRadiosity\GeoRadiosity.vcxproj
一部のコンパイル ビルド手順で、SDK に付属するファイルが上書きされます。そのため、SDK ディレクトリのすべてのファイルを書き込み可能にする必要があります。SDK を読み取り専用のメディアからコピーした場合など、オペレーティング システムで読み取り専用属性が設定されている場合は、Enlighten ディレクトリのルートで fix_files.bat
スクリプトを実行するとこれを修正できます。
ビルド ターゲット
ビルド ターゲット名は大文字と小文字を区別せず、<構成
><プラットフォーム
><ツールセット
> の 3 つの部分に分かれています。
構成
構成 | 説明 | ライブラリ サフィックス |
デバッグ | デバッグ構成 |
|
未確認 | 未確認のデバッグ構成 |
|
確認済み | 確認済みのリリース構成 |
|
リリース | リリース構成 | なし |
デバッグ構成は、リリース構成とは以下の点で異なります。
- デバッグ構成では、サポートするプラットフォーム上でデバッグ版の CRT が使用されます。
- Visual Studio では、STL によって、
_ITERATOR_DEBUG_LEVEL
および_SECURE_SCL
シンボルがデバッグまたはリリースのデフォルトに定義されます。 - 未確認構成は、
_ITERATOR_DEBUG_LEVEL=0
が設定されることを除いてデバッグ構成と同じです。 - 確認済み構成は、
_SECURE_SCL
が設定されることを除いてリリース構成と同じです。 - デバッグ構成では、内部アサートをテストします。失敗した場合、
LOG_ASSERT
ログ種別を使用して、(ブロックしない) 警告が報告されます。この内部アサートはエラー報告メカニズムとして使用するものではなく、通常使用時には追加の警告を行いません。発生した場合は、Enlighten サポートに通知してください。
すべての構成が最適化されますが、リリース構成の方がデバッグ ビルドより性能に優れています。CRT と STL の使用法に一致する構成種別を使用することをお勧めします。
Enlighten 3 プラットフォーム
プラットフォーム | 説明 |
| 32 ビット Windows |
| 64 ビット Windows |
| 32 ビット デスクトップ Linux (Ubuntu) |
| 64 ビット デスクトップ Linux (Ubuntu) |
| 32 ビット Android OS |
| 64 ビット Android OS |
| Xbox One |
| PlayStation4 |
| 非推奨:PlayStation Vita |
32 ビット ビルドは、以下のような一部のプロジェクトでサポートされます。
- コア ライブラリ:Enlighten3、Enlighten3HLRT、EnlightenPppi、IntelTBB、Zlib
- サンプル フレームワーク ライブラリ:GeoRender、GeoScene、GeoEn2Support、GeoRuntime、GeoPipeline、GeoExport
- サンプル フレームワーク アプリケーション:GeoViewer
MacOS と iOS の実装では、この外部ツールでビルドできません。これらのプラットフォームでのコンパイル手順は、以下に記載されています。
Android および iOS ライブラリの使用とコンパイルについては、モバイルのドキュメントに記載されています。Android および iOS ライブラリは、デフォルト配布パッケージとは別に配布されていることに注意してください。
ツールセット
プラットフォーム | ツールセット | 説明 |
| 2012 | 非推奨:Visual Studio 2012 (DLL Crt) |
| 2013 | Visual Studio 2013 (DLL Crt) |
| 2015 | Visual Studio 2015 (DLL Crt) |
| 2017 | Visual Studio 2017 (DLL Crt) |
| 14## | Visual Studio 2017 MSVC 14.##(DLL Crt) |
| 2012ST | 非推奨:Visual Studio 2012 (静的 Crt) |
| 2013ST | Visual Studio 2013 (静的 Crt) |
| 2015ST | Visual Studio 2015 (静的 Crt) |
| 2017ST | Visual Studio 2017 (静的 Crt) |
| 14##ST | Visual Studio 2017 MSVC 14.##(静的 Crt) |
| GCC | Linux 用 GCC 4.8 (i686-linux-gnu/4.8) |
| CLANG | Linux 用 Clang 3.4 |
| ARM 用 Android NDK | |
| INTEL | Intel 用 Android NDK |
サンプル フレームワーク プロジェクトは、2015 より古いバージョンの Visual Studio ではコンパイルできません。
多数のプラットフォームで複数のツール チェーンが利用可能であるため、Enlighten では可能な限り多くをネイティブにサポートしています。ツールセットが上記に指定されていない場合、このビルド ターゲットのセクションは省略してください。現在の SDK 環境変数の参照先が使用されますが、これが Enlighten でサポートされていない場合はエラー メッセージが表示されます。
2017 ツールセットは、デフォルトでは MSVC コンパイラー バージョン 14.14 でビルドされます。別のコンパイラーでビルドするには、コンパイラーのバージョンを指定します。たとえば、ツールセット 1416 の場合は、14.16 コンパイラーでビルドされます。デフォルトでは、Visual Studio 2017 のビルドは Windows SDK 10.0.15063 を使用します。これはツールセット名でオーバーライドできます (例:1415-15063)。
パッケージング
コア EnlightenSDK パッケージには、すべてのプラットフォーム向けのビルド ツール、API ドキュメント、サードパーティ ライブラリ、およびパブリック ヘッダーが含まれています。また、最も一般的な Windows バイナリおよびライブラリも含まれています。追加プラットフォームのサポートは、オーバーレイ (同じルート フォルダーに展開される追加の zip ファイル) で提供されます。これらのオーバーレイには、それほど一般的ではないバージョンの Windows ライブラリ (すべての確認済みビルドおよび静的ビルド) が格納された WindowsExtra パッケージが含まれます。
プラットフォームの一部には、NDA によって、承認されていない開発者に送信されるコードからすべての記述を削除することが要求されるものがあります。これらのパッケージには、EnlightenSDK ベースラインで置き換えられる変更済みのヘッダーが含まれます。使用法は同じです。同じルート フォルダーに展開して、表示された場合に overwrite existing files オプションを選択する必要があります。
各プラットフォームの特記事項
Linux でのコンパイル
CodeBuildTool は、Linux と OS X の両方で、Mono 4.0.x の下で実行される .NET アプリケーションです。Linux ではすべての機能が残されており、同じコマンド ライン引数でアクセスできます。必要なのは、コマンド ラインの前に mono を付けることだけです。以下に例を示します。
cd ~/Enlighten_3.xx mono BuildTools/CodeBuildTool.exe build DEBUG_LINUX32_GCC Src/Samples/Programs/GeoRadiosity/GeoRadiosity.vcxproj
執筆時点において、Ubuntu 14.04 LTS リポジトリでは Mono 4.0.x を入手できないため、Mono の手順に従って取得する必要があることに注意してください。
OS X でのコンパイル
ソースとして提供される Enlighten API およびサンプル フレームワーク プロジェクトは、Xcode を使用して OS X 上でコンパイルする必要があります。Windows では、CodeBuildTool を使用して Xcode プロジェクトを生成できます。また、OS X および Linux では mono を使用します。たとえば、OS X では、端末ウィンドウを開いて Enlighten-3.xx
ディレクトリに移動し、以下のコマンドを実行します。
mono BuildTools/CodeBuildTool.exe CreateProjects OSX Src/Enlighten.sln
これによって、OS X でサポートされる Enlighten.sln
内のすべての Enlighten API ソース ライブラリおよびサンプル プロジェクトについて Xcode プロジェクトが作成され、Enlighten SDK のルート ディレクトリにある Enlighten-OSX.xcworkspace
という Xcode ワークスペースに追加されます。ただし、ターゲットをビルドする前に、以下の操作を実行する必要があります。
- Xcode Preferences ウィンドウの Locations タブで、DerivedData オプションが Relative に設定されていることを確認します。これによって、ビルド結果は
Enlighten-OSX.xcworkspace
からの相対位置にビルドされます。 EnlightenSDK_OSX_iOS-3.x.x.zip
の中身を抽出し、ソースとして提供されていない Enlighten ライプラリを、OSX-Debug
ディレクトリおよびOSX-Release
ディレクトリから Xcode ワークスペース ビルド結果ディレクトリにコピーします。デフォルトでは、デバッグ ビルド構成の場合、コピー先ディレクトリはEnlightenSDK-3.x.x/DerivedData/Enlighten-OSX/Build/Products/Debug/
です。EffectsBuildTool_OSX.zip
を展開し、BuildTools
ディレクトリの中身をEnlightenSDK-3.x.x/BuildTools
ディレクトリにコピーします。
Android 向けのコンパイル
ライブラリのビルドでは Android NDK r10d のみ必要ですが、GeoMobileDemo などのアプリケーション用 APK をビルドする場合、CodeBuildTool には以下の追加の前提条件があります。
- JDK 6
- Android SDK (android-18 および android-21 の各プラットフォーム、および標準ツール)
- Apache Ant
- KeyTool および Jarsigner (リリース ビルド用)
NDK を探すため、CodeBuildTool は環境変数 ANDROID_NDK_ROOT
を参照してルート フォルダーを特定し、Clang 3.5 コンパイラーの使用を試みます。たとえば、clang++ を探すには、以下を参照します。
"$ANDROID_NDK_ROOT/toolchains/llvm-3.5/prebuilt/windows-x86_64/bin/clang++.exe"
同様に、CodeBuildTool は、32 ビットでは android-18 SDK プラットフォーム、64 ビットでは android-21 SDK プラットフォームに対してビルドします。32 ビットと 64 ビットについて、それぞれ以下のディレクトリが存在することを前提とします。
"$ANDROID_NDK_ROOT/platforms/android-18/*" "$ANDROID_NDK_ROOT/platforms/android-21/*"
NEON 組み込み関数、GCC、および Clang
ARM 上の Enlighten には、NEON ベクトル命令セットをサポートするプロセッサーが必要です。これは最新の ARM タブレットおよび携帯電話の大部分に搭載されています。しかし、Android NDK の一部として付属している GCC コンパイラー バージョン 4.4.3 では、内部コンパイラー エラーが発生します。新しいバージョンの GCC ではこの問題が修正されていますが、NEON 組み込み関数を大量に使用すると間違った結果を出力します。そのため、実際には使用できません。ただし、リビジョン 8c 以降の Android NDK に付属している Clang コンパイラー バージョン 3.1 ではこれらの問題は発生せず、コンパイル時間が短縮されます。また最も重要なこととして、Android 上の Enlighten に対してパフォーマンスが大幅に向上します。
代替 Android ツール チェーンと互換性がある Enlighten Mobile 配布パッケージの一部として、あらかじめビルドされたライブラリ (.a
) と Clang 3.5 でビルドされたアプリケーションが提供されます。Enlighten では STL コンテナーを使用しませんが、<algorithm> などのアルゴリズム コンテンツは GNU STL からインクルードされています。
GCC バージョン 4.4.3 を使用する場合は、内部コンパイラー エラーの発生を回避するため、Geo::v128
型 (NEON ベクトル型のエイリアス) の過剰な使用を避けてください。
Android 用 Enlighten ライブラリおよびサンプル アプリケーションをソースからビルドする場合、または Geo::v128
型を利用する場合は、付属する CodeBuildTool を使用して、Clang でビルドする必要があります。たとえば、リリース ARM 32 ビット ビルドをビルドするには、以下のコマンドを実行します。
CD /d E:\EnlightenRootDir BuildTools\CodeBuildTool build Release_Android Projects\GeoMobileDemo\GeoMobileDemo.vcxproj
APK のビルド
Release_Android
構成ではコンパイラー最適化レベル -O3
が有効になり、KeyToolで生成されたキーストアおよび秘密鍵を使用して APK に署名するために Ant が使用されます。.keystore
ファイルを EnlightenSDK-2.XX\Src\Samples\Programs\<アプリ名>\Android\Apk
ディレクトリに配置してから、同じ場所に ant.properties
というファイルを作成します。ant.properties
内に以下のパラメーターを追加して、APK に署名するために Ant が使用するキーストアおよび秘密鍵を指定します。
key.store=<キーストア名>.keystore key.alias=<キー エイリアス> key.store.password=<キーストアのパスワード> key.alias.password=<秘密鍵のパスワード>
ビルドが成功すると、EnlightenSDK-3.XX\Src\build\Output\<構成>
Android\Bin\
に APK が作成され、付随するフォルダーに必要なリソース ファイルがコピーされます。同じ場所に Install
<アプリ名>_Android.bat
というバッチ ファイルもコピーされ、アプリのインストールとリソースのデバイスへのコピーに使用できます。
iOS 向けのコンパイル
iOS デバイスと iOS シミュレーターの両方と互換性があり、あらかじめビルドされた Enlighten ライブラリが提供されます。そのうちの一部はソースとしても付属しています。これらのライブラリおよびサンプル アプリケーション (GeoMobileDemo など) をソースからビルドする場合は、適切な Xcode プロジェクトおよびワークスペースを作成する必要があります。Windows では、CodeBuildTool を使用してこのプロセスを自動化できます。また、OS X および Linux では Mono 4.0.x を使用します。たとえば、Mac OS X では、端末ウィンドウを開いて Enlighten-2.xx
ディレクトリに移動し、以下のコマンドを実行します。
mono BuildTools/CodeBuildTool.exe CreateProjects IOS Src/Enlighten.sln
これによって、iOS でサポートされる Enlighten.sln
内のすべての Enlighten ソース ライブラリおよびサンプル プロジェクトについて Xcode プロジェクトが作成され、Enlighten SDK のルート ディレクトリにある Enlighten-IOS.xcworkspace
という Xcode ワークスペースに追加されます。サンプル プロジェクトをビルドする前に、以下の 2 つの操作を実行する必要があります。
EnlightenSDK_OSX_iOS-3.x.x.zip
の中身を抽出し、ソースとして提供されていない Enlighten ライプラリを、IOS-Debug
ディレクトリおよびIOS-Release
ディレクトリから Xcode ワークスペース ビルド結果ディレクトリにコピーします。デフォルトでは、デバッグ ビルド構成の場合、コピー先ディレクトリはEnlightenSDK-3.x.x/DerivedData/Enlighten-IOS/Build/Products/Debug-iphoneos/
です。EffectsBuildTool_OSX
ディレクトリをEnlightenSDK_OSX_iOS-3.x.x から EnlightenSDK-3.x.x/BuildTools
ディレクトリにコピーします。
外部ライブラリ
CodeBuildTool を初めて実行すると、不足しているライブラリが出力に報告されます。このようなライブラリは、DXSDK_DIR
などの環境変数を探して検索されます。環境変数が設定されていないか、誤って設定されている場合は、それが報告されてビルドが停止します。
サンプル フレームワーク ツール
サンプル フレームワーク アプリケーション用のシェーダーおよび関連するサポート ファイルを再ビルドするために、いくつかのプラットフォーム固有のツールが配布パッケージに付属しています。プラットフォームごとのサポート パッケージが SDK 上に展開されていれば、これらは自動的に検索されます。
C# コンパイラーの警告
Visual Studio の MSBuild 環境では、インストール時に ATL/MFC
コンポーネントが選択され、C++ リンカー パスにこれらのパスが追加されていることを想定しています。C++ プロジェクトから C# プロジェクトをビルドする場合はこれらのパスが継承されます。C# コンパイラーが使用しない場合でも $(LibraryPath)
のすべてのエントリが確認され、1 つでも見つからない場合は停止します。以下のような方法で修正できます。
- Visual Studio ではなくコマンド ラインからビルドする
- Visual Studio で
GeoRadiosity/GeoPrecomp2
などのプロジェクトの Library ディレクトリをクリアする (プロジェクト、VC++ ディレクトリを右クリック) - ATL/MFC コンポーネントをインストールする
- 指定された場所に空のディレクトリを作成する
IDE の使用法
提供される Visual Studio ソリューションは上記のターゲット構成をすべてビルドできますが、特定のツールセットを使用するには、構成ファイルの編集が必要になる場合もあります。たとえば、ソリューション ウィンドウには Win32 のエントリが 1 つしかないため、BuildTools/Geomerics.Cpp.props
ファイルで使用するツールセットのマッピングを提供します。ここで $(Platform)=='Win32'
の等式を変更した場合、VS2010 から VS2012、または VS2012 から VS2010 をビルドできます。IDE を変更する場合、コンパイルで使用するツールセットが自動的に変更されるわけではないことに注意してください。
コンパイル フラグ
以下のようにビルドの前に環境変数を設定することで、使用した正確なコマンド ライン、およびコンパイラーに渡されたすべてのオプションを表示できます。
CD /d E:\Enlighten_3.xx SET geo.PrintDebugInfo=true BuildTools\CodeBuildTool build DEBUG_WIN32_2010 Projects\GeoRadiosity\GeoRadiosity.vcxproj
これによって、見つかったライブラリの場所だけでなく、コンパイラーに渡されたすべてのフラグおよび #define を検証できます。
詳細なデバッグを行うための .cmd
バッチ ファイルが build/Intermediate
フォルダーにあります。これらのファイルは、ツール (コンパイラー/リンカーなど) を呼び出すたびに生成されます。これらのファイルは使用した正確なコマンド ラインを示します。ただし、これらは依存関係追跡システムの副産物であり、実行のたびに書き込まれても、実行はされないことに注意してください。