#*
#***********************************************************************************************
# Function : Makefile
# Parameter : all
# Author : Lyu Yang
# Date :
# Description : Makefile for OR1200(altor32)
#***********************************************************************************************
#*
PROJECT = main
CROSS_COMPILE = or32-elf-
INCLUDE_DIRS = -I ./
LIBRARY_DIRS = -L ./
CC = $(CROSS_COMPILE)gcc
CFLAGS = $(INCLUDE_DIRS) -c -msoft-div -msoft-float -msoft-mul -mno-ror -mno-cmov -mno-sext -Os
CXX = $(CROSS_COMPILE)g++
CXXFLAGS = $(INCLUDE_DIRS) -c -msoft-div -msoft-float -msoft-mul -mno-ror -mno-cmov -mno-sext -Os
AS = $(CROSS_COMPILE)gcc
ASFLAGS = $(INCLUDE_DIRS) -c -msoft-div -msoft-float -msoft-mul -mno-ror -mno-cmov -mno-sext -Os
LD = $(CROSS_COMPILE)ld
LDFLAGS = $(LIBRARY_DIRS) -T./or1200.lds -Map $(PROJECT).map -nostartfiles -nodefaultlibs -nostdlib
OBJCP = $(CROSS_COMPILE)objcopy
OBJCPFLAGS = -O binary -j .boot -j .vectors -j .text -j .rodata -j .data -j .bss
AR = $(CROSS_COMPILE)ar
ARFLAGS = cr
DUMP = $(CROSS_COMPILE)objdump
DUMPFLAG = --disassemble --syms --all-header
SIZE = $(CROSS_COMPILE)size
# Static library files
OBJS_LIB +=
# User should list all object files
OBJS = ./Crt0.o
OBJS += ./main.o
# Make
.PHONY: all clean debug
all: $(PROJECT).elf $(PROJECT).bin $(PROJECT).asm $(PROJECT).mif
$(SIZE) $(PROJECT).elf
Crt0.o: Crt0.S
$(AS) $(ASFLAGS) $^ -o $@
main.o: main.c
$(CC) $(CFLAGS) $^ -o $@
$(PROJECT).elf: $(OBJS)
$(LD) $(LDFLAGS) $(OBJS_LIB) -o $@ $^
$(PROJECT).asm: $(PROJECT).elf
$(DUMP) $(DUMPFLAG) $(PROJECT).elf > $(PROJECT).asm
$(PROJECT).bin: $(PROJECT).elf
$(OBJCP) $(OBJCPFLAGS) $< $@
$(PROJECT).mif: $(PROJECT).bin
./bin2fpga/bin2fpga 4096 $<
clean:
rm -rf *.o *.asm *.elf *.bin *.mif *.map *.coe data.txt
debug:
$(CROSS_COMPILE)gdb $(PROJECT).elf -x gdbinit.txt
上面的Makefile用于开源处理器OpenRISC精简版AltOR32的软件开发。使用的工具链为or32-elf-gcc。连接脚本为:
/* Linker script for OR1200 */
OUTPUT_FORMAT("elf32-or32")
OUTPUT_ARCH(or32)
ENTRY(_reset)
MEMORY
{
OR1200_RAM (rwx) : ORIGIN = 0x0, LENGTH = 0x4000
DRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 0x10000000
}
SECTIONS
{
.text :
{
_stext = .;
stext = .;
*(.text)
*(.text.*)
. = ALIGN(4);
_etext = .;
etext = .;
} > OR1200_RAM
.rodata :
{
_sdata = .;
sdata = .;
. = ALIGN(4);
*(.rodata)
*(.rodata.*)
} > OR1200_RAM
.data :
{
*(.sdata)
*(.data)
*(.rwdata)
*(.got.plt) *(.got)
*(.shdata)
*(.data.* .gnu.linkonce.d.*)
. = ALIGN (4);
_edata = .;
edata = .;
} > OR1200_RAM
.bss :
{
. = ALIGN(4);
__bss_start = .;
*(.sbss .sbss.*)
*(.bss .bss.*)
*(COMMON)
. = ALIGN (4);
__bss_end = .;
} > OR1200_RAM
}
/* Stack base address */
__stack_pointer = 0x4000;