用于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 ...
随机推荐
- mysql事务回滚机制概述
应用场景: 银行取钱,从ATM机取钱,分为以下几个步骤 1 登陆ATM机,输入密码: 2 连接数据库,验证密码: 3 验证成功,获得用户信息,比如存款余额等: 4 用 ...
- python爬虫中XPath和lxml解析库
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- 修改LINUX 默认的22端口
Linux远程端口修改操作手册 一.修改端口前需要检查selinux状态,并把selinux永久关闭 关闭方法: 1. 执行setenforce 0 2. vi /etc/selinux/confi ...
- python初级(302) 1 环境搭建及简单使用
一.安装anaconda(python环境) 1 地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=A 选择Ana ...
- KAFKA:如何做到1秒发布百万级条消息
http://rdcqii.hundsun.com/portal/article/709.html KAFKA是分布式发布-订阅消息系统,是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用 ...
- PAT 甲级 1076 Forwards on Weibo (30分)(bfs较简单)
1076 Forwards on Weibo (30分) Weibo is known as the Chinese version of Twitter. One user on Weibo m ...
- LODOP和C-LODOP注册与角色等简短问答【增强版】
之前的简短问答:Lodop.c-lodop注册与角色简短问答.Lodop简短问答客户反馈篇 及排查步骤 及注册相关本文重新整理相关简短问答,调整问答顺序,增加相关的问答. 其他相关(非简短问答):LO ...
- LODOP中无规律无法还原偶尔出现问题排查
一些问题无法还原且偶尔出现,没法通过做例子来展示问题,为了找到问题在哪里,就需要排查定位问题 .由于这些问题偶尔出现,且无规律,出现频率低,所以只能不断通过各种对比测试,定位排查到问题和什么有关.如果 ...
- [LeetCode] 582. Kill Process 终止进程
Given n processes, each process has a unique PID (process id) and its PPID (parent process id). Each ...
- 多核vs多处理器
多核vs多处理器 多核CPU性能最好,但成本最高:多CPU成本小,便宜,但性能相对较差 线程数=cpu处理器个数 * 一个cpu内的核数[如果有超线程,再乘以超线程数] 多核 CPU 和多个 CPU ...