参考https://zhuanlan.zhihu.com/p/258394849
$ mkdir ~/work/riscv64-linux -p
$ sudo mkdir /opt/riscv64
$ cd ~/work/riscv64-linux
$ git clone https://gitee.com/mirrors/riscv-gnu-toolchain
$ cd riscv-gnu-toolchain
$ git rm qemu
$ git submodule update --init --recursive
$ echo $?
$ ./configure --prefix=/opt/riscv64 2>&1 | tee log_config
$ echo $?
$ sudo make linux 2>&1 | tee log_build
$ echo $?
$ export PATH="$PATH:/opt/riscv64/bin"
$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/opt/riscv64/libexec/gcc/riscv64-unknown-linux-gnu/11.1.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /home/suweishuai/work/riscv64-linux/riscv-gnu-toolchain/riscv-gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/opt/riscv64 --with-sysroot=/opt/riscv64/sysroot --with-pkgversion=g --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././riscv-gcc --disable-multilib --with-abi=lp64d --with-arch=rv64imafdc --with-tune=rocket --with-isa-spec=2.2 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.1.0 (g)
$ which riscv64-unknown-linux-gnu-gcc
/opt/riscv64/bin/riscv64-unknown-linux-gnu-gcc
$ ls /opt/riscv64/bin/
riscv64-unknown-linux-gnu-addr2line riscv64-unknown-linux-gnu-gdb
riscv64-unknown-linux-gnu-ar riscv64-unknown-linux-gnu-gdb-add-index
riscv64-unknown-linux-gnu-as riscv64-unknown-linux-gnu-gfortran
riscv64-unknown-linux-gnu-c++ riscv64-unknown-linux-gnu-gprof
riscv64-unknown-linux-gnu-c++filt riscv64-unknown-linux-gnu-ld
riscv64-unknown-linux-gnu-cpp riscv64-unknown-linux-gnu-ld.bfd
riscv64-unknown-linux-gnu-elfedit riscv64-unknown-linux-gnu-lto-dump
riscv64-unknown-linux-gnu-g++ riscv64-unknown-linux-gnu-nm
riscv64-unknown-linux-gnu-gcc riscv64-unknown-linux-gnu-objcopy
riscv64-unknown-linux-gnu-gcc-11.1.0 riscv64-unknown-linux-gnu-objdump
riscv64-unknown-linux-gnu-gcc-ar riscv64-unknown-linux-gnu-ranlib
riscv64-unknown-linux-gnu-gcc-nm riscv64-unknown-linux-gnu-readelf
riscv64-unknown-linux-gnu-gcc-ranlib riscv64-unknown-linux-gnu-run
riscv64-unknown-linux-gnu-gcov riscv64-unknown-linux-gnu-size
riscv64-unknown-linux-gnu-gcov-dump riscv64-unknown-linux-gnu-strings
riscv64-unknown-linux-gnu-gcov-tool riscv64-unknown-linux-gnu-strip
$ riscv64-unknown-linux-gnu-gcc -Q --help=target
The following options are target specific:
-mabi= lp64d
-malign-data= xlen
-march= rv64imafdc
-mbig-endian [disabled]
-mbionic [disabled]
-mbranch-cost=N 3
-mcmodel= medlow
-mcpu=PROCESSOR
-mdiv [enabled]
-mexplicit-relocs [enabled]
-mfdiv [enabled]
-mglibc [enabled]
-misa-spec= 2.2
-mlittle-endian [enabled]
-mmusl [disabled]
-mplt [enabled]
-mpreferred-stack-boundary= 0
-mrelax [enabled]
-mriscv-attribute [disabled]
-msave-restore [disabled]
-mshorten-memrefs [enabled]
-msmall-data-limit=N 8
-mstack-protector-guard-offset=
-mstack-protector-guard-reg=
-mstack-protector-guard= global
-mstrict-align [enabled]
-mtune=PROCESSOR rocket
-muclibc [disabled]
Supported ABIs (for use with the -mabi= option):
ilp32 ilp32d ilp32e ilp32f lp64 lp64d lp64f
Known code models (for use with the -mcmodel= option):
medany medlow
Supported ISA specs (for use with the -misa-spec= option):
2.2 20190608 20191213
Known data alignment choices (for use with the -malign-data= option):
natural xlen
Valid arguments to -mstack-protector-guard=:
global tls