可視化ソフトウェアParaViewのビルド・コンパイルを容易に行うためのParaView-Superbuildについて
ParaView-Superbuild
をもとに説明します。
導入 †
ParaView-Superbuild(以下、superbuildと呼ぶ)は、ParaViewおよび、その依存ライブラリをビルドするためのプロジェクトです。ParaView自体は、外部依存ライブラリがビルド・マシン上ですでに利用できる状況であれば、簡単にビルドすることができます。しかし、そうでない場合、ParaViewの外部依存ライブラリのいくつか(例えば、Qt, CGNS, FFMEG等)をビルドするのはうんざりさせられます。また、再頒布用のバイナリを生成するときは、これら依存ライブラリをパッケージ化するのに、余計に気を付ける必要があります。これらの場合をサポートし、余裕ある生活を実現するため、superbuildプロジェクトが誕生しました。
superbuildは主に、ParaView公式バイナリをビルドするために設計されましたが、通常のビルドや様々なスーパーコンピュータシステムへのインストールにも利用されています。
ソースの取得 †
superbuildのソースコードを取得するためには、Gitを使用して、クローンを作成します。
$ git clone --recursive https://gitlab.kitware.com/paraview/paraview-superbuild.git
ビルド †
supberbuildはMakfileやNinja CMakeジェネレータを使用して、ビルドすることができます。XcodeやVisual StudioなどのIDEジェネレータはサポートしていません。
バージョンを指定したビルド †
superbuildのバージョン付けはParaViewと同じバージョン付けで、ParaViewの全てのリリースに対応するタグが付いています。例えば、ParaViewのバージョン5.7.1をビルドするときは、ParaViewおよびsuperbuildのタグv5.7.1をcheckoutします。
現在使用可能なタグは、使用可能なタグにあります。
superbuildのgitレポジトリから特定のタグをchekoutするためには以下のようにします:
$ cd paraview-superbuild
$ git fetch origin # ensure you have the latest state from the main repo
$ git checkout v5.7.1 # replace `v5.7.1` with tag name of your choice
$ git submodule update
checkoutが終了しましたら、paravie-superbuildディレクトリの外に、ビルド用のディレクトリを作成し、cmakeします。
$ cd ..
$ mkdir sb_build
$ cd sb_build
$ cmake ../paraview-superbuild
superbuildは、選択されたバージョンのParaViewをビルドするときに使用されるルールを全て管理しています。また、使用するsuperbuildのバージョンと異なるバージョンのParaViewをビルドすることも可能です。例えば、v5.7.1のsuperbuildを用いて、最新のマスター(開発版)バージョンのParaViewや個別に作成したbranchをビルドすることができます。これには、まず適切なバージョンのsuperbuildをcheck outし、その後、どのParaViewを使用するかを決めるCMakeの変数を設定します。superbuildがソースパッケージをどのように見つけるかを制御する方法はいくつかあります:
- ParaViewのソースコードをgitを用いてcheckoutしたい場合(デフォルト)、paraview_SOURCE_SELECTIONにgitを設定し、paraview_GIT_REPOSITORYにクローンしたいParaViewのgitレポジトリを設定します(デフォルトではParaViewの公式レポジトリが指定れています)。それから、paraview_GIT_TAGに特定のタグ名または、選択したレポジトリで利用可能なbranchを指定します。最新の開発版はmasterを、5.7.1のリリース版は5.7.1を、最新の安定リリース版はreleaseを使用します。または、特定のParaView commit HSAも指定できます。この設定により、superbuildをビルドすときに、ParaViewのgitレポジトリから自動的に適切なリビジョンをcloneし、checkoutします。
- superbuildにParaViewのソースコードをcloneとupdateをさせる代わりに、手動でcheck outし、必要な場合はupdateすることもできます。この設定を使用するためには、paraview_SOURCE_SELECTIONにsourceを指定し、paraview_SOURCE_DIRにParaViewのソースコードのあるディレクトリを指定します。必要となるパッケージをダウンロードさせる方法は、下記の「オフライン・ビルド」を参照ください。
- 別の方法として、ParaViewのリリース版のソースコードのtarballを使用する方法があります。このためには、paraview_SOURCE_SELECTIONに5.7.1を指定します。superbuildは、リリースの準備段階でのリリース候補と同様に、最新の安定リリース版を提供します。これは、ParaViewのリリース版をビルドする最もよい方法です。
NOTE: superbuildのバージョンを5.2以前に変更する場合は、このページの記述は役に立ちません。現在のsuperbuildは5.2に対して、リファクタリングと変更が行われたためです。古いバージョンについての説明は、Wikiを参照ください。
NOTE: このREADMEは各バージョン毎にアップデートされるので、特定のバージョンをcheckoutした後は、そのバージョンに対応するREADMEを参照ください。
増分ビルド †
superbuildはsuperbuild内のソースコードの改変に対して、やや単純な扱いをしています。すなわち、各プロジェクトの全てのソースを追跡しておらず、代わりに、どのステップまで実行されたかを示す"stamp files"を見ています。
サブプロジェクトのソースが変更された場合は、そのプロジェクトのビルドステップに対応する"stamp file"を削除するのが正解です:
$ rm superbuild/$project/stamp/$project-build
それからsuperbuildのそのビルドをやり直します。
プロジェクトと機能 †
superbuildは複数のプロジェクトを含んでおり、それらはビルドされるParaViewに異なる機能を付加するために使用されます。ほとんどのプロジェクトは、ダウンロードと最終パッケージへの機能追加を行いますが、ParaView自体の機能を有効にするためのものも少数存在します。
paraviewプロジェクトは、ParaViewをビルドするためには、有効である必要があります。
paraviewsdkプロジェクトは、ParaViewを開発するのに便利なヘッダーとライブラリを含んだパッケージをビルドします。(今のところ)Linuxでのみ利用可能です。
paraviewwebプロジェクトは、ウェブサービスをパッケージに追加します。
paraviewgettingstartedguide、paraviewtutorial、paraviewtutorialdata、paraviewusersguideパッケージは、パッケージにドキュメントを追加します。
ParaViewは複数のレンダリングエンジン(egl、mesa、osmesa、qt5)をサポートしています。これらは全て、お互いに両立しません。このいずれも選択しない場合は、UIのないParaView(基本的にはpvpython)がビルドされます。WindowsとmaxOSでは、qt5レンダリングのみが利用可能です。
pythonパッケージは、パケージのPythonサポートを有効にするために使用されます。加えて、matplotlibとnumpyパッケージが利用可能です。
以下のパッケージはParaView本体で機能を有効にします:
- adios:ADIOSファイルフォーマットの可視化データに対するreaderとwriterを有効にします。
- las:LASファイルフォーマットのreaderを有効にします。
- cosmotools:Cosmoファイルフォーマットのreaderおよび、関連するフィルターとアルゴリズムを有効にします。
- ffmpeg:macOSとLinuxにたいする動画エンコードライブラリを有効にします。
- ospray:Intelのレイ・トレーシングのバックエンドを有効にします。
- silo:Siloファイルフォーマットのreaderをサポートします。
- tbb:VTKやParaViewの様々なフィルターやアルゴリズムの並列処理の改善をサポートします。
- visitbridge:VisItプロジェクトで提供されるファイルフォーマットに対するreaderを有効にします。
- vortexfinder2:渦度を可視化、解析するためのツール群を有効にします。
- vtkm:VTK-mによるフィルターの加速をサポートします。
- xdmf3:HDF5のtopでメタファイルフォーマットをビルドします。
オフライン・ビルド †
superbuidはdownload-allターゲットがあり、現在設定されたビルドに必要な全てのファイルをネットワークからダウンロードします。デフォルトでは、それらはビルドツリー内のdownloadsに保存されます。このsuperbuildとdownloadsのツリーをネットワークにつながっていないマシンにコピーし、 superbuild_download_location変数を使って(あるいはデフォルトの場所において)、このツリーを指定します。
インストール †
superbuildはSUPERBUILD_DEFAULT_INSTALL変数で、テンプレートパッケージを選択することにより、installターゲットをサポートします。デフォルトで利用可能なものは、プラットフォームと選んだプロジェクトによりますが、以下が使用可能な値です:
- paraview/ZIP
- paraview/DragNDrop
- paraview/TGZ
- paraview/TXZ
- paraviewsdk/TGZ
- paraviewsdk/TXZ
CMakeのキャッシュ・エディター(ccmakeとcmake-gui)は、サポートしているオプションをドロップダウンで表示します。
選択したパケージ・ロジックはParaViewと依存ライブラリを、パケージの中に保存するのではなく、CMAKE_INSTALL_PREFIXの中にインストールするために使用されます。例えば、DragNDropジェネレータは、.appバンドルを生成しますが、TGZとZIPジェネレータは、bin/とlib/などの標準的なディレクトリを使用します。
注意
paraview_SOURCE_SELECTIONでgitを使用すると、installターゲットを使うと、外部プロジェクトのメカニズムにおける制限やCPackの動作により、ビルドが再び走り出します。これを避けるためには、2つの方法があります:
- SUPERBUILD_OFFLINE_BUILDオプションをONに設定し、configure/buildステップとgit updateステップを切り離します。
- 最初のビルドで、通常のmake && make installするのではなく、installターゲットを使用します。
外部プラグイン †
superbuildはparaviewexternalpluginsプロジェクトを使用して、ParaViewに多くのプラグインのビルドをサポートします。例えば、2つの外部プラグインaとbをビルドするためには、以下の設定をする必要があります:
- ENABLE_paraviewexternalplugins:BOOL=ON:外部プラグインの有効化
- paraview_PLUGINS_EXTERNAL:STRING=a;b:ビルドするプラグインのリスト
- paraview_PLUGIN_a_PATH:PATH=/path/to/plugin/a:プラグインaのソースコードディレクトリ。これは、ParaViewが拾えるようにplugins.cmakeファイルを含む必要があります。
- paraview_PLUGIN_b_PATH:PATH=/path/to/plugin/b:プラグインがbである以外は、上と同様。
CMakeの変数 †
スタイル・ガイド
現在、全てのプロジェクトと設定変数がこのスタイル・ガイドにしたがう訳ではないですが、新しいプロジェクトはこの決まりを使う必要があります。一方、既存のプロジェクトを設定変数は、徐々にこれにしたがうようになるでしょう。
- 与えれらたプロジェクト名への参照は、すべて小文字となります。
- 変数名内の単語の区切りはアンダースコアを使用します。
- プロジェクトの設定変数は、小文字のプロジェクト名に大文字の設定名が続きます。例えば:
- mesa_USE_SWR:(OS)Mesaに対してOpenSWRドライバーを有効
- ospray_BUILD_ISA:OSPrayのビルドに対してSIMDアーキテクチャを選択
- プロジェクトにあるprojectname.cmakeファイル内の変数は全て小文字とします。
- 複数バージョン:
- プロジェクトの複数バージョンを許すために、superbuild_set_selectable_sourceマクロを使用します。
- ソースの選択バージョンは数値で指定します。つまり、"v"や"V"の接頭辞は使いません。
- プロジェクトがリリースの候補のサイクルにあるときは、利用可能となる追加ソースにはRCを追加します。最終リリースの時に、全てのRCはアップデートリリースに置き換わります。
ビルド変数
- superbuild_download_locatio(デフォルトは${CMAKE_BINARY_DIR}/downloads):ダウンロードしたソースコードを保存する場所で、ビルドディレクトリをクリーンした際に、ダウンロードディレクトリを残すために使用されます。
- SUPERBUILD_PROJECT_PARALLELISM(デフォルトは使用可能なプロセッサー数):Makefileジェネレータを使用する際に、下位プロジェクトは-jでこの数値を明示的に指定してビルドします。
- ENABLE_xxx(デフォルトはOFF):選択すると、superbuildの中にxxxプロジェクトがビルドされます。プロジェクトの変数の記述は上記を参照ください。プロジェクトのENABLE_フラグは依存するプロジェクトを有効にすると表示されません(例えば、visitbridgeはboostが必要なので、visitbridgeを有効にすると、ENABLE_boostオプションは隠れます。
- USE_SYSTEM_xxx(デフォルトはOFF):選択すると、superbuild内でxxxプロジェクトをビルドする代わりに、すでにシステム内にあるビルド環境を使用します。全てのプロジェクトをサポートしていません(この場合、フラグは利用できません)。
次のフラグは、ParaViewに直接影響します。
- paraview_SOURCE_SELECTION(デフォルトは5.8.0-RC1):ParaView本体で使用するソースコードを指定します。バージョン番号を指定すると、ウェブサイトにある対応するリリースのtarballを使用します。sourceを選択すると、paraview_SOURCE_DIR変数で指定したディレクトリにあるParaViewソースコードを使用します。gitを選択すると、superbuildはparaview_GIT_REPOSITORYやparaview_GIT_TAGで指定したgitレポジトリからParaViewをcloneしビルドします。デフォルトでは、公式レポジトリにあるmaster branchが使用されます。
Note: sourceを選択すると、ソースツリーを変更してからsuperbuildをビルドしても、ParaViewはリビルドされません。これは、subperbuildが存在しているソースツリーを見ないからです。
- CMAKE_BUILD_TYPE_paraview(デフォルトはsuperbuildを同じ):ParaViewはsuperbuildのそれ以外のプロジェクトと異なるビルドタイプをこの変数で指定して、ビルドできます(例えば、ReleaseとRelWithDebInfo)。
- BUILD_SHARED_LIBS_paraview(デフォルトはsuperbuildと同じ):ParaViewはsuperbuildで設定したBUILD_SHARED_LIBSフラグと異なる設定でビルドできます(BUILD_SHARED_LIBS以外の設定はsuperbuildと同じ)。例えば、ParaViewは静的にビルドし、superbuild内の他のプロジェクト(MPI, Pythonなど)はsharedでビルドする場合は、BUILD_SHARED_LIBS はONにし、BUILD_SHARED_LIBS_paraviewをOFFにします。
- PARAVIEW_BUILD_WEB_DOCUMENTATION(デフォルトはOFF):ParaViewのHTMLドキュメントをビルドします。
- mesa_USE_SWR(デフォルトはON):mesaが有効であれば、Intelのソフトウェア・ラスタライゼイションを有効にします(X86のみ)。
次のフラグはCatalystに影響します:
- PARAVIEW_INITIALIZE_MPI_ON_CLIENT (デフォルトはOn):mpiが有効で、この変数も有効なときは、GUIやpvpythonの起動時に、MPIを自動的に初期化します。いくつかのreaderは、MPI IOを使用しているので、MPIは初期化されている必要があります。したがって、普通の使用ではデフォルトのOnを使用します。しかし、いくつかのMPI実装では、MPIを初期化するソースコードを正しいmpiランチャー(例えば、mpirun)で起動する必要があり、このような場合は、オプションをOffにするのが望ましいです。注意:ParaViewのコマンドラインオプション--mpiと--no-mpiは、このオプションを上書きします。
- PARAVIEW_EXTRA_CMAKE_ARGUMENTS (デフォルトは""):この変数に設定すると、ParaViewのCMakeのconfigure時に省略されます。これは、ビルドに必要なCMake変数を設定して、superbuildのときには設定をしなくてよくします。
ParaViewのエディション
通常のParaViewビルドはいくつかのモジュールと依存関係を含みます。これらは、機能を完全装備したアプリケーションには必要ですが、例えば、insitu use-casesのような場合は、特定の機能だけに絞ってビルドした方がよいでしょう。-PARAVIEW_BUILD_EDITIONを使用すると、機能を絞ったビルドが可能です。
- CORE:ParaViewの主要な機能に必要なモジュールをビルドします。これはレンダリングを含みません。
- RENDERING:ビューとrepresentationsを含むレンダリングに必要なモジュールをビルドします。これは、CORE内のモジュールも全て含みます。
- CATALYST:in situ use casesに必要なモジュールを全てビルドします。ただし、レンダリングやNetCDFやHDF5-ベースのreaderやwriterのようなオプション機能は含みません。
- CATALYST_RENDERING:CATALYSTと同じですが、レンダリングにかかわるモジュールも含みます。
- CANONICAL (default):標準のParaViewに必要なモジュールをビルドします。
パッケージ変数
- PARAVIEW_PACKAGE_SUFFIX(デフォルトは選択されたオプションに依存します):パッケージによって生成される名前に対する接尾辞を指定します。
- paraview_PLUGINS_AUTOLOAD:パッケージ化されたParaViewに自動で読み込むプラグインのリストを指定します。
バッキング †
パッケージはctestによるcpack-paraviewテストを使用してビルドされます。全ての利用可能なパッケージをビルドする最も簡単な方法は、ctest -R cpackをrunすることです。