编译环境
与 python 的虚拟环境类似,ruyi 包管理器工具使用 venv
命令应用配置到指定的工具链以建立编译环境。
ruyi 包管理预置的配置可以使用 ruyi list profiles
命令查看:
$ ruyi list profiles
generic
baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
sipeed-lpi4a (needs flavor(s): {'xthead'})
milkv-duo
工具链与预置配置组合
ruyi 包管理在建立编译环境之前会检查该环境是否合法,但是并不保证建立成功的环境一定可用于构建。
这里列出了经过测试可用的配置组合:
工具链(toolchain) | sysroot | 预置配置(profile) |
---|---|---|
gnu-upstream | 自带 | generic |
gnu-plct | 自带 | generic |
gnu-plct | 自带 | milkv-duo |
gnu-plct | 自带 | xiangshan-nanhu |
gnu-plct-xthead | 自带 | sipeed-lpi4a |
gnu-plct-rv64ilp32-elf | 无 | baremetal-rv64ilp32 |
llvm-upstream | gnu-upstream | generic |
llvm-upstream | gnu-plct | generic |
创建虚拟环境
ruyiSDK 包管理器工具可使用 ruyi venv
创建虚拟环境,具体的使用方法可通过 help
命令获得:
$ ruyi venv -h
usage: ruyi venv [-h] [--name NAME] [--toolchain TOOLCHAIN] [--emulator EMULATOR] [--with-sysroot] [--without-sysroot]
[--sysroot-from SYSROOT_FROM]
profile dest
positional arguments:
profile Profile to use for the environment
dest Path to the new virtual environment
options:
-h, --help show this help message and exit
--name NAME, -n NAME Override the venv's name
--toolchain TOOLCHAIN, -t TOOLCHAIN
Specifier (atom) of the toolchain package to use
--emulator EMULATOR, -e EMULATOR
Specifier (atom) of the emulator package to use
--with-sysroot Provision a fresh sysroot inside the new virtual environment (default)
--without-sysroot Do not include a sysroot inside the new virtual environment
--sysroot-from SYSROOT_FROM
Specifier (atom) of the sysroot package to use, in favor of the toolchain-included one if applicable
参考上表代入具体的参数,不同的虚拟环境创建如下:
# 使用 GNU 上游工具链配置 RISC-V 编译环境:
$ ruyi venv -t gnu-upstream generic ./generic-venv
# 使用 PLCT 工具链配置 Milkv-Duo 编译环境:
$ ruyi venv -t gnu-plct milkv-duo ./milkv-venv
# 使用 PLCT 工具链配置香山南湖编译环境:
$ ruyi venv -t gnu-plct xiangshan-nanhu ./nanhu-venv
# 使用 LLVM 上游工具链配置 RISC-V 编译环境:
$ ruyi venv -t llvm-upstream --sysroot-from gnu-upstream generic ./llvm-venv
# 使用平头哥工具链配置荔枝派 4A 编译环境:
$ ruyi venv -t gnu-plct-xthead-20231212 sipeed-lpi4a ./sipeed-venv
# 使用上游 QEMU 模拟器运行交叉编译的 RISC-V 二进制
$ ruyi venv -t gnu-plct generic -e qemu-user-riscv-upstream ./qemu-venv
# 使用平头哥 QEMU 模拟器运行交叉编译的 RISC-V 二进制
$ ruyi venv -t gnu-plct-xthead sipeed-lpi4a -e qemu-user-riscv-xthead ./xthead-qemu-venv
在虚拟环境下编译
在创建虚拟环境之前,需要先 ruyi install
安装虚拟环境中使用的编译工具链、模拟器等所需的工具。
下面以任一个编译工具链在虚拟环境中编译程序一般的操作说明操作步骤:
- 安装编译工具链
$ ruyi install gnu-upstream
- 建立编译环境
$ ruyi venv -t gnu-upstream generic venv
# -t gnu-upstream 指定了编译工具链的类型和版本(版本除非指定,默认最新);generic 表示 generic 类型的 profile;venv是自定义的虚拟环境名(相对路径目录名)
- 查看可用的工具链二进制
$ ls ./venv/bin/
riscv64-unknown-linux-gnu-addr2line riscv64-unknown-linux-gnu-gcc riscv64-unknown-linux-gnu-gfortran riscv64-unknown-linux-gnu-ranlib
riscv64-unknown-linux-gnu-ar riscv64-unknown-linux-gnu-gcc-ar riscv64-unknown-linux-gnu-gprof riscv64-unknown-linux-gnu-readelf
riscv64-unknown-linux-gnu-as riscv64-unknown-linux-gnu-gcc-nm riscv64-unknown-linux-gnu-ld riscv64-unknown-linux-gnu-size
riscv64-unknown-linux-gnu-c++ riscv64-unknown-linux-gnu-gcc-ranlib riscv64-unknown-linux-gnu-ld.bfd riscv64-unknown-linux-gnu-strings
riscv64-unknown-linux-gnu-cc riscv64-unknown-linux-gnu-gcov riscv64-unknown-linux-gnu-ldd riscv64-unknown-linux-gnu-strip
riscv64-unknown-linux-gnu-c++filt riscv64-unknown-linux-gnu-gcov-dump riscv64-unknown-linux-gnu-lto-dump ruyi-activate
riscv64-unknown-linux-gnu-cpp riscv64-unknown-linux-gnu-gcov-tool riscv64-unknown-linux-gnu-nm
riscv64-unknown-linux-gnu-elfedit riscv64-unknown-linux-gnu-gdb riscv64-unknown-linux-gnu-objcopy
riscv64-unknown-linux-gnu-g++ riscv64-unknown-linux-gnu-gdb-add-index riscv64-unknown-linux-gnu-objdump