Skip to content

ネイティブビルド ​

Suzume は C++17 の静的ライブラリとネイティブ開発者向け CLI としてビルドできます。共有 C ABI ライブラリ、辞書埋め込み、連携サンプル、WASM は任意です。

自分のプロジェクトへのリンク

このページではソースビルドの構成を説明します。インストール済みの C / C++ API、CMake ターゲット、pkg-config、所有権、ABI チェックは C / C++ ライブラリガイド を参照してください。

ソースからのビルド ​

必要環境 ​

  • C++17 対応コンパイラ(GCC 9+、Clang 10+、MSVC 2019+)
  • CMake 3.15 以降
  • ネイティブテスト(BUILD_TESTING=ON、既定)、埋め込み辞書(SUZUME_EMBED_DICT=ON)、WASM ビルド(BUILD_WASM=ON)のいずれかを使う場合は Python 3

既定のビルド ​

BUILD_CLI と BUILD_TESTING は既定で ON です。

bash
git clone https://github.com/libraz/suzume.git
cd suzume

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel

# ネイティブ CLI
build/bin/suzume-cli --help

静的ライブラリは常にビルドされます。共有 C ABI ライブラリも必要なら -DBUILD_SHARED=ON を追加します。

ビルドオプション ​

オプション既定値説明
BUILD_TESTINGONネイティブテストスイートをビルド
BUILD_WASMOFFEmscripten でビルド
BUILD_SHAREDOFF共有 C ABI ライブラリもビルド
BUILD_CLIONネイティブ開発者向け CLI をビルドしてインストール
SUZUME_EMBED_DICTOFFコンパイル済み辞書を埋め込み、辞書ファイル探索を無効化
SUZUME_LIB_SOVERSIONON共有ライブラリに VERSION/SOVERSION を付与
SUZUME_INSTALLONインストール規則と CMake/pkg-config パッケージメタデータを生成
SUZUME_BUILD_EXAMPLESOFFネイティブ C / C++ 連携サンプルをビルド
ENABLE_DEBUG_INFOネイティブ ON、WASM OFF候補の生成元を追跡
ENABLE_DEBUG_LOGネイティブ ON、WASM OFFSUZUME_DEBUG ログをコンパイル
ENABLE_COVERAGEOFFコンパイラのカバレッジ計測を追加
ENABLE_SANITIZEROFFサニタイザフラグを有効化
ENABLE_ASANOFFAddressSanitizer を選択
ENABLE_UBSANOFFUndefinedBehaviorSanitizer を選択
ENABLE_TSANOFFThreadSanitizer を選択

ENABLE_SANITIZER=ON で個別のサニタイザを選ばなかった場合は、AddressSanitizer と UndefinedBehaviorSanitizer が有効になります。

bash
cmake -S . -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_TESTING=OFF \
  -DBUILD_SHARED=ON
cmake --build build --parallel

CLI コマンドは CLI リファレンス を参照してください。

ライブラリのみのビルド ​

ビルド環境でライブラリとパッケージメタデータだけを生成する場合は、BUILD_CLI を OFF にします。

bash
cmake -S . -B build-lib \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_CLI=OFF \
  -DBUILD_TESTING=OFF \
  -DCMAKE_INSTALL_PREFIX=/opt/suzume
cmake --build build-lib --parallel
cmake --install build-lib

この構成では suzume-cli、build-dict、validate-dict を生成しません。CLI が生成する core.dic と user.dic もインストール対象外です。SUZUME_EMBED_DICT=OFF なら、コンパイル済み辞書を別にインストールするか、それを置いたディレクトリを実行時に指定してください。Options::data_directory、対応する C オプション、または SUZUME_DATA_DIR を使えます。

辞書を含む1つの静的アーカイブを作る場合は、クリーンなチェックアウトで先に辞書をビルドします。

bash
make dict
make embedded

このターゲットは SUZUME_EMBED_DICT=ON で suzume をビルドし、CLI とテストはビルドしません。埋め込み構成には make dict が生成する data/core.dic と data/user.dic が必要です。

辞書のビルド ​

辞書ビルドターゲットにはネイティブ CLI が必要です。

bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel

# data/{core,user}/*.tsv を data/{core,user}.dic にコンパイル
cmake --build build --target build-dict

# コア TSV ファイルを検証
cmake --build build --target validate-dict

BUILD_CLI=OFF の場合、どちらのターゲットも生成されません。

C / C++ サンプルのビルド ​

bash
cmake -S . -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DSUZUME_BUILD_EXAMPLES=ON
cmake --build build --parallel
ctest --test-dir build --output-on-failure -R '^suzume_example_'

make examples-test でも同じツリー内サンプルを実行できます。examples/consumer の単独プロジェクトは、インストール済みパッケージを find_package(suzume CONFIG REQUIRED) でテストします。

WASM 向けビルド ​

サポート対象の Make ターゲットは、ネイティブ CLI で全辞書をコンパイルし、Emscripten を設定してモジュールをビルドします。

bash
source /path/to/emsdk/emsdk_env.sh

make build
make wasm

# Emscripten 出力:
# bindings/wasm/dist/{suzume.wasm,suzume.js}

(cd bindings/wasm && yarn build:js)
# 追加出力:
# bindings/wasm/dist/{index.js,index.d.ts,decode.js,decode.d.ts}
# bindings/wasm/dist/{abi_labels.js,abi_labels.d.ts,abi_layout.js,abi_layout.d.ts}

make wasm-test はモジュールを再ビルドし、Vitest のバインディングテストを実行します。WASM ビルドは -Oz、LTO、例外/RTTI なし、ファイルシステムなし、辞書埋め込みです。そのため、メモリ確保失敗時は回復可能な C API エラーを返さず、モジュールを abort します。