M1 MacOS 配置 riscv-gnu-toolchain

M1 MacOS 配置 riscv-gnu-toolchain

2024, May 07    

简介

本文章将简要讲述目前在 MacOS 上配置 riscv-gnu-toolchain 的可用方法。

项目 Availbility
riscv64-unknown-elf-gcc
riscv64-linux-gnu-gcc

前置要求

  1. brew

riscv64-unknown-elf-gcc 和 riscv64-linux-gnu-gcc 的区别

根据 RISC-V GNU Compiler Toolchain 的文档, riscv64-unknown-elf-gcc 使用的是 Newlib C函数库,riscv64-linux-gnu-gcc 使用的是linux下的 glibc 库。我还留意到二者的区别是,riscv64-unknown-elf-gccthread modesingleriscv64-linux-gnu-gccthread modeposix 。所以我在用riscv64-unknown-elf-gcc编译一个使用 antlr 库作为前端的sysy编译器时,就出现了相关的问题。

安装 riscv64-unknown-elf-gcc

brew 上提供了相应的 Formulae ,只需要这两行命令,你应该就可以安装好 riscv64-unknown-elf-gcc 相关的toolchain了。

brew tap riscv/riscv
brew install riscv-tools

在 MacOS 下安装 riscv64-linux-gnu-gcc 的失败尝试

我尝试了在 MacOS 下使用文档中的方法编译安装riscv64-linux-gnu-gcc。遇到的问题简单来说,是 riscv-gcc-stage1 在编译 gcc ,构建 riscv-gcc-stage2 时,需要使用 unwind 库。而 unwind 库目前并不支持 MacOS 。通常 Apple clang 使用的 unwind 库是其内置的“另一种没有很大关系的” unwindlibunwind。而我没有办法让 riscv-gcc-stage1 使用这个库,所以没有实现在 MacOS 下安装riscv64-linux-gnu-gcc 相关的讨论在building-libunwind-for-mac