当前位置:网站首页>搭建 risc-v 编译环境
搭建 risc-v 编译环境
2022-08-10 06:48:00 【lqonlylove】
一、获取编译器源码
1、资源
https://github.com/riscv-collab/riscv-gnu-toolchain
国内的镜像地址:
https://gitee.com/mirrors/riscv-gnu-toolchain.git
几个 riscv-* 子模块的 gitee 镜像地址:
Submodule 'riscv-binutils' (https://gitee.com/mirrors/riscv-binutils-gdb.git) registered for path 'riscv-binutils'
Submodule 'riscv-dejagnu' (https://gitee.com/mirrors/riscv-dejagnu.git) registered for path 'riscv-dejagnu'
Submodule 'riscv-gcc' (https://gitee.com/mirrors/riscv-gcc.git) registered for path 'riscv-gcc'
Submodule 'riscv-gdb' (https://gitee.com/mirrors/riscv-binutils-gdb.git) registered for path 'riscv-gdb'
Submodule 'riscv-glibc' (https://gitee.com/mirrors/riscv-glibc.git) registered for path 'riscv-glibc'
Submodule 'riscv-newlib' (https://gitee.com/mirrors/riscv-newlib.git) registered for path 'riscv-newlib'
git clone --recursive https://gitee.com/mirrors/riscv-dejagnu.git
git clone --recursive https://gitee.com/mirrors/riscv-gcc.git
git clone --recursive https://gitee.com/mirrors/riscv-glibc.git glibc
git clone --recursive https://gitee.com/mirrors/riscv-newlib.git newlib
# riscv-binutils与riscv-gdb来自于同一个仓库,且与本地要求的文件夹名称不同,需用命令指定本地名
git clone --recursive -b fsf-gdb-10.1-with-sim https://gitee.com/mirrors/riscv-binutils-gdb.git riscv-gdb
git clone --recursive -b riscv-binutils-2.38 https://gitee.com/mirrors/riscv-binutils-gdb.git riscv-binutils
2、日志
[email protected]:~/my/gcc$ ls
gcc-linaro-6.5.0 gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar
[email protected]:~/my/gcc$ git clone https://gitee.com/mirrors/riscv-gnu-toolchain
Cloning into 'riscv-gnu-toolchain'...
remote: Enumerating objects: 8839, done.
remote: Counting objects: 100% (134/134), done.
remote: Compressing objects: 100% (124/124), done.
remote: Total 8839 (delta 79), reused 12 (delta 10), pack-reused 8705
Receiving objects: 100% (8839/8839), 5.08 MiB | 951.00 KiB/s, done.
Resolving deltas: 100% (4818/4818), done.
[email protected]:~/my/gcc$ ls
gcc-linaro-6.5.0 gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar riscv-gnu-toolchain
[email protected]:~/my/gcc$ cd riscv-gnu-toolchain/
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls
configure contrib LICENSE Makefile.in newlib qemu regression riscv-dejagnu riscv-gdb spike
configure.ac glibc linux-headers musl pk README.md riscv-binutils riscv-gcc scripts test
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-dejagnu/
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ git clone --recursive https://gitee.com/mirrors/riscv-dejagnu.git
Cloning into 'riscv-dejagnu'...
remote: Enumerating objects: 5208, done.
remote: Total 5208 (delta 0), reused 0 (delta 0), pack-reused 5208
Receiving objects: 100% (5208/5208), 3.10 MiB | 703.00 KiB/s, done.
Resolving deltas: 100% (3957/3957), done.
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-dejagnu/
aclocal.m4 ChangeLog-1992 config.sub COPYING INSTALL Makefile.am README testglue.c
AUTHORS compile configure dejagnu.h install-sh Makefile.in runtest testsuite
baseboards config configure.ac depcomp lib missing runtest.exp texinfo.tex
ChangeLog config.guess contrib doc MAINTAINERS NEWS stub-loader.c TODO
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls
configure contrib LICENSE Makefile.in newlib qemu regression riscv-dejagnu riscv-gdb spike
configure.ac glibc linux-headers musl pk README.md riscv-binutils riscv-gcc scripts test
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-gcc/
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ git clone --recursive https://gitee.com/mirrors/riscv-gcc.git
Cloning into 'riscv-gcc'...
remote: Enumerating objects: 2710459, done.
remote: Counting objects: 100% (26222/26222), done.
remote: Compressing objects: 100% (10576/10576), done.
remote: Total 2710459 (delta 18081), reused 20135 (delta 15430), pack-reused 2684237
Receiving objects: 100% (2710459/2710459), 1.43 GiB | 3.56 MiB/s, done.
Resolving deltas: 100% (2109107/2109107), done.
Updating files: 100% (100556/100556), done.
[email protected]:~/my/gcc/riscv-gnu-toolchain$
onlylo[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-gcc/
ABOUT-NLS configure gnattools libdecnumber libphobos lto-plugin mkinstalldirs
ar-lib configure.ac gotools libffi libquadmath ltoptions.m4 move-if-change
ChangeLog contrib include libgcc libsanitizer ltsugar.m4 multilib.am
ChangeLog.jit COPYING INSTALL libgfortran libssp ltversion.m4 README
ChangeLog.tree-ssa COPYING3 install-sh libgo libstdc++-v3 MAINTAINERS symlink-tree
compile COPYING3.LIB intl libgomp libtool-ldflags maintainer-scripts test-driver
config COPYING.LIB libada libhsail-rt libtool.m4 Makefile.def ylwrap
config.guess COPYING.RUNTIME libatomic libiberty libvtv Makefile.in zlib
config-ml.in depcomp libbacktrace libitm ltgcc.m4 Makefile.tpl
config.rpath fixincludes libcc1 libobjc ltmain.sh missing
config.sub gcc libcpp liboffloadmic lt~obsolete.m4 mkdep
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls
configure contrib LICENSE Makefile.in newlib qemu regression riscv-dejagnu riscv-gdb spike
configure.ac glibc linux-headers musl pk README.md riscv-binutils riscv-gcc scripts test
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-glibc
ls: cannot access 'riscv-glibc': No such file or directory
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls glibc/
[email protected]:~/my/gcc/riscv-gnu-toolchain$ git clone --recursive https://gitee.com/mirrors/riscv-glibc.git glibc
Cloning into 'glibc'...
remote: Enumerating objects: 497747, done.
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
[email protected]:~/my/gcc/riscv-gnu-toolchain$ git clone --recursive https://gitee.com/mirrors/riscv-glibc.git glibc
Cloning into 'glibc'...
remote: Enumerating objects: 497747, done.
remote: Total 497747 (delta 0), reused 0 (delta 0), pack-reused 497747
Receiving objects: 100% (497747/497747), 154.52 MiB | 2.89 MiB/s, done.
Resolving deltas: 100% (425283/425283), done.
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls glibc/
README.md
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls
configure contrib LICENSE Makefile.in newlib qemu regression riscv-dejagnu riscv-gdb spike
configure.ac glibc linux-headers musl pk README.md riscv-binutils riscv-gcc scripts test
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls newlib/
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ git clone --recursive https://gitee.com/mirrors/riscv-newlib.git newlib
Cloning into 'newlib'...
remote: Enumerating objects: 171854, done.
remote: Total 171854 (delta 0), reused 0 (delta 0), pack-reused 171854
Receiving objects: 100% (171854/171854), 100.64 MiB | 3.95 MiB/s, done.
Resolving deltas: 100% (139387/139387), done.
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls newlib/
ChangeLog configure COPYING.NEWLIB libtool.m4 MAINTAINERS mkinstalldirs symlink-tree
compile configure.ac depcomp ltgcc.m4 Makefile.def move-if-change texinfo
config COPYING djunpack.bat ltmain.sh Makefile.in newlib winsup
config.guess COPYING3 etc lt~obsolete.m4 Makefile.tpl README ylwrap
config-ml.in COPYING3.LIB include ltoptions.m4 makefile.vms README-maintainer-mode
config.rpath COPYING.LIB install-sh ltsugar.m4 missing setup.com
config.sub COPYING.LIBGLOSS libgloss ltversion.m4 mkdep src-release
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls
configure contrib LICENSE Makefile.in newlib qemu regression riscv-dejagnu riscv-gdb spike
configure.ac glibc linux-headers musl pk README.md riscv-binutils riscv-gcc scripts test
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-gdb/
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ git clone --recursive -b fsf-gdb-10.1-with-sim https://gitee.com/mirrors/riscv-binutils-gdb.git riscv-gdb
Cloning into 'riscv-gdb'...
remote: Enumerating objects: 1006157, done.
remote: Counting objects: 100% (14209/14209), done.
remote: Compressing objects: 100% (5683/5683), done.
remote: Total 1006157 (delta 9231), reused 12136 (delta 8498), pack-reused 991948
Receiving objects: 100% (1006157/1006157), 405.04 MiB | 3.82 MiB/s, done.
Resolving deltas: 100% (839032/839032), done.
Updating files: 100% (35594/35594), done.
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-gdb/
ar-lib configure depcomp gprof ltmain.sh missing sim
bfd configure.ac djunpack.bat include lt~obsolete.m4 mkdep src-release.sh
binutils contrib elfcpp install-sh ltoptions.m4 mkinstalldirs symlink-tree
ChangeLog COPYING etc intl ltsugar.m4 move-if-change test-driver
compile COPYING3 gas ld ltversion.m4 multilib.am texinfo
config COPYING3.LIB gdb libctf MAINTAINERS opcodes ylwrap
config.guess COPYING.LIB gdbserver libdecnumber Makefile.def readline zlib
config-ml.in COPYING.LIBGLOSS gdbsupport libiberty Makefile.in README
config.rpath COPYING.NEWLIB gnulib libtool.m4 Makefile.tpl README-maintainer-mode
config.sub cpu gold ltgcc.m4 makefile.vms setup.com
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls
configure contrib LICENSE Makefile.in newlib qemu regression riscv-dejagnu riscv-gdb spike
configure.ac glibc linux-headers musl pk README.md riscv-binutils riscv-gcc scripts test
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls riscv-binutils/
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ git clone --recursive -b riscv-binutils-2.38 https://gitee.com/mirrors/riscv-binutils-gdb.git riscv-binutils
Cloning into 'riscv-binutils'...
remote: Enumerating objects: 1006157, done.
remote: Counting objects: 100% (14209/14209), done.
remote: Compressing objects: 100% (5683/5683), done.
remote: Total 1006157 (delta 9230), reused 12136 (delta 8498), pack-reused 991948
Receiving objects: 100% (1006157/1006157), 405.04 MiB | 3.87 MiB/s, done.
Resolving deltas: 100% (839031/839031), done.
Updating files: 100% (37128/37128), done.
[email protected]:~/my/gcc/riscv-gnu-toolchain$
二、安装依赖(ubuntu)
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
三、配置
./configure --prefix=/home/onlylove/my/gcc/riscv --enable-multilib
[email protected]:~/my/gcc$ ls
gcc-linaro-6.5.0 gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar riscv riscv-gnu-toolchain
[email protected]:~/my/gcc$ cd riscv-gnu-toolchain/
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ls
configure contrib LICENSE Makefile.in newlib qemu regression riscv-dejagnu riscv-gdb spike
configure.ac glibc linux-headers musl pk README.md riscv-binutils riscv-gcc scripts test
[email protected]:~/my/gcc/riscv-gnu-toolchain$
[email protected]:~/my/gcc/riscv-gnu-toolchain$ ./configure --prefix=/home/onlylove/my/gcc/riscv --enable-multilib
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for fgrep... /usr/bin/grep -F
checking for grep that handles long lines and -e... (cached) /usr/bin/grep
checking for bash... /bin/bash
checking for __gmpz_init in -lgmp... yes
checking for mpfr_init in -lmpfr... yes
checking for mpc_init2 in -lmpc... yes
checking for curl... /usr/bin/curl
checking for wget... /usr/bin/wget
checking for ftp... /usr/bin/ftp
configure: creating ./config.status
config.status: creating Makefile
config.status: creating scripts/wrapper/awk/awk
config.status: creating scripts/wrapper/sed/sed
[email protected]:~/my/gcc/riscv-gnu-toolchain$
四、编译
make -j4
五、验证
[email protected]:~/my/gcc$ ls
gcc-linaro-6.5.0 gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar riscv riscv-gnu-toolchain
[email protected]:~/my/gcc$ cd riscv
[email protected]:~/my/gcc/riscv$ ls
bin include lib libexec riscv64-unknown-elf share
[email protected]:~/my/gcc/riscv$ cd bin/
[email protected]:~/my/gcc/riscv/bin$ ls
riscv64-unknown-elf-addr2line riscv64-unknown-elf-gcc-nm riscv64-unknown-elf-nm
riscv64-unknown-elf-ar riscv64-unknown-elf-gcc-ranlib riscv64-unknown-elf-objcopy
riscv64-unknown-elf-as riscv64-unknown-elf-gcov riscv64-unknown-elf-objdump
riscv64-unknown-elf-c++ riscv64-unknown-elf-gcov-dump riscv64-unknown-elf-ranlib
riscv64-unknown-elf-c++filt riscv64-unknown-elf-gcov-tool riscv64-unknown-elf-readelf
riscv64-unknown-elf-cpp riscv64-unknown-elf-gdb riscv64-unknown-elf-run
riscv64-unknown-elf-elfedit riscv64-unknown-elf-gdb-add-index riscv64-unknown-elf-size
riscv64-unknown-elf-g++ riscv64-unknown-elf-gprof riscv64-unknown-elf-strings
riscv64-unknown-elf-gcc riscv64-unknown-elf-ld riscv64-unknown-elf-strip
riscv64-unknown-elf-gcc-10.2.0 riscv64-unknown-elf-ld.bfd
riscv64-unknown-elf-gcc-ar riscv64-unknown-elf-lto-dump
[email protected]:~/my/gcc/riscv/bin$ ./riscv64-unknown-elf-gcc -v
Using built-in specs.
COLLECT_GCC=./riscv64-unknown-elf-gcc
COLLECT_LTO_WRAPPER=/home/onlylove/my/gcc/riscv/libexec/gcc/riscv64-unknown-elf/10.2.0/lto-wrapper
Target: riscv64-unknown-elf
Configured with: /home/onlylove/my/gcc/riscv-gnu-toolchain/riscv-gcc/configure --target=riscv64-unknown-elf --prefix=/home/onlylove/my/gcc/riscv --disable-shared --disable-threads --enable-languages=c,c++ --with-pkgversion=gca312387ab1 --with-system-zlib --enable-tls --with-newlib --with-sysroot=/home/onlylove/my/gcc/riscv/riscv64-unknown-elf --with-native-system-header-dir=/include --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --disable-tm-clone-registry --src=.././riscv-gcc --enable-multilib --with-abi=lp64d --with-arch=rv64imafdc --with-tune=rocket --with-isa-spec=2.2 'CFLAGS_FOR_TARGET=-Os -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-Os -mcmodel=medlow'
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (gca312387ab1)
[email protected]:~/my/gcc/riscv/bin$
边栏推荐
- 几行代码就可以把系统高崩溃;
- [Network Security] Practice AWVS Range to reproduce CSRF vulnerability
- 2022 Henan Mengxin League Game (5): University of Information Engineering K - Matrix Generation
- 数据库学习之数据类型
- Regular backup of mysql database (retain backups for nearly 7 days)
- 复杂AB实验
- Qt列表下方增加弹出加载数据提示效果
- 腾讯云宋翔:Kubernetes集群利用率提升实践
- 【Day10】进程管理命令
- 强化学习_07_DataWhale深度Q网络进阶技巧
猜你喜欢

裸辞—躺平—刷题—大厂(Android面试的几大技巧)

WooCommerce 安装和 rest api 使用

BUUCTF Notes (web)

Qt借助隐藏控件和QSS绘制重复元素

复现dns外带数据结合sqlmap
![Chapter 12 Other Database Tuning Strategies [2. Index and Tuning] [MySQL Advanced]](/img/6d/f7fffb327f3191ac4c5a3dc7808c89.png)
Chapter 12 Other Database Tuning Strategies [2. Index and Tuning] [MySQL Advanced]

Data types for database learning
![[Network Security] Practice AWVS Range to reproduce CSRF vulnerability](/img/7f/f08e429e3d8ede03a1c1754e256f99.png)
[Network Security] Practice AWVS Range to reproduce CSRF vulnerability

34. 谈谈为什么要拆分数据库?有哪些方法?

【电商业务】外行为何难区别 商品属性与商品规格
随机推荐
求问各位大佬,FLink SQL读取source的时候去指定水位线的时间字段,如果指定的这个字段中格
initramfs与initrd的区别
Grammar Basics (Judgment Statements)
复杂AB实验
【MySQL】使用MySQL Workbench软件新建表
ATH10传感器读取温湿度
程序员的十楼层。看看自己在第几层。PS:我的目标是:30岁第四层
mysql数据库定时备份(保留近7天的备份)
Log4j2基本使用
Excuse me.Oracle CDC connector supports LogMiner and XStream API two ways to capture
order by injection and limit injection, and wide byte injection
Text-to-Image最新论文、代码汇总
软件测试面试题避雷(HR面试题)最常见的面试问题和技巧性答复
深入理解LTE网络的CDRX
All articles summary directory
COLMAP+OpenMVS实现物体三维重建mesh模型
About MongoDb query Decimal128 to BigDecimal problem
2022河南萌新联赛第(五)场:信息工程大学 H - 小明喝奶茶
强化学习_03_表格方法实践(CartPole-v0 And MontoCarlo)
高级测试:如何使用Flink对Strom任务的逻辑功能进行复现测试?