- コンパイラ: GCC 14 以降(必須)
- MSVC はサポートしていません
- C 標準: GNU C17(C17 + GNU 拡張)
- 分岐予測ヒント(
__builtin_expect)、関数属性(__attribute__)等の GNU 拡張を使用
- 分岐予測ヒント(
- ビルドツール: CMake 3.25 以上、Ninja
Windows では MSYS2 環境が必要です。
# 1. MSYS2をインストール: https://www.msys2.org/
# 2. MSYS2 UCRT64ターミナルを開いて以下を実行:
pacman -Syu
# 再起動後、再度UCRT64ターミナルを開いて以下を実行:
pacman -Syu
pacman -S --needed mingw-w64-ucrt-x86_64-toolchain# 3. CMakeとNinjaのインストール
winget install Kitware.CMake Ninja-build.Ninja# 4. GCCバージョン確認(14以上であること)
gcc --version# GCC 14のインストール(Ubuntu 24.04以降、またはPPA使用)
sudo apt update
sudo apt install gcc-14 cmake ninja-build
# デフォルトコンパイラに設定
# 既にインストールされている任意のバージョンを選択してください
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 14- Windows: Winsock2 (ws2_32.lib, mswsock.lib) - システム標準
- Linux: librt (リアルタイムライブラリ), libm (数学ライブラリ) - CMake が自動リンク
- macOS: libm (数学ライブラリ) - CMake が自動リンク
すべてのビルドは CMake プリセットで管理されています。
cmake --preset <preset> # 構成
cmake --build --preset <preset> # ビルド
ctest --preset <preset> # テスト(対応するプリセットがある場合)| プリセット | 用途 | テスト |
|---|---|---|
debug |
デバッグビルド(-O0 -g) |
ctest --preset debug |
release |
リリースビルド(-O2、LTO 有効) |
ctest --preset release |
asan |
ASan/UBSan 付きデバッグ(Linux のみ) | ctest --preset asan |
portable |
配布用(-march=native 無効) |
- |
pgo-generate |
PGO プロファイル生成(ステップ 1) | - |
pgo-use |
PGO 最適化ビルド(ステップ 2) | - |
# Debug ビルド & テスト
cmake --preset debug && cmake --build --preset debug && ctest --preset debug
# Release ビルド & テスト
cmake --preset release && cmake --build --preset release && ctest --preset release
# ASan/UBSan(Linux のみ)
cmake --preset asan && cmake --build --preset asan && ctest --preset asan
# 配布用ポータブルビルド
cmake --preset portable && cmake --build --preset portable実行ファイルは build/<preset>/ に生成されます:
build/<preset>/sender- Senderbuild/<preset>/reflector- Reflector
プリセットを使わずに個別オプションを指定する場合は cmake --preset <preset> -D<OPTION>=ON の形式で指定します。
| オプション | デフォルト | 説明 |
|---|---|---|
PORTABLE_BUILD |
OFF | 配布用ポータブルバイナリ(-march=native を無効化) |
ENABLE_LTO |
ON | リンク時最適化(ビルド時間とメモリ使用量が増加) |
ENABLE_PGO_GENERATE |
OFF | PGO プロファイルデータ生成(ステップ 1) |
ENABLE_PGO_USE |
OFF | PGO プロファイルデータを使用した最適化(ステップ 2) |
ENABLE_GRAPHITE |
OFF | Graphite 多面体ループ最適化(実験的、ISL 付き GCC が必要) |
ENABLE_REFLECTOR_DEBUG_LOG |
OFF | Reflector の詳細デバッグログを有効化 |
# ステップ1: プロファイルデータ生成用ビルド
cmake --preset pgo-generate && cmake --build --preset pgo-generate
# ステップ2: 代表的なワークロードを実行してプロファイルを収集
./build/pgo-generate/reflector &
./build/pgo-generate/sender 127.0.0.1
# ステップ3: プロファイルデータを使用した最適化ビルド
cmake --preset pgo-use && cmake --build --preset pgo-use注意: プロファイル生成と使用で同じコンパイラバージョンを使用してください。
sudo apt install clang-format clang-tidy cppcheckpacman -S --needed mingw-w64-ucrt-x86_64-clang-tools-extra mingw-w64-ucrt-x86_64-cppcheckbrew install llvm cppcheck注意: macOS では Homebrew の llvm に clang-format と clang-tidy が含まれます。パスを通すか
$(brew --prefix llvm)/bin/clang-formatのようにフルパスで実行してください。
# 整形チェック(差分表示のみ)
clang-format --dry-run -Werror src/*.c src/*.h
# 自動整形
clang-format -i src/*.c src/*.hcompile_commands.json が必要です(CMake が自動生成)。
# 単一ファイルの検査
clang-tidy -p build/debug src/sender.c
# 全ソースの検査
clang-tidy -p build/debug src/*.c src/*.h tests/*.c
# 自動修正付き
clang-tidy -p build/debug --fix src/sender.ccppcheck --enable=all --std=c17 --suppressions-list=.cppcheck-suppressions --library=posix --error-exitcode=1 --inline-suppr --check-level=exhaustive --force -I src/ src/ tests/設定ファイルの詳細は ARCHITECTURE.md を参照。
# 各ビルドディレクトリを削除
cmake -E rm -rf build/debug
cmake -E rm -rf build/release
# 全てのビルドを削除
cmake -E rm -rf build