手动控制链接 sysroot (-C link-sysroot)
本文档说明如何在 wavec 中明确控制链接阶段的 sysroot。
核心原则:
--sysroot=<path>: 编译阶段(clang-c) sysroot-C link-sysroot=<path>: 链接阶段(linker) sysroot
即,分别处理编译和链接的 sysroot。
1. 为什么需要
在交叉链接中使用 -C linker=<path> 时,经常需要单独指定链接驱动程序(例如:aarch64-linux-gnu-gcc)引用的运行时路径(crt1.o、libc、libm)。
此时,不自动推断链接 sysroot,而是在 CLI 中明确传递。
2. 选项定义
2.1 -C link-sysroot=<path>
向链接阶段注入 --sysroot=<path>。
wavec -C link-sysroot=/path/to/sysroot ...
在内部,等同于 -C link-arg=--sysroot=<path>。
2.2 -C link-arg=--sysroot=<path>
继续支持现有的原始链接参数方法。
wavec -C link-arg=--sysroot=/path/to/sysroot ...
3. 验证规则
在需要链接阶段的构建中,如果以下条件同时满足,则完成 usage error。
- 使用
-C linker=... - 使用
--sysroot=<path> - 未指定链接 sysroot(
-C link-sysroot或-C link-arg=--sysroot=...)
错误消息示例:
when using -C linker=..., --sysroot=<path> is compile-stage only; pass linker sysroot explicitly with -C link-sysroot=<path> (or -C link-arg=--sysroot=<path>)
4. 使用示例
4.1 AArch64 Linux 交叉链接
wavec \
-C linker=aarch64-linux-gnu-gcc \
--sysroot=/usr/aarch64-redhat-linux/sys-root/fc43 \
-C link-sysroot=/usr/aarch64-redhat-linux/sys-root/fc43 \
build test/test93.wave \
--target aarch64-unknown-linux-gnu \
--emit=bin \
-o /tmp/test93-aarch64.bin
