folly?
Folly (Facebook Open Source Library にちなんで略称) は、実用性と効率性を念頭に置いて設計された C++14 コンポーネントのライブラリです。Folly には、Facebook で広く使用されているさまざまなコア ライブラリ コンポーネントが含まれています。特に、Facebook の他のオープン ソース C++ の取り組みや、それらのプロジェクトがコードを共有できる場所に依存していることがよくあります。
Boost やもちろん
std. 実際、必要なものが利用できないか、必要なパフォーマンスプロファイルを満たしていない場合にのみ、独自のコンポーネントの定義に着手します。
stdブーストがそれらを時代遅れにする場合、またはいつそれらを愚かなものから取り除くよう努めます。
パフォーマンスに関する懸念は Folly の多くに浸透しており、そうでない場合よりも特異な設計につながる場合があります (たとえば
PackedSyncPtr.h、を参照
SmallLocks.h)。大規模での優れたパフォーマンスは、すべての Folly の統一テーマです。
Folly は、比較的独立したコンポーネントのコレクションであり、一部はいくつかのシンボルと同じくらい単純です。内部の依存関係に制限はありません。つまり、特定の愚かなモジュールが他の愚かなコンポーネントを使用する可能性があります。
follyもちろんマクロを除いて、すべてのシンボルは最上位の名前空間で定義されています。マクロ名は ALL_UPPERCASE で、接頭辞として
FOLLY_. 名前空間は、や
follyなどの他の内部名前空間を定義します。ユーザー コードは、これらの名前空間のシンボルに依存してはなりません。
internal
detail
Folly にも
experimentalディレクトリがあります。この指定は主に、API が時間の経過とともに大幅に変更される可能性があると考えていることを暗示しています。通常、このコードはまだ頻繁に使用されており、十分にテストされています。
folly/follyトップレベルでは、Folly はBoost などで使用されている古典的な「stuttering」スキームを 使用します。最初のディレクトリはライブラリのインストール ルートとして機能し (バージョニングの可能性
folly-1.0/あり)、2 番目のディレクトリはファイルを含めるときにライブラリを区別するためのものです (例:
#include <folly/FBString.h>.
ディレクトリ構造はフラットです (ネームスペース構造を模倣しています)。つまり、複雑なディレクトリ階層はありません (これは将来のバージョンで変更される可能性があります)。サブディレクトリ
experimentalには、folly 内で使用され、おそらく Facebook で使用されるファイルが含まれていますが、クライアントで使用するには十分に安定しているとは見なされません。
folly/experimentalFolly を更新したときに壊れないように、コードでファイルを使用しないでください。
folly/folly/testサブディレクトリには、すべてのコンポーネントの単体テストが含まれており、通常はそれぞれの名前が付けられて
ComponentXyzTest.cppいます
ComponentXyz.*。
folly/folly/docsディレクトリにはドキュメントが含まれています。
folly のかなりフラットな構造のため、その内容を確認する最善の方法は、最上位のfolly/
directoryのヘッダーを確認することです。また、概要から始めて、docs
フォルダーのドキュメントを
確認することもできます。
Folly は、 https://github.com/facebook/follyの GitHub で公開されています。
folly はコミットからコミットまでの ABI 互換性を保証しないため、一般的には folly を静的ライブラリとしてビルドすることをお勧めします。
folly は gcc (5.1+)、clang、または MSVC をサポートしています。Linux (x86-32、x86-64、および ARM)、iOS、macOS、および Windows (x86-64) で実行する必要があります。CMake ビルドは、これらのプラットフォームの一部でのみテストされています。少なくとも、macOS と Linux (最新の Ubuntu LTS リリース以降) をサポートすることを目指しています。
getdeps.py
このスクリプトは、Meta の OSS ツールの多くで使用されています。最初に必要なすべての依存関係をダウンロードしてビルドし、次に cmake などを呼び出して folly をビルドします。これにより、システムにローカルにインストールされているバージョンを考慮して、すべての依存ライブラリの適切なバージョンでビルドすることができます。
Python で書かれているので、PATH に python3.6 以降が必要です。Linux、macOS、および Windows で動作します。
folly の cmake ビルドの設定は getdeps manifest
build/fbcode_builder/manifests/follyに保持されており、必要に応じてローカルで編集できます。
Linux または MacOS (homebrew がインストールされている) の場合は、システムの依存関係をインストールしてビルドを節約できます。
# Clone the repo git clone https://github.com/facebook/folly # Install dependencies cd folly sudo ./build/fbcode_builder/getdeps.py install-system-deps --recursive
パッケージをインストールする前に確認したい場合:
./build/fbcode_builder/getdeps.py install-system-deps --dry-run --recursive
他のプラットフォーム、または Linux でシステム依存関係
getdeps.pyがない場合は、ほとんどの場合、ビルド ステップ中にそれらをダウンロードしてビルドします。
依存関係の
getdeps.py使用とインストールの一部は次のとおりです。
このスクリプトは、最初に必要なすべての依存関係をダウンロードしてビルドし、次に cmake などを呼び出して folly をビルドします。これにより、システムにローカルにインストールされているバージョンを考慮して、すべての依存ライブラリの適切なバージョンでビルドすることができます。
getdeps.py現在、python 3.6+ がパス上にある必要があります。
getdeps.pycmakeなどを呼び出します
# Clone the repo git clone https://github.com/facebook/folly cd folly # Build, using system dependencies if available python3 ./build/fbcode_builder/getdeps.py --allow-system-packages build
出力をスクラッチ領域に置きます。
installed/folly/lib/libfolly.a: としょうかん
--scratch-pathビルドに使用されるスクラッチ ディレクトリの場所を制御する引数を指定することもできます。デフォルトのスクラッチ インストールの場所は、ログから、または
python3 ./build/fbcode_builder/getdeps.py show-inst-dir
また、インストール ディレクトリをよりきめ細かく制御するための引数も
--install-dirあります。
--install-prefixただし、folly ではコミット間の互換性が保証されないため、従来のシステム インストール ディレクトリに folly をインストールするのではなく、ライブラリをビルドして一時的な場所にインストールし、プロジェクトのビルドをこの一時的な場所に指定することをお勧めします。たとえば、CMake でビルドしている
CMAKE_PREFIX_PATH場合、プロジェクトをビルドするときに CMake がこの一時的なインストール ディレクトリで folly を検出できるように、変数を使用できます。
繰り返し実行するために再度呼び出したい場合
cmakeは、スクラッチ ビルド ディレクトリに役立つ
run_cmake.pyスクリプト出力があります。スクラッチ ビルド ディレクトリは、ログから、または
python3 ./build/fbcode_builder/getdeps.py show-build-dir
デフォルトで
getdeps.pyは、愚行のテストをビルドします。それらを実行するには:
cd folly python3 ./build/fbcode_builder/getdeps.py --allow-system-packages test
build.sh/
build.batラッパー
build.shLinux と MacOS で使用できますが、Windows では
build.bat代わりにスクリプトを使用します。そのラッパーの周り
getdeps.py
getdeps に cmake を呼び出させたくない場合は、デフォルトで、CMake
allターゲットの一部としてテストのビルドが無効になっています。テストをビルドするには、
-DBUILD_TESTS=ONconfigure 時に CMake に指定します。
cmake注意: ビルドを繰り返すために再度呼び出したい場合
getdeps.pyは、scratch-path ビルド ディレクトリに役立つ
run_cmake.pyスクリプト出力があります。スクラッチ ビルド ディレクトリは、ログから、または
python3 ./build/fbcode_builder/getdeps.py show-build-dir
ctests を使用したテストの実行は、cd でビルド ディレクトリに移動した場合にも機能します
。
ブースト、gtest、またはその他の依存関係が既定以外の場所にインストールされている場合は、変数
CMAKE_INCLUDE_PATHと
CMAKE_LIBRARY_PATH変数を使用して、CMAKE が標準以外の場所にあるヘッダー ファイルとライブラリも検索するようにすることができます。たとえば、ディレクトリ
/alt/include/path1と
/alt/include/path2ヘッダー ファイルとディレクトリ
/alt/lib/path1と
/alt/lib/path2ライブラリも検索するには、次のように呼び出し
cmakeます。
cmake \ -DCMAKE_INCLUDE_PATH=/alt/include/path1:/alt/include/path2 \ -DCMAKE_LIBRARY_PATH=/alt/lib/path1:/alt/lib/path2 ...
getdeps.py上記のアプローチを使用します。Ubuntu LTS の CI でテストし、場合によっては他のディストリビューションでもテストします。
選択したディストリビューションに対してシステム パッケージのセットが適切でない場合は、依存関係マニフェストでディストリビューション バージョン固有のオーバーライドを指定できます (例: https://github.com/facebook/folly/blob/main/build/fbcode_builder/マニフェスト/ブースト)。おそらく、最新の Ubuntu/Debian または Fedora/Redhat 派生ディストリビューションで動作させることができます。
執筆時点 (2021 年 12 月) では、lang_badge_test で GCC 11.x ベースのシステムにビルドの中断があります。バッジ機能が必要ない場合は、CMakeLists.txt からコメントアウトすることで回避できます (残念ながら、fbthrift には必要です)。
愚かな Windows ビルドでは多くのテストが無効になっていることに注意してください。それらは cmake configure ステップのログで確認できます。
CMakeLists.txt
つまり、
getdeps.pyビルドは Windows で動作し、CI でテストされています。
必要に応じて、Vcpkg を試すことができます。folly はVcpkgで利用でき、リリースは 経由でビルドできます
vcpkg install folly:x64-windows。
vcpkg install folly:x64-windows --headに対してビルドするために使用することもできます
main。
getdeps.pyビルドは macOS で動作し、CI でテストされていますが、必要に応じて、macOS パッケージ マネージャーのいずれかを試すことができます
folly はフォーミュラとして利用でき、リリースは 経由でビルドできます
brew install folly。
folly/build/bootstrap-osx-homebrew.shに対してビルドするために使用することもできます
main:
./folly/build/bootstrap-osx-homebrew.sh
_buildこれにより、最上位にビルド ディレクトリが作成されます。
MacPorts から必要なパッケージをインストールします。
sudo port install \ boost \ cmake \ gflags \ git \ google-glog \ libevent \ libtool \ lz4 \ lzma \ openssl \ snappy \ xz \ zlib
ダブルコンバージョンをダウンロードしてインストールします。
git clone https://github.com/google/double-conversion.git cd double-conversion cmake -DBUILD_SHARED_LIBS=ON . make sudo make install
以下にリストされているパラメーターを使用して、folly をダウンロードしてインストールします。
git clone https://github.com/facebook/folly.git cd folly mkdir _build cd _build cmake .. make sudo make install