用于RISC-V的Makefile示例
# Initialize ASM For RISC-V .section .text.entry
.option norvc
.global _start .macro push_reg
addi sp, sp, -32*4
sw x1, 0 * 4(sp)
sw x2, 1 * 4(sp)
sw x3, 2 * 4(sp)
sw x4, 3 * 4(sp)
sw x5, 4 * 4(sp)
sw x6, 5 * 4(sp)
sw x7, 6 * 4(sp)
sw x8, 7 * 4(sp)
sw x9, 8 * 4(sp)
sw x10, 9 * 4(sp)
sw x11, 10 * 4(sp)
sw x12, 11 * 4(sp)
sw x13, 12 * 4(sp)
sw x14, 13 * 4(sp)
sw x15, 14 * 4(sp)
sw x16, 15 * 4(sp)
sw x17, 16 * 4(sp)
sw x18, 17 * 4(sp)
sw x19, 18 * 4(sp)
sw x20, 19 * 4(sp)
sw x21, 20 * 4(sp)
sw x22, 21 * 4(sp)
sw x23, 22 * 4(sp)
sw x24, 23 * 4(sp)
sw x25, 24 * 4(sp)
sw x26, 25 * 4(sp)
sw x27, 26 * 4(sp)
sw x28, 27 * 4(sp)
sw x29, 28 * 4(sp)
sw x30, 29 * 4(sp)
sw x31, 30 * 4(sp)
csrr t0, mepc
sw t0, 31 * 4(sp)
.endm .macro pop_reg
lw t0, 31 * 4(sp)
csrw mepc, t0
lw x1, 0 * 4(sp)
lw x2, 1 * 4(sp)
lw x3, 2 * 4(sp)
lw x4, 3 * 4(sp)
lw x5, 4 * 4(sp)
lw x6, 5 * 4(sp)
lw x7, 6 * 4(sp)
lw x8, 7 * 4(sp)
lw x9, 8 * 4(sp)
lw x10, 9 * 4(sp)
lw x11, 10 * 4(sp)
lw x12, 11 * 4(sp)
lw x13, 12 * 4(sp)
lw x14, 13 * 4(sp)
lw x15, 14 * 4(sp)
lw x16, 15 * 4(sp)
lw x17, 16 * 4(sp)
lw x18, 17 * 4(sp)
lw x19, 18 * 4(sp)
lw x20, 19 * 4(sp)
lw x21, 20 * 4(sp)
lw x22, 21 * 4(sp)
lw x23, 22 * 4(sp)
lw x24, 23 * 4(sp)
lw x25, 24 * 4(sp)
lw x26, 25 * 4(sp)
lw x27, 26 * 4(sp)
lw x28, 27 * 4(sp)
lw x29, 28 * 4(sp)
lw x30, 29 * 4(sp)
lw x31, 30 * 4(sp)
addi sp, sp, 32*4
.endm .option norvc _start:
j handle_reset trap_vector:
j RVDefaultHandler
j RVDefaultHandler // 1
j RVDefaultHandler // 2
j RVDefaultHandler // 3
j RVDefaultHandler // 4
j RVDefaultHandler // 5
j RVDefaultHandler // 6
j RVDefaultHandler // 7
j RVDefaultHandler // 8
j RVDefaultHandler // 9
j RVDefaultHandler // 10
j RVDefaultHandler // 11
j RVDefaultHandler // 12
j RVDefaultHandler // 13
j RVDefaultHandler // 14
j RVDefaultHandler // 15
j RVDefaultHandler // 16
j RVDefaultHandler // 17
j RVDefaultHandler // 18
j RVDefaultHandler // 19
j RVDefaultHandler // 20
j RVDefaultHandler // 21
j RVDefaultHandler // 22
j RVDefaultHandler // 23
j RVDefaultHandler // 24
j RVDefaultHandler // 25 RVDefaultHandler:
j RVDefaultHandler .section .text
.option norvc handle_reset:
la t0, trap_vector
addi t0, t0, 1
csrw mtvec, t0
csrwi mstatus, 0
csrwi mie, 0
la gp, _gp
la sp, __stack_top # clear bss section
clear_bss:
la t0, __bss_begin
la t1, __bss_end
li t2, 0x00000000 clear_bss_loop:
sw t2, (t0)
addi t0, t0, 4
blt t0, t1, clear_bss_loop jump_to_main:
j main OUTPUT_ARCH("riscv")
ENTRY(_start) MEMORY
{
RAM (rwx) : ORIGIN = 0x0, LENGTH = 8K
} STACK_SIZE = 2k;
HEAP_SIZE = 2k; SECTIONS
{
.text : ALIGN(4)
{
__start_addr = .;
KEEP(*(.text.entry))
. = ALIGN(4);
*(.text*)
. = ALIGN(4);
__text_end = .;
} > RAM .data :
{
__data_load = LOADADDR(.data);
__rodata_start = .;
*(.rodata*)
. = ALIGN(4);
__rodata_end = .;
__data_start = .;
*(.data*)
. = ALIGN(4);
__data_end = .;
} > RAM .sdata :
{
__sdata_load = LOADADDR(.sdata);
__sdata_start = .;
_gp = . + 0x100;
*(.srodata*)
*(.sdata*)
__sdata_end = .;
} > RAM .bss : ALIGN(4)
{
__bss_begin = .; *(.sbss*)
*(.scommon)
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end = .;
} > RAM
_end = .; .stack : ALIGN(4)
{
__stack_bottom = .;
. += STACK_SIZE;
__stack_top = .;
} > RAM .heap : ALIGN(4)
{
__heap_begin = .;
. += HEAP_SIZE;
__heap_end = .;
} > RAM
} #***********************************************************************************************
# File : Makefile
# Author : Lyu Yang
# Date :
# Description : Makefile for RISC-V
#*********************************************************************************************** TARGET = app_test CROSS_COMPILE = riscv64-unknown-elf- SRC_DIR = .
OBJ_DIR = obj
INC_DIR = -I ./
LIB_DIR = -L ./ CC = $(CROSS_COMPILE)gcc
CFLAGS = $(INC_DIR) -c -mabi=ilp32 -march=rv32i -Wall -O1 -std=c99 -gdwarf-2 -freorder-blocks-algorithm=simple -fno-schedule-insns -fno-aggressive-loop-optimizations -fno-builtin -Wstrict-prototypes -Wno-write-strings -fno-exceptions -fno-short-enums -Wundef -falign-functions=2 -fdata-sections -ffunction-sections -fno-common CXX = $(CROSS_COMPILE)g++
CXXFLAGS = $(INC_DIR) -c -mabi=ilp32 -march=rv32i -Wall -O1 -std=c99 -gdwarf-2 -freorder-blocks-algorithm=simple -fno-schedule-insns -fno-aggressive-loop-optimizations -fno-builtin -Wstrict-prototypes -Wno-write-strings -fno-exceptions -fno-short-enums -Wundef -falign-functions=2 -fdata-sections -ffunction-sections -fno-common AS = $(CROSS_COMPILE)gcc
ASFLAGS = -c -mabi=ilp32 -march=rv32i -x assembler-with-cpp -Wall -O1 -gdwarf-2 -fstack-protector -fno-common -fdata-sections -ffunction-sections LD = $(CROSS_COMPILE)gcc
LDFLAGS = $(LIB_DIR) -mabi=ilp32 -march=rv32i -nostartfiles -Triscv.lds -Wl,-Map,$(TARGET).map OBJCP = $(CROSS_COMPILE)objcopy
OBJCPFLAGS = -O binary -j .text -j .data -j .sdata AR = $(CROSS_COMPILE)ar
ARFLAGS = cr OBJDUMP = $(CROSS_COMPILE)objdump
OBJDUMPFLAG = --disassemble --syms --all-header SIZE = $(CROSS_COMPILE)size ASMS = $(wildcard $(SRC_DIR)/*.S)
SRCS = $(wildcard $(SRC_DIR)/*.c) OBJS += $(ASMS:$(SRC_DIR)/%.S=$(OBJ_DIR)/%.o)
OBJS += $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
DEPS += $(OBJS:%.o=%.d) # Make
all: $(TARGET).elf $(TARGET).bin $(TARGET).asm $(TARGET).mif
$(SIZE) $(TARGET).elf $(OBJ_DIR)/%.o: $(SRC_DIR)/%.S
@mkdir -p $(shell dirname $@)
@$(AS) $(ASFLAGS) $< -o $@
@echo AS $< $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(shell dirname $@)
@$(CC) $(CFLAGS) -MM -MT $@ -MF $(patsubst %.o, %.d, $@) $<
@$(CC) $(CFLAGS) $< -o $@
@echo CC $< -include $(DEPS) $(TARGET).elf: $(OBJS)
@$(LD) $(LDFLAGS) $^ -o $@ $(TARGET).asm: $(TARGET).elf
@$(OBJDUMP) $(OBJDUMPFLAG) $(TARGET).elf > $(TARGET).asm $(TARGET).bin: $(TARGET).elf
@$(OBJCP) $(OBJCPFLAGS) $< $@ $(TARGET).mif: $(TARGET).bin
@./bin2fpga/bin2fpga 4096 $< > $(TARGET).txt clean:
@rm -rf obj $(TARGET).elf $(TARGET).map $(TARGET).asm $(TARGET).bin debug:
$(CROSS_COMPILE)gdb $(TARGET).elf -x gdbinit.txt
用于RISC-V的Makefile示例的更多相关文章
- 用于OpenRISC的Makefile示例
#* #*********************************************************************************************** ...
- makefile示例
1. 生成.so动态库 示例一: SoVer = 10010110CfgVer = 10010110 BinName = fnights.soGameName = "\"fnigh ...
- gcc链接g++编译生成的静态库和动态库的makefile示例
使用c++开发程序或者库时,将库提供给其他人使用. 然而使用者是使用c开发的程序,链接g++编译生成的库时,于链接gcc生成的库,有所不同. 首先是静态库,以链接g++编译生成的libmylib.a为 ...
- 一个gulp用于开发与生产的示例
gulp是一款流行的前端构建工具,可以帮我们完成许多工作:监听文件修改.刷新浏览器.编译Less/Scss.压缩代码.添加md5.合并文件等.gulp的配置和使用特别简单,学习gulp过程中顺便写了一 ...
- 简单makefile示例
Makefile cmd: - g++ 相信在linux下编程的没有不知道makefile的,刚开始学习linux平台下的东西,了解了下makefile的制作,觉得有点东西可以记录下. 下面是一个极其 ...
- 一个用于每一天JavaScript示例-使用缓存计算(memoization)为了提高应用程序性能
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 一个用于每一天JavaScript示例-SVG中间javaScript画廊
<?xml version="1.0" standalone="no"? > <!DOCTYPE svg PUBLIC "-//W3 ...
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...
- makefile基础(GNU)
makefile的核心 targets : prerequisites ; commands... //不分行的情况 targets : prerequisites ...
随机推荐
- Predicting effects of noncoding variants with deep learning–based sequence model | 基于深度学习的序列模型预测非编码区变异的影响
Predicting effects of noncoding variants with deep learning–based sequence model PDF Interpreting no ...
- Linux中mpstat命令参数详解
Linux中mpstat命令参数详解 mpstat 是 Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在 /proc/stat ...
- NLP自然语言处理
转:https://blog.csdn.net/qq_17677907/article/details/86448214 1.有哪些文本表示模型,它们各有什么优缺点? 文本表示模型是研究如何表示文 ...
- Python3基础 函数 __name__ 得到引用所指向的真正名字
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- SD-WAN基础---SD-WAN简单了解
一:推文(摘录.转载自) 关于SD-WAN,你不得不了解的10个常识 那些让人怦然心动的SD-WAN功能(上) 那些让人怦然心动的SD-WAN功能(中) 二:SD-WAN是什么 SD-WAN,即软件定 ...
- JVM 线上故障排查基本操作--内容问题排查
内存问题排查 说完了 CPU 的问题排查,再说说内存的排查,通常,内存的问题就是 GC 的问题,因为 Java 的内存由 GC 管理.有2种情况,一种是内存溢出了,一种是内存没有溢出,但 GC 不健康 ...
- [LeetCode] 228. Summary Ranges 总结区间
Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...
- javadoc 抽出代码中的注释
背景: 在已经有的项目里面利用javadoc来抽出代码中每个类,每个方法的注释部分,形成一个文档. 方法1 利用eslipse来实现 之后会在指定的目录下生成html文档 方法2 利用命令来执行 先把 ...
- java有包名的调用没有包名的类,用反射
没有包名,就是说在根目录,普通项目就是在src下,maven项目就是在src/java目录下 // 通过全类名,没有包名就直接是类名,有包名就要加上包名,比如:com.xiaostudy.TLStri ...
- Django REST Framework批量更新rest_framework_extensions
Django REST framework 是一套基于Django框架编写RESTful风格API的组件. 其中mixins配合viewsets能极其方便简化对数据的增删改查, 但本身并没有对数据的批 ...