riscv-gnu-toolchain 下载、编译

本文最后更新于:Wednesday, September 30th 2020, 8:18 pm

1、前言

riscv-gnu-toolchain 是学习 risc-v 的前提,但是网上对这方面的介绍很少,并且工具链种类繁多,很可能让我们摸不清头脑。

2、下载篇

由于riscv-gnu-toolchain包含有好多第三方库,整个项目文件很大[官方说的是6.65GB],加上国内GitHub堪比🐢速,你多半是不可能按官方教程下下来。

项目名称项目描述项目用途
qemu模拟器(类似bochs,PearPC)
riscv-binutils开发工具(compiler、assemble、linker、debugger…)
riscv-dejagnu测试其它程序的框架(framework)
riscv-gccGNU Compiler Collection
riscv-gdb同riscv-binutils
riscv-glibcGNU C Library(system-API,其它的语言也通过它访问OS)
riscv-newlib一套开发工具(用的库有别于riscv-binutils)

binutils 和 newlib 之间的区别(坑待填o_o ….)

Prerequisites

PC: x86

OS: Ubuntu 20.04.1 LTS

VM: wmware15.5Pro


  1. 下载源代码(推荐使用hub.fastgit.org镜像站,比原生站快几百倍)

    1
    2
    3
    git clone https://hub.fastgit.org/riscv/riscv-gnu-toolchain
    cd riscv-gnu-toolchain
    git submodule update --init --recursive
  2. 安装依赖(其它系统查看官方readme)

    1
    sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

    下载失败解决方案

  3. git clone qemu下载速度太慢导致失败(因为qemu没有把项目托管在GitHub上)

    链接:https://pan.baidu.com/s/1xGrafiu4I0yPAnE0iuTYzw
    提取码:3iyy

    下载源码, 解压到相应的目录上即可。

  4. 其它模块没有拉下来。

    在源项目下挨个手动克隆。

    1
    2
    cd ~/riscv/riscv-gnu-toolchain
    git clone https://hub.fastgit.org/riscv/riscv-gcc.git

3、编译篇

1、Newlib

  • 建立一个安装路径:makdir /opt/riscv

  • [最好建立一个编译文件夹]:makdir build && cd build

  • 配置环境变量:export PATH=$PATH:/opt/riscv/bin(建议写到~/.bashrc上,永久有效

    1
    2
    ./configure --prefix=/opt/riscv
    make

    2、Linux

  • 跟上面相同的步骤,不过最好换一个干净的文件夹。

  • 默认是安装RV64GC(64-bit), 即使在32-bit的构建环境中。

    1
    2
    ./configure --prefix=/opt/riscv
    make linux
  • Alternatively:(构建32-bit RV32GC)

    1
    2
    ./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d
    make linux
  • 支持的架构有:rv32i、rv64i
  • 标准扩展: (a)tomics, (m)ultiplication and division, (f)loat, (d)ouble, or (g)eneral for MAFD
  • 支持的ABIs: ilp32 (32-bit soft-float), ilp32d (32-bit hard-float), ilp32f (32-bit with single-precision in registers and double in memory, niche use only), lp64 lp64f lp64d (same but with 64-bit long and pointers).

3、Linux multilib

  • 同时支持32-bit和64-bit的Linux。

    1
    2
    ./configure --prefix=/opt/riscv --enable-multilib
    make linux

    编译出来的工具带有前缀:riscv64-unknown-linux-gnu-, 但是能编译32位和64位程序。

4、编译结果

经过漫长的等待,我终于编译Linux 64bit版本。

mark

mark

References

riscv各种版本gcc工具链编译与安装


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!