WebCFace 2.5.2
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
3-2. Building from Source

以下はwebcfaceをソースからビルドする場合の説明です。(webcfaceをインストールした場合は不要です。)

Note
webcface ver1 をソースからビルドしたい場合は、v1 ブランチのREADMEを参照してください。

Server & Library

Requirements

  • C++17に対応したコンパイラと、Meson(>=1.3.0)、Ninja が必要です
    • ver1.11まではC++20が必要でしたが、ver2からC++17に移行しました
    • インストール済みの依存ライブラリを使用するためには CMake や pkgcong (pkg-config) も必要になります
  • Linuxはgcc-7以上とclang-7以上、MacはmacOS13(Ventura)以上、Visual Studioは2019以上でビルドできることを確認しています。 それ以前のバージョンでも動くかもしれません。
  • MinGWでもビルドできます。MSYS2のUCRT64環境でテストしていますがMINGW64やCLANG64環境でもビルドできると思います。
  • CygwinやMSYS2のMSYS環境ではasioがビルドできない(chriskohlhoff/asio#518)ため、現状ではサーバー機能を除いてクライアントのみビルドすることができます。
    • asioはCygwin32bitでビルドできると主張しているが、32bitでもなぜかビルドできないがissueを建てるのはめんどくさい
    • 仮にビルドできたとしても、curlが使用するCygwinのsocketとasioが使用するWin32のsocketが干渉して動かない気もします

Dependencies

  • webcfaceは外部ライブラリとして Asio, CLI11, Crow, curl, libvips, msgpack-cxx, spdlog, UTF8-CPP, GoogleTest(testのみ) OpenCV(exampleのみ), を使用します。
  • デフォルトではインストールされたものは一切使わず、すべてソースをダウンロードしてビルドします。
  • 2.6 システムにインストールされているものがあればデフォルトでそれを探して使用します。
  • しかしインストールされていない場合は自動的に必要なソースをダウンロードしてビルドするので、WebCFaceを使うためにこれらのライブラリをすべてインストールする必要はありません。
    • オプションでシステムにインストールされているものを探さず常にソースからビルドさせることもできます。 時間はかかりますが、動作テスト済みのバージョンの組み合わせでビルドされるので確実性が上がります。
  • これらの依存ライブラリをすべてソースからビルドし、かつWebCFaceがsharedライブラリとしてビルドされる場合は、依存ライブラリはstaticライブラリとしてWebCFace内部に埋め込まれ、シンボルも隠されます。
    • そのためビルドしたWebCFaceを他の環境に配布する場合などはシステムにインストールしたライブラリを使用しないほうが良いです。
  • libcurlはwebsocket機能を有効にする必要があるため、インストールされているlibcurlが古いもしくはwebsocketが無効になっている場合ビルド前にエラーになります。
  • crowはunix_socketの機能が実装されている必要があるため、インストールされているcrowでunix_socketが使えない場合ビルド前にエラーになります。
    • 現在はこの機能はリリースされておらず、 na-trium-144/Crow のフォークの 5f5372e のコミットでしかビルドできません。
  • OpenCVはインストールされていない場合でもソースからビルドしません。OpenCVを使ったexampleをビルドしたい場合は別途インストールする必要がありますが、example以外では使用しないのでなくても問題ありません。
Ubuntu

sudo apt install build-essential git cmake pkg-config ninja-build
  • ubuntu24.04
    sudo apt install meson
  • ubuntu22.04またはそれ以前ではaptでインストールできるmesonは古いので
    sudo apt install python3-pip
    pip install meson
# optional:
# sudo apt install libspdlog-dev libasio-dev libvips-dev
# sudo apt install libcli11-dev # (only on 22.04 or later)
# sudo apt install libmsgpack-cxx-dev # (only on 24.04 or later)

Homebrew (MacOS, Linux)

brew install cmake meson ninja
# optional:
# brew install msgpack-cxx spdlog asio cli11 utf8cpp vips curl

Visual Studio

  • Visual Studio 2019 または 2022 をインストールしてください。
    • ImageMagickをソースからビルドするために Visual C++ ATL と MFC のコンポーネントも必要になります。
    • 2017でもビルドできるかもしれません(未確認)
  • MesonとNinjaをインストールしてください。
  • Visual Studio の Developer Command Prompt からmesonコマンドを起動してください。

MSYS2 MinGW

pacman -S pactoys
pacboy -S git make gcc:p cmake:p ninja:p meson:p
# optional:
# pacboy -S msgpack-cxx:p spdlog:p asio:p cli11:p utf8cpp:p vips:p

MSYS2 MSYS

pacman -S git make gcc cmake ninja meson

Cygwin

gcc-core, gcc-g++, cmake, make, meson, pkg-config, ninja をインストールしてください

Build

git clone https://github.com/na-trium-144/webcface.git
cd webcface
meson setup build
  • Visual Studio の場合 --backend vs を指定すると Visual Studio のプロジェクトファイルを生成します
  • 2.6 buildtypeはデフォルトでdebugです。変更するには --buildtype=release または --buildtype=debug を指定してください
  • staticライブラリをビルドするには -Ddefault_library=static を指定してください
    • default_library=both は現在非対応です
  • 2.6 それぞれの依存ライブラリはまずシステムにインストールされているものを探し、見つからなければsubprojectにフォールバックします。
    • ただしlibcurlやCrowはインストールされているものが使用できない場合エラーになるため、その場合は --force-fallback-for=libcurl,Crow などとして除外する必要があります。
    • -Dwrap_mode=forcefallback とするとインストールされたものを探さずすべてソースビルドします。
    • インストールされているのに見つからない場合は環境変数の PKG_CONFIG_PATH か、引数で -Dpkg_config_path-Dcmake_prefix_path などを設定してください
  • cpp_stdはc++17以上が必要です。またcygwinではgnu++17が必要です。 (WebCFaceがsubprojectでない場合デフォルトはgnu++17,c++17)
  • warning_levelは3以下であればビルドできるはずです (WebCFaceがsubprojectでない場合デフォルトで3)。
    • warning_level=everything でビルドできるかは未確認です。
  • -Dserver=disabled でserverのビルドをオフ、 enabled でオンにできます (デフォルト(auto)はWebCFaceがsubprojectでない and cygwinでない 場合のみenabledになります)
  • -Dexamples=disabled でexampleのビルドをオフ、 enabled でオンにできます (デフォルト(auto)はWebCFaceがsubprojectでない場合のみenabledになります)
    • -Dcv_examples=disabled にするとexamplesのうちOpenCVを使うもののみをオフにすることもできます
  • -Dtests=disabled でexampleのビルドをオフ、 enabled でオンにできます (デフォルト(auto)はWebCFaceがsubprojectでない場合のみenabledになります)
    • テストが通らない場合テスト中の通信の待機時間を -Dtest_wait=100などと伸ばすとうまく行く場合があります(デフォルト=10(ms))
  • インストール先はデフォルトで /usr/local ですが、 --prefix=~/.webcface などと指定すると変更することができます
  • -Dversion_suffixでバージョン表記を変更できます
    • 例えばバージョンが1.2.0のとき
    • -Dversion_suffix=git なら git describe --tags コマンドを使用して取得した文字列 (1.2.0-x-gxxxxxxx) になります(未指定の場合のデフォルト)
    • git以外の任意の文字列の場合 -Dversion_suffix=hoge で 1.2.0-hoge になります
    • -Dversion_suffix= で 1.2.0 だけになります
  • デフォルトでは最新のWebUIがbuildディレクトリにダウンロードされます。 -Ddownload_webui=enabled とするとダウンロードできなかった場合エラーになり、 disabled にするとダウンロードしません。

setupが成功したら

meson compile -C build

でビルドします。

meson test -C build --suite webcface

でテストを実行できます。

meson install -C build --skip-subprojects

でsetup時に指定したディレクトリにインストールできます。 (staticライブラリの場合は --skip-subprojects を使用せず、依存ライブラリもインストールした方がいいかも)

WebUI

デフォルトではビルド済みのものが meson setup 時にダウンロードされますが、 -Ddownload_webui=disabled を指定した場合はダウンロードしません。 その場合は webuiのReleases からビルド済みのtar.gzのアーカイブをダウンロードしてください。

インストールする場合は (webcfaceのインストール場所)/share/webcface/dist として展開してください。
installせずに実行する場合は webcface-server のバイナリと同じディレクトリか、その1, 2, 3階層上のどこかにdistディレクトリを配置してください。

Ubuntuの場合はwebuiのReleasesにあるdebパッケージで、またhomebrewでは webcface-webui パッケージとしてWebUIだけを単体でインストールすることもできます。

または自分でビルドすることも可能です。(node.jsが必要) webcface-webui のREADMEを参照してください。

tools

https://github.com/na-trium-144/webcface-tools.git をcloneしてビルド、インストールします。 WebCFaceライブラリのビルドと同様、Mesonを使って

meson setup build
meson compile -Cbuild
meson install -C build --skip-subprojects

のようにビルド、インストールできます。

toolsのビルド時にWebCFaceライブラリが見つからないとなる場合は 環境変数PKG_CONFIG_PATH(またはmesonの引数-Dpkg_config_path)に (webcfaceのパス)/lib/pkgconfig を追加するか、 環境変数PATHに (webcfaceのパス)/bin を追加するか、 mesonの引数-Dcmake_prefix_pathにwebcfaceのパスを追加するなどすればビルドできるはずです。

webcface-toolsは外部ライブラリとして spdlog, cli11, tiny-process-library, toml++ を使用します。 システムにインストールされてなければ自動的にソースからビルドします。