Skip to content

Latest commit

 

History

History
193 lines (136 loc) · 6.57 KB

File metadata and controls

193 lines (136 loc) · 6.57 KB

ビルドガイド

必要な環境

  • コンパイラ: GCC 14 以降(必須)
    • MSVC はサポートしていません
  • C 標準: GNU C17(C17 + GNU 拡張)
    • 分岐予測ヒント(__builtin_expect)、関数属性(__attribute__)等の GNU 拡張を使用
  • ビルドツール: CMake 3.25 以上、Ninja

プラットフォーム別のセットアップ

Windows (MSYS2)

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

Linux (Debian/Ubuntu)

# 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 - Sender
  • build/<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 の詳細デバッグログを有効化

PGO (Profile-Guided Optimization) の使い方

# ステップ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

注意: プロファイル生成と使用で同じコンパイラバージョンを使用してください。

静的解析ツールのインストール

Linux (Debian/Ubuntu)

sudo apt install clang-format clang-tidy cppcheck

Windows (MSYS2 UCRT64)

pacman -S --needed mingw-w64-ucrt-x86_64-clang-tools-extra mingw-w64-ucrt-x86_64-cppcheck

macOS

brew install llvm cppcheck

注意: macOS では Homebrew の llvm に clang-format と clang-tidy が含まれます。パスを通すか $(brew --prefix llvm)/bin/clang-format のようにフルパスで実行してください。

静的解析

clang-format(コード整形)

# 整形チェック(差分表示のみ)
clang-format --dry-run -Werror src/*.c src/*.h

# 自動整形
clang-format -i src/*.c src/*.h

clang-tidy(命名規則・品質チェック)

compile_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.c

cppcheck(静的解析)

cppcheck --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