用于OpenRISC的Makefile示例
用于开源处理器OpenRISC精简版AltOR32的软件开发,使用的工具链为or1k-elf-gcc,Makefile和连接脚本为:
1 #*********************************************************************************************** 2 # File : Makefile 3 # Author : Lyu Yang 4 # Date : 5 # Description : Makefile for OpenRISC 6 #*********************************************************************************************** 7 8 TARGET = main 9 10 CROSS_COMPILE = or1k-elf- 11 12 INCLUDE_DIRS = -I ./ 13 LIBRARY_DIRS = -L ./ 14 15 CC = $(CROSS_COMPILE)gcc 16 CFLAGS = $(INCLUDE_DIRS) -mno-delay -c -msoft-div -msoft-float -msoft-mul -mno-ror -mno-cmov -mno-sext -Os 17 18 CXX = $(CROSS_COMPILE)g++ 19 CXXFLAGS = $(INCLUDE_DIRS) -c -mno-delay -msoft-float -msoft-mul -mno-ror -mno-cmov -mno-sext -Os 20 21 AS = $(CROSS_COMPILE)as 22 ASFLAGS = -c 23 24 LD = $(CROSS_COMPILE)ld 25 LDFLAGS = $(LIBRARY_DIRS) -T./openrisc.lds -Map $(TARGET).map -nostartfiles -nodefaultlibs -nostdlib 26 27 OBJCP = $(CROSS_COMPILE)objcopy 28 OBJCPFLAGS = -O binary -j .text -j .rodata -j .data -j .bss 29 30 AR = $(CROSS_COMPILE)ar 31 ARFLAGS = cr 32 33 DUMP = $(CROSS_COMPILE)objdump 34 DUMPFLAG = --disassemble --syms --all-header 35 36 SIZE = $(CROSS_COMPILE)size 37 38 # Static library files 39 OBJS_LIB += 40 41 # User should list all object files 42 OBJS += $(patsubst %.S, %.o, $(wildcard *.S)) 43 OBJS += $(patsubst %.c, %.o, $(wildcard *.c)) 44 45 # Make 46 .PHONY: all clean debug 47 all: $(TARGET).elf $(TARGET).bin $(TARGET).asm $(TARGET).mif 48 $(SIZE) $(TARGET).elf 49 50 %.o: %.S 51 $(AS) $(ASFLAGS) $^ -o $@ 52 53 %.o: %.c 54 $(CC) $(CFLAGS) $^ -o $@ 55 56 $(TARGET).elf: $(OBJS) 57 $(LD) $(LDFLAGS) $(OBJS_LIB) -o $@ $^ 58 59 $(TARGET).asm: $(TARGET).elf 60 $(DUMP) $(DUMPFLAG) $(TARGET).elf > $(TARGET).asm 61 62 $(TARGET).bin: $(TARGET).elf 63 $(OBJCP) $(OBJCPFLAGS) $< $@ 64 65 $(TARGET).mif: $(TARGET).bin 66 ./bin2fpga/bin2fpga 4096 $< 67 68 clean: 69 rm -rf *.o *.asm *.elf *.bin *.mif *.map *.coe data.txt 70 71 debug: 72 $(CROSS_COMPILE)gdb $(TARGET).elf -x gdbinit.txt
1 /* Linker script for OpenRISC */ 2 3 OUTPUT_FORMAT("elf32-or1k") 4 OUTPUT_ARCH(or1k) 5 ENTRY(_reset) 6 7 MEMORY 8 { 9 RAM (rwx) : ORIGIN = 0x0, LENGTH = 0x4000 10 DRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 0x10000000 11 } 12 13 14 SECTIONS 15 { 16 .text : 17 { 18 _stext = .; 19 stext = .; 20 *(.text) 21 *(.text.*) 22 . = ALIGN(4); 23 _etext = .; 24 etext = .; 25 } > RAM 26 27 .rodata : 28 { 29 _sdata = .; 30 sdata = .; 31 . = ALIGN(4); 32 *(.rodata) 33 *(.rodata.*) 34 } > RAM 35 36 .data : 37 { 38 *(.sdata) 39 *(.data) 40 *(.rwdata) 41 *(.got.plt) *(.got) 42 *(.shdata) 43 *(.data.* .gnu.linkonce.d.*) 44 . = ALIGN (4); 45 _edata = .; 46 edata = .; 47 } > RAM 48 49 .bss : 50 { 51 . = ALIGN(4); 52 __bss_start = .; 53 *(.sbss .sbss.*) 54 *(.bss .bss.*) 55 *(COMMON) 56 . = ALIGN (4); 57 __bss_end = .; 58 } > RAM 59 } 60 61 /* Stack base address */ 62 __stack_pointer = 0x4000;