folly - Facebookで開発および使用されているオープンソースのC ++ライブラリ。

(An open-source C++ library developed and used at Facebook.)

Created at: 2012-06-02 04:49:04
Language: C++
License: Apache-2.0

愚かさ:Facebookオープンソースライブラリ

ウクライナを支援する-ウクライナへの人道援助の提供を支援します。

何ですか?
folly

ロゴフォリー

Folly(Facebookオープンソースライブラリにちなんで大まかに頭字語)は 実用性と効率性を備えたC++14コンポーネントのライブラリ 念頭に置いて。Follyには、広く使用されているさまざまなコアライブラリコンポーネントが含まれています フェイスブックで。特に、それはしばしばFacebookの他の依存関係です オープンソースのC ++の取り組みと、それらのプロジェクトがコードを共有できる場所。

それは(競争するのではなく)製品を補完します ブーストなど、そしてもちろん。実際、私たちは私たちの定義に着手します 必要なものが利用できない場合にのみコンポーネントを所有する、または 必要なパフォーマンス プロファイルを満たしていません。私たちは削除するよう努めます 愚かさからのもの もし、いつまたはブーストはそれらを時代遅れにします。

std
std

パフォーマンスの懸念はFollyの多くに浸透しており、時には 他の方法よりも特異なデザイン( 例えば、)。全体的に良好なパフォーマンス スケールはFolly全体で統一されたテーマです。

PackedSyncPtr.h
SmallLocks.h

イントロビデオでチェックしてください

私が5歳のように説明する:愚か者

論理設計

Follyは比較的独立したコンポーネントのコレクションであり、一部は いくつかのシンボルとして単純です。内部に制限はありません 依存関係、つまり、特定のFollyモジュールが他のモジュールを使用できることを意味します 愚かなコンポーネント。

すべてのシンボルは、最上位の名前空間で定義されます。 コースマクロ。マクロ名はALL_UPPERCASEであり、接頭辞を付ける必要があります で。名前空間他の内部名前空間を定義する そのような。ユーザー コードはシンボルに依存しない それらの名前空間で。

folly
FOLLY_
folly
internal
detail

フォリーにもディレクトリがあります。この指定は、 主に、APIが時間の経過とともに大きく変化する可能性があると感じています。このコードは、 通常、まだ頻繁に使用されており、十分にテストされています。

experimental

物理設計

トップレベルでは、Follyは古典的な「吃音」スキームを使用しますブーストなどで使用されます。最初のディレクトリは、 ライブラリのインストールルート(LAのバージョン管理が可能)、および2つ目は、ライブラリを次の場合に区別することです。 ファイルを含む、例えば

folly/folly
folly-1.0/
#include <folly/FBString.h>

ディレクトリ構造はフラットです(名前空間構造を模倣しています)、 つまり、精巧なディレクトリ階層がありません(可能です これは将来のバージョンで変更される予定です)。サブディレクトリには、愚行の内部およびおそらくFacebookで使用されるファイルが含まれていますが、 クライアントでの使用に十分安定しているとは見なされません。コードでは使用しないでください Follyを更新すると壊れる可能性があるファイル。

experimental
folly/experimental

サブディレクトリには、すべてのユニットテストが含まれています コンポーネント、通常はそれぞれに名前が付けられます。ディレクトリには以下が含まれます ドキュメンテーション。

folly/folly/test
ComponentXyzTest.cpp
ComponentXyz.*
folly/folly/docs

何が入っていますか?

Follyのかなりフラットな構造のため、その中に何が入っているかを確認するための最良の方法 トップレベルのfolly /ディレクトリのヘッダーを見ることです。可能な操作 ドキュメントについては、docsフォルダー、概要から始めて確認してください。

Folly は GitHub で公開されていますhttps://github.com/facebook/folly

ビルドノート

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などを呼び出して愚かさを構築します。これにより、システムにローカルにインストールされているバージョンを考慮して、すべての依存ライブラリの関連バージョンを使用してビルドできます。

それはPythonで書かれているので、あなたのPATHにはpython3.6以降が必要になります。Linux、macOS、Windowsで動作します。

folly の cmake ビルドの設定は getdeps マニフェストに保持されており、必要に応じてローカルで編集できます。

build/fbcode_builder/manifests/folly

依存 関係

LinuxまたはMacOS(自作がインストールされている)の場合は、システムの依存関係をインストールしてビルドを節約できます。

# 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

  • C ++ 14サポートでコンパイルされたブーストのバージョン。
  • GoogleTestは、Follyのテストを構築して実行するために必要です

建てる

このスクリプトは、最初に必要なすべての依存関係をダウンロードしてビルドします。 そして、Cmakeなどを呼び出して愚かさを構築します。これにより、システムにローカルにインストールされているバージョンを考慮して、すべての依存ライブラリの関連バージョンを使用してビルドできます。

getdeps.py
現在、Python 3.6+があなたの道にある必要があります。

getdeps.py
CMakeなどを呼び出します

# 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

もありますそしてもう少し提供する議論 インストールディレクトリのきめ細かな制御。しかし、それを考えると Follyは、一般的にコミット間の互換性の保証を提供しません ライブラリをビルドして一時的な場所にインストールすることを推奨し、 次に、プロジェクトのビルドをこの一時的な場所ではなく、 従来のシステムインストールディレクトリにFollyをインストールします。たとえば、CMakeでビルドしている場合は、変数を使用して、CMakeがこの一時インストールディレクトリで愚かさを見つけられるようにすることができます。 プロジェクトをビルドします。

--install-dir
--install-prefix
CMAKE_PREFIX_PATH

反復するために再び呼び出したい場合は、スクラッチビルドディレクトリに便利なスクリプト出力があります。スクラッチビルドディレクトリは、ログまたは

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.sh
LinuxおよびMacOSで使用でき、Windowsで使用することができます 代わりにスクリプト。そのラッパー
build.bat
getdeps.py

cmake で直接ビルドする

getdeps に cmake を呼び出させたくない場合は、デフォルトでは、CMaketarget の一部としてテストのビルドが無効になっています。 テストをビルドするには、構成時に CMake を指定します。

all
-DBUILD_TESTS=ON

注意:ビルドを反復処理するために再度呼び出す場合は、スクラッチパスビルドディレクトリに役立つスクリプト出力があります。スクラッチビルドディレクトリは、ログまたは

cmake
getdeps.py
run_cmake.py
python3 ./build/fbcode_builder/getdeps.py show-build-dir

ctests でテストを実行すると、ビルドディレクトリに cd した場合にも機能します (例: (cd $(python3 ./build/fbcode_builder/getdeps.py show-build-dir) && ctest)'

 

デフォルト以外の場所での依存関係の検索

boost、gtest、またはその他の依存関係がデフォルト以外にインストールされている場合 場所では、変数を使用して、CMAKEの外観もヘッダーファイルとライブラリを探すことができます 非標準的な場所。たとえば、ディレクトリも検索するには、ヘッダーファイルの場合と ディレクトリおよびライブラリの場合は、次のように呼び出すことができます。

CMAKE_INCLUDE_PATH
CMAKE_LIBRARY_PATH
/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 ...

Ubuntu LTS, CentOS Stream, Fedora

上記のアプローチを使用してください。Ubuntu LTSのCIでテストし、場合によっては他のディストリビューションでテストします。

getdeps.py

システムパッケージのセットが選択したディストリビューションに適していない場合は、依存関係マニフェストでディストリビューションバージョン固有のオーバーライドを指定できます(例:https://github.com/facebook/folly/blob/main/build/fbcode_builder/manifests/boost)。おそらく、最新のUbuntu / DebianまたはFedora / Redhat派生ディストリビューションで動作させることができます。

執筆時点(2021年12月)では、lang_badge_testのGCC 11.xベースのシステムにビルドブレークがあります。バッジ機能が必要ない場合は、CMakeListsからコメントアウトすることで回避できます.txt(残念ながらfbthriftには必要です)

ウィンドウズ (Vcpkg)

多くのテストは愚かなWindowsビルドに対して無効になっていることに注意してください、cmake構成ステップからログでそれらを確認するか、WINDOWS_DISABLED

CMakeLists.txt

そうは言っても、ビルドはWindowsで動作し、CIでテストされています。

getdeps.py

必要に応じて、Vcpkgを試すことができます。 follyはVcpkgで利用可能であり、リリースはを介してビルドできます。

vcpkg install folly:x64-windows

使用することもできますに対して構築します。

vcpkg install folly:x64-windows --head
main

マック

getdeps.py
ビルドはmacOSで動作し、CIでテストされますが、必要に応じて、macOSパッケージマネージャーの1つを試すことができます

自作

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