RISCV 外部GCC 工具链安装@FreeBSD15

embedded/2024/11/15 4:47:55/

交叉编译的时候,可以使用FreeBSD15默认的工具链:LLVM

也可以使用GCC工具链,GCC可以使用现成pkg包安装,也可以编译安装。

LLVM的特点是高移植性和高效,但学习成本高。GCC的特点是成熟稳定,但优化能力有限。

本文档主要介绍GCC工具链的安装。

外部GCC 工具链pkg包安装

FreeBSD系统下最快捷的方法就是用pkg进行安装。

sudo pkg install riscv64-gcc9 riscv64-binutils

安装库之前可以先配置pkg 镜像以加快下载速度

sudo mkdir -p usr/local/etc/pkg/repos/
sudo vi /usr/local/etc/pkg/repos/FreeBSD.conf

加入内容:
FreeBSD: {
  url: "http://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/latest",
}

手工构建GCC 工具链

设置工具链安装目录

注意是在csh 环境哦,先设立PREFIX环境变量。

setenv PREFIX $HOME/riscv

pkg安装需要的包

sudo pkg install bison gmp mpfr mpc gawk gsed pkgconf texinfo

下载riscv-gnu-toolchain源码

首先安装git

pkg install git

下载gcc toolchain源码

git clone https://github.com/freebsd-riscv/riscv-gnu-toolchain

recursive toolchain源码

cd riscv-gnu-toolchain

git submodule update --init --recursive

注意对国内来说,git submodule update --init --recursive要花很多时间,并且可能要尝试多次。

编译

./configure --prefix=$PREFIX

gmake -j16 freebsd

总结

这里走弯路了,其实直接用系统默认的LLVM就行了,除非有GCC情节。

直接用pkg安装GCC就可以了,除非有源码编译情节。


http://www.ppmy.cn/embedded/39194.html

相关文章

[uniapp] 配置ts类型声明

我想引进图片,但是报错 声明一下就行 TypeScript 支持 | uni-app官网 创建tsconfig.json文件,复制官网的配置 然后在随便一个目录下写一个随便名字的.d.ts文件 例如这样 保存就行 因为ts是默认扫描全部的,所以要按照官网的写法 把不必要的排除掉就行,免得浪费性能

98、技巧-颜色分类

思路 这道题的思路是什么,首先典型荷兰国旗问题: 该问题的关键在于我们要将所有的0放到数组的前部,所有的1放在中间,所有的2放在后部。这可以通过使用两个指针,一个指向数组开头的“0”的最后一个位置,另…

Java入门基础学习笔记13——数据类型

数据类型的分类: 基本数据类型 引用数据类型 基本数据类型:4大类8种类型: 定义整形用int,再大的数用long。 package cn.ensource.variable;public class VariableDemo2 {public static void main(String[] args) {//目标&#x…

什么是 AI Agent ?

(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 讲解的同时,也给你推荐一些实用的学习资源。 AI agent (智能体 / 代理)这个词儿最近非常流行,似乎「大语…

codeforces round 875 div2(a,b,c)

题目链接 正常难度 A #include<bits/stdc.h>using namespace std;#define ing long longvoid solve() {int n;cin>>n;vector<int>a(n1);for(int i1;i<n;i)cin>>a[i];for(int i1;i<n;i){cout<<abs(n1-a[i])<< ;}cout<<\n; }s…

Linux系统调用mmap

0 前言 《Linux系统调用》整体介绍了系统调用,本文重点分析其中mmap的实现与使用方法。 1 定义 1.1 x86 (1)linux-2.6.31- 采用老式定义方法: asmlinkage long sys_mmap(unsigned long addr, unsigned long len,unsigned long prot, unsigned long flags,unsigned long…

Java 多线程补充

线程池 Java线程池是一种能够有效管理线程资源的机制&#xff0c;它可以显著提高应用性能并降低资源消耗。 线程池的主要优点包括&#xff1a; 资源利用高效&#xff1a;通过重用已存在的线程&#xff0c;减少了频繁创建和销毁线程带来的系统开销。响应速度提升&#xff1a;…

uniapp遍历数组对象的常见方法

在 UniApp 中&#xff0c;遍历数组对象的方法与在普通 JavaScript 中是相同的。UniApp 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;因此你可以使用 Vue.js 和 JavaScript 的语法来遍历数组对象。 以下是一些常见的遍历数组对象的方法&#xff1a; 使用 for 循环 …