zig-cross について
Zig のクロスコンパイルをエージェント向けに案内するスキルです。ターゲット選択、CPU 機能、C のビルド、ベアメタル、WebAssembly を扱い、Zig の機能を使ってシステム用クロスツールチェーンなしで進めます。
主な機能
- 01ターゲットトリプルの選択
- 02CPU 機能ターゲットの設定
- 03zig cc による C のクロスコンパイル
- 04組み込みベアメタルのビルド
- 05WebAssembly の生成
活用シーン
- 01ARM や別 OS 向けの Zig プログラムのビルド
- 02Windows や Linux 向け C プロジェクトのコンパイル
- 03ベアメタル MCU 用ファームウェアの作成
- 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-gnu | Linux x86-64(glibc) |
x86_64-linux-musl | Linux x86-64(musl、静的リンク) |
aarch64-linux-gnu | ARM64 Linux(Pi 4、AWS Graviton) |
aarch64-linux-musl | ARM64 Linux 静的リンク |
armv7-linux-gnueabihf | ARM 32 ビット Linux(Pi 2/3) |
x86_64-windows-gnu | Windows x86-64 |
aarch64-macos-none | macOS Apple Silicon |
x86_64-macos-none | macOS Intel |
wasm32-freestanding | WASM(ブラウザー、OS なし) |
wasm32-wasi | WASI 搭載の WASM |
thumbv7m-freestanding-eabi | Cortex-M3 ベアメタル |
thumbv7em-freestanding-eabihf | FPU 搭載の Cortex-M4/M7 |
riscv32-freestanding | RISC-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を使用してください
コメント
Markdown 対応