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相关规则: