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 つの部分に分かれています。

構成

構成

説明

ライブラリ サフィックス

デバッグ

デバッグ構成

_d

未確認

未確認のデバッグ構成

_u

確認済み

確認済みのリリース構成

_c

リリース

リリース構成

なし

デバッグ構成は、リリース構成とは以下の点で異なります。

  • デバッグ構成では、サポートするプラットフォーム上でデバッグ版の CRT が使用されます。
  • Visual Studio では、STL によって、_ITERATOR_DEBUG_LEVEL および _SECURE_SCL シンボルがデバッグまたはリリースのデフォルトに定義されます。
  • 未確認構成は、_ITERATOR_DEBUG_LEVEL=0 が設定されることを除いてデバッグ構成と同じです。
  • 確認済み構成は、_SECURE_SCL が設定されることを除いてリリース構成と同じです。
  • デバッグ構成では、内部アサートをテストします。失敗した場合、LOG_ASSERT ログ種別を使用して、(ブロックしない) 警告が報告されます。この内部アサートはエラー報告メカニズムとして使用するものではなく、通常使用時には追加の警告を行いません。発生した場合は、Enlighten サポートに通知してください。

すべての構成が最適化されますが、リリース構成の方がデバッグ ビルドより性能に優れています。CRT と STL の使用法に一致する構成種別を使用することをお勧めします。

Enlighten 3 プラットフォーム

プラットフォーム

説明

Win32

32 ビット Windows

Win64

64 ビット Windows

Linux32

32 ビット デスクトップ Linux (Ubuntu)

Linux64

64 ビット デスクトップ Linux (Ubuntu)

Android

32 ビット Android OS

Android64

64 ビット Android OS

XboxOne

Xbox One

PS4

PlayStation4

Vita

非推奨:PlayStation Vita

32 ビット ビルドは、以下のような一部のプロジェクトでサポートされます。

  • コア ライブラリEnlighten3、Enlighten3HLRT、EnlightenPppi、IntelTBB、Zlib
  • サンプル フレームワーク ライブラリGeoRender、GeoScene、GeoEn2Support、GeoRuntime、GeoPipeline、GeoExport
  • サンプル フレームワーク アプリケーションGeoViewer

MacOS と iOS の実装では、この外部ツールでビルドできません。これらのプラットフォームでのコンパイル手順は、以下に記載されています。

Android および iOS ライブラリの使用とコンパイルについては、モバイルのドキュメントに記載されています。Android および iOS ライブラリは、デフォルト配布パッケージとは別に配布されていることに注意してください。

ツールセット

プラットフォーム

ツールセット

説明

Win32/Win64

2012

非推奨:Visual Studio 2012 (DLL Crt)

Win32/Win64

2013

Visual Studio 2013 (DLL Crt)

Win32/Win64

2015

Visual Studio 2015 (DLL Crt)

Win32/Win64

2017

Visual Studio 2017 (DLL Crt)

Win32/Win64

14##

Visual Studio 2017 MSVC 14.##(DLL Crt)

Win32/Win64

2012ST

非推奨:Visual Studio 2012 (静的 Crt)

Win32/Win64

2013ST

Visual Studio 2013 (静的 Crt)

Win32/Win64

2015ST

Visual Studio 2015 (静的 Crt)

Win32/Win64

2017ST

Visual Studio 2017 (静的 Crt)

Win32/Win64

14##ST

Visual Studio 2017 MSVC 14.##(静的 Crt)

Linux32/Linux64

GCC

Linux 用 GCC 4.8 (i686-linux-gnu/4.8)

Linux32/Linux64

CLANG

Linux 用 Clang 3.4

Android/Android64


ARM 用 Android NDK

Android/Android64

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 ワークスペースに追加されます。ただし、ターゲットをビルドする前に、以下の操作を実行する必要があります。

  1. Xcode Preferences ウィンドウの Locations タブで、DerivedData オプションが Relative に設定されていることを確認します。これによって、ビルド結果は Enlighten-OSX.xcworkspace からの相対位置にビルドされます。
  2. EnlightenSDK_OSX_iOS-3.x.x.zip の中身を抽出し、ソースとして提供されていない Enlighten ライプラリを、OSX-Debug ディレクトリおよび OSX-Release ディレクトリから Xcode ワークスペース ビルド結果ディレクトリにコピーします。デフォルトでは、デバッグ ビルド構成の場合、コピー先ディレクトリは EnlightenSDK-3.x.x/DerivedData/Enlighten-OSX/Build/Products/Debug/ です。
  3. 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 つの操作を実行する必要があります。

  1. EnlightenSDK_OSX_iOS-3.x.x.zip の中身を抽出し、ソースとして提供されていない Enlighten ライプラリを、IOS-Debug ディレクトリおよび IOS-Release ディレクトリから Xcode ワークスペース ビルド結果ディレクトリにコピーします。デフォルトでは、デバッグ ビルド構成の場合、コピー先ディレクトリは EnlightenSDK-3.x.x/DerivedData/Enlighten-IOS/Build/Products/Debug-iphoneos/ です。
  2. 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 フォルダーにあります。これらのファイルは、ツール (コンパイラー/リンカーなど) を呼び出すたびに生成されます。これらのファイルは使用した正確なコマンド ラインを示します。ただし、これらは依存関係追跡システムの副産物であり、実行のたびに書き込まれても、実行はされないことに注意してください。