mcpField
Z
zig-cross

zig-cross

github.com/mohitmishra786開発269503 回インストール18 週間前に更新
リポジトリ

zig-cross について

Zig のクロスコンパイルをエージェント向けに案内するスキルです。ターゲット選択、CPU 機能、C のビルド、ベアメタル、WebAssembly を扱い、Zig の機能を使ってシステム用クロスツールチェーンなしで進めます。

主な機能

  1. 01ターゲットトリプルの選択
  2. 02CPU 機能ターゲットの設定
  3. 03zig cc による C のクロスコンパイル
  4. 04組み込みベアメタルのビルド
  5. 05WebAssembly の生成

活用シーン

  1. 01ARM や別 OS 向けの Zig プログラムのビルド
  2. 02Windows や Linux 向け C プロジェクトのコンパイル
  3. 03ベアメタル MCU 用ファームウェアの作成
  4. 04ブラウザーや WASI 向け WebAssembly の生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill zig-cross

インストール後、Claude Code で/zig-crossを入力して読み込まれたか確認します。

同梱ファイルreferences/zig-target-triples.md

詳細

Zig のクロスコンパイル

目的

Zig に組み込まれているクロスコンパイルについて、ターゲットトリプルの選択、CPU 機能のターゲット指定、C プロジェクトのクロスコンパイルに使う zig cc、組み込みベアメタルターゲット、WASM 出力をエージェントに案内します。システムのクロスツールチェーンは不要です。

トリガー

  • 「Zig プログラムを ARM 向けにクロスコンパイルするには?」
  • 「Zig を別の OS 向けにビルドするには?」
  • 「Zig を使って C コードを別のプラットフォーム向けにクロスコンパイルするには?」
  • 「Zig を組み込み/ベアメタル向けにビルドするには?」
  • 「Zig で WebAssembly をターゲットにするには?」
  • 「Raspberry Pi にはどの Zig ターゲットトリプルを使えばよいですか?」

ワークフロー

1. Zig のネイティブなクロスコンパイル

Zig にはクロスコンパイル機能が組み込まれているため、純粋な Zig コードであれば、クロスツールチェーン、Docker、sysroot は不要です。

# List all supported targets
zig targets | python3 -c "import sys,json; d=json.load(sys.stdin); [print(t) for t in d['libc']]"

# Build for a specific target
zig build-exe src/main.zig -target aarch64-linux-gnu -O ReleaseFast

# With build system (pass target as option)
zig build -Dtarget=aarch64-linux-gnu -Doptimize=ReleaseFast

# Cross-compile for Windows from Linux/macOS
zig build-exe src/main.zig -target x86_64-windows-gnu

# Cross-compile for macOS from Linux (requires macOS SDK)
zig build-exe src/main.zig -target aarch64-macos-none
2. 一般的なターゲットトリプル
ターゲットトリプルプラットフォーム
x86_64-linux-gnuLinux x86-64(glibc)
x86_64-linux-muslLinux x86-64(musl、静的リンク)
aarch64-linux-gnuARM64 Linux(Pi 4、AWS Graviton)
aarch64-linux-muslARM64 Linux 静的リンク
armv7-linux-gnueabihfARM 32 ビット Linux(Pi 2/3)
x86_64-windows-gnuWindows x86-64
aarch64-macos-nonemacOS Apple Silicon
x86_64-macos-nonemacOS Intel
wasm32-freestandingWASM(ブラウザー、OS なし)
wasm32-wasiWASI 搭載の WASM
thumbv7m-freestanding-eabiCortex-M3 ベアメタル
thumbv7em-freestanding-eabihfFPU 搭載の Cortex-M4/M7
riscv32-freestandingRISC-V 32 ビットベアメタル
3. CPU 機能のターゲット指定
# Native CPU (auto-detect, only for native builds)
zig build-exe src/main.zig -mcpu native

# Baseline for architecture (most compatible)
zig build-exe src/main.zig -target x86_64-linux-gnu -mcpu baseline

# x86-64 with AVX2
zig build-exe src/main.zig -target x86_64-linux-gnu -mcpu x86_64+avx2+bmi2

# Raspberry Pi 4 (Cortex-A72)
zig build-exe src/main.zig -target aarch64-linux-gnu -mcpu cortex_a72

# Cortex-M4 with FPU
zig build-exe src/main.zig \
    -target thumbv7em-freestanding-eabihf \
    -mcpu cortex_m4+vfp4

# List CPU features for a target
zig targets | python3 -c "
import sys,json
d=json.load(sys.stdin)
for c in d['cpus']:
    if 'cortex' in c['name']:
        print(c['name'])
"
4. C のクロスコンパイルに使う zig cc

zig cc は、システムのクロスツールチェーンなしで C をクロスコンパイルします。

# Cross-compile C for ARM64 Linux
zig cc -target aarch64-linux-gnu -O2 -o myapp-arm64 main.c

# Cross-compile C for Windows
zig cc -target x86_64-windows-gnu main.c -o myapp.exe

# Cross-compile C with static musl linking
zig cc -target x86_64-linux-musl -static main.c -o myapp-static

# Use in Makefile for all platforms
CC_LINUX_AMD64 = zig cc -target x86_64-linux-gnu
CC_LINUX_ARM64 = zig cc -target aarch64-linux-gnu
CC_WINDOWS     = zig cc -target x86_64-windows-gnu
5. ビルドシステムでのクロスコンパイル
// build.zig — cross-build all targets
pub fn build(b: *std.Build) void {
    const targets = [_]std.Target.Query{
        .{ .cpu_arch = .x86_64, .os_tag = .linux, .abi = .gnu },
        .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnu },
        .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .gnu },
        .{ .cpu_arch = .aarch64, .os_tag = .macos },
    };

    for (targets) |t| {
        const target = b.resolveTargetQuery(t);
        const exe = b.addExecutable(.{
            .name = b.fmt("myapp-{s}", .{@tagName(t.cpu_arch.?)}),
            .root_source_file = b.path("src/main.zig"),
            .target = target,
            .optimize = .ReleaseFast,
        });
        b.installArtifact(exe);
    }
}
# Build all targets
zig build
# Creates: zig-out/bin/myapp-x86_64, myapp-aarch64, myapp-x86_64.exe, myapp-aarch64
6. 組み込み(ベアメタル)ターゲット
# Cortex-M4 with FPU (STM32F4xx)
zig build-exe src/main.zig \
    -target thumbv7em-freestanding-eabihf \
    -mcpu cortex_m4+vfp4 \
    -O ReleaseSmall \
    --script linker.ld
// src/main.zig — bare metal entry point
const std = @import("std");

// Custom panic handler for embedded (no OS)
pub fn panic(msg: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    // Toggle LED or halt
    while (true) {}
}

// Entry point (matches linker script)
export fn _start() void {
    main() catch |err| {
        _ = err;
        while (true) {}
    };
}

fn main() !void {
    // Hardware initialization...
}
7. WebAssembly
# WASM freestanding (browser)
zig build-exe src/main.zig \
    -target wasm32-freestanding \
    -O ReleaseSmall \
    --export=init \
    --export=update \
    -fno-entry

# WASM WASI (wasmtime, wasmer)
zig build-exe src/main.zig \
    -target wasm32-wasi \
    -O ReleaseSafe
wasmtime myapp.wasm

# Optimize WASM size
wasm-opt -Oz myapp.wasm -o myapp.opt.wasm

ターゲットトリプルのリファレンスと組み込みリンカースクリプトの設定については、references/zig-target-triples.md を参照してください。

関連スキル

  • 単一ファイルのコンパイルフラグについては、skills/zig/zig-compiler を使用してください
  • 複数ターゲットの build.zig 設定については、skills/zig/zig-build-system を使用してください
  • 必要に応じてシステムのクロスツールチェーンを設定する場合は、skills/compilers/cross-gcc を使用してください
  • Rust のクロスコンパイル方式との比較については、skills/rust/rust-cross を使用してください

コメント