Rocket

https://mp.weixin.qq.com/s/Ypjv95Yidy5Pto6u_00HKQ

简单介绍顶层目录下的Makefrag。

1. 检查RISCV环境变量是否定义:

2. 定义项目相关的变量:

3. 处理config:

其中:

a. 定义comma变量;

b. 定义space变量;

c. 把CONFIG中的逗号替换成空格,这样以逗号分隔的多个configs即变成以空格分隔,留待foreach处理;

d. 把splitConfigs中的每一个config赋值到config变量中,交给foreach的第3个参数处理:先把点替换成空格,再取最后一个。取出来的是config的类名;如果有多个类名,则以空格分隔,赋值给configBases;

e. 把configBases中的空格,替换成为下划线;(看不懂)

f. 把CONFIG_STR前面加上路径:freechips.rocketchip.system,是为long_name;

4. 定义vlsi_mem_gen的脚本:

5. 定义C++/JVM相关的参数:

6. 又把EMPTY/SPACE/COMMA定义了一遍:

相比上一遍,这一遍定义更正式一些。

7. 从.sbtopts文件中读取sbt参数:

其中:

a. 如果sbtopts_file定义的内容不为空,则读取其中内容赋值给SBT_OPTS;

8. 定义SBT命令:

9. 定义firrtl/generator命令:

10. 定义源文件:

其中:

a. scala源文件,在base_dir中查找scala文件和sbt文件;

b. 查找各个resource目录;

c. 在各个resource目录中查找资源文件;

d. scala源文件和资源文件为全部源文件;

11. 定义rocketchip.jar的生成规则:

其中:

a. 基于全部源文件,使用sbt assembly命令生成rocketchip.jar文件;

12. 定义一些变量:

13. 定义.hex/clean相关规则:

原文地址:https://www.cnblogs.com/wjcdx/p/15212039.html