⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makefile

📁 基于fpga和sopc的用VHDL语言编写的EDA的32位Nios CPU嵌入式系统及其DMA设计俄罗斯方块游戏机
💻
字号:
# file: Makefile
#
# Example Makefile for a
# typical Nios program:
#
#   peripheral_test.c
#
# ex:set noexpandtab:
#
# +---------------------------
# | How To Use This Makefile
# |
# | 1. Make a new directory with
# |    your project's .c and .h
# |    (and maybe .s) files
# |
# | 2. Copy this Makefile to it,
# |    and change the following
# |    variables as needed:
# |      PROGRAM_NAME -- base name for your program
# |      OBJECTS      -- list of .o files, which implies
# |                      the .c files and .s source files
# |      CINCLUDES    -- all your .h files
# |      AINCLUDES    -- all your .s include files
# |
# | 3. Type "make all" to build the project,
# |    or "make run" to make it and nios-run it.
# |


# +--------------------------
# | Project Files
# +--------------------------

# |
# | Program name -- the base for all
# | the output files including .srec and .out.
# |

PROGRAM_NAME = peripheral_test

# |
# | Assembly Include Files
# |
# | In this makefile, every C (.c) file
# | depends on every header file (.h)
# | in the CINCLUDES section, and every
# | assembly file (.s) depends on
# | each and every assembly-header (also .s)
# | in the AINCLUDES section


AINCLUDES =  \
	$(SDK_ROOT)/inc/excalibur.s \
	$(SDK_ROOT)/inc/nios_macros.s

CINCLUDES =  \
	$(SDK_ROOT)/inc/excalibur.h

# |
# | Object files
# |
# | The rules below will find the .c or .s files needed
# | to make each of these .o object files.
# |
# | This list will all go to the linker to make the
# | final binary.
# |
# | (This makefile follows the unusual convention
# | of appending .o after the original file name,
# | rather than replacing the file-type extension.
# | This makes it a)easier to identify a file's
# | history from its name, and b)easier to set
# | up implicit rules to generate them.
# |

OBJECTS =  \
	$(OBJ)/peripheral_test.c.o \
	$(OBJ)/peripheral_test_memory.c.o \
	$(OBJ)/peripheral_test_memory_asm.s.o \
	$(OBJ)/peripheral_test_timer.c.o \
	$(OBJ)/peripheral_test_uart.c.o

# +----------------------
# | Anchor point:
# |  the SOPC Builder sdk directory
# |  generated for this project
# |
# | This example makefile happens to
# | be located at
# |
# |    <your quartus project><your nios cpu>_sdk/src/makefile_example
# |
# | so the sdk root is at ../..

SDK_ROOT = ../..
# 
#
#
# +--------------------------------
# | First, some traditional defines
# | for our particular tool chain
# |

GNU_TOOLS_PREFIX = nios-elf
AS = $(GNU_TOOLS_PREFIX)-as
CC = $(GNU_TOOLS_PREFIX)-gcc
AR = $(GNU_TOOLS_PREFIX)-ar
LD = $(GNU_TOOLS_PREFIX)-ld
OC = $(GNU_TOOLS_PREFIX)-objcopy
NM = $(GNU_TOOLS_PREFIX)-nm
OD = $(GNU_TOOLS_PREFIX)-objdump

NR = nios-run

# | A special echo that prints prettily

E = echo \\\# `date +%Y.%m.%d.%H:%M:%S` ---

# |
# | To keep things tidy, we stash all
# | object (.o) files into a directory
# | named "obj"
# |

OBJ = ./obj

# |
# | And the source directory? Is right here.
# |

SRC = .

# |
# | It is a Nios 32. Change it to 16 for Nios 16.
# |

M = 32

# +-----------------------------------
# | Include paths and such
# | If you have more directories of .h files,
# | add them here.
# |
# | We put in ../inc, ../../inc, and so on so
# | that it will look "up and over" to the sopc_builder
# | generated files, or other nearby inc dirs.
# |
# | Note that it uses "-I <dir>" format, which
# | is legal for both as and gcc.
# |

INCLUDE_PATHS = \
		-I $(SDK_ROOT)/inc \
		-I ./inc \
		-I ../inc \
		-I ../../inc \
		-I ../../../inc \

# +------------------------------------
# | Switches for the compiler, the assembler,
# | and the linker
# |

ASFlags = \
		$(INCLUDE_PATHS) \
		--defsym __nios$(M)__=1 \
		-m$(M)

CCFlags = \
		$(INCLUDE_PATHS) \
		-W -g -c -O2 \
		-mdcache \
		-mno-zero-extend \
		-m$(M)



# +----------------------------------------
# | Rules
# |
# | These implicit rules treat all your .s
# | and all your .c files the same.
# |
# | "default" comes first so that if you just
# | type "make" it is the default target.
# |

default : nios16_note srec
	@$(E) .
	@$(E) . Built $(PROGRAM_NAME).srec
	@$(E) . try "make help" for more information
	@$(E) .

nios16_note :
	@$(E) "(Note: to make for Nios 16, try \"make clean all M=16\")"

$(OBJ)/%.s.o : $(SRC)/%.s $(AINCLUDES)
	@$(E) Assembling $<
	@$(AS) $(ASFlags) $< -o $@

$(OBJ)/%.c.o : $(SRC)/%.c $(CINCLUDES)
	@$(E) Compiling $<
	@$(CC) $(CCFlags) $< -o $@

$(OBJ) :
	@$(E) Making $@/ directory
	@mkdir $@

clean : $(OBJ)
	@$(E) Removing objects
	@rm -rf $(OBJ)/*

# +-------------------------------------
# | Linking
# |
# | This is the most involved command line.
# | It was taken from the output of "nios-build"
# | and splayed out into an easier-to-read form.
# |
# | It references a linker script out in the sopc_builder
# | directory, and also makes sure that the first thing
# | in the file is a branch to "_start". (Usually
# | the routine named _start does a bunch of useful
# | initialization before your main() routine is called.)
# |
# | Note the use of GCC_VER -- this is because some of
# | the libraries are stashed in a version-named directory.
# |
# | Explanation of switches to the linker:
# |
# |   -e _start -u _start
# |       the entry point. _start() does the setup
# |       for Nios and then calls main().
# |
# |   -g
# |       include debug info in .out file. Does NOT
# |       increase the size of your S-Record.
# |
# |   -T (path to ld script)
# |       A "linker script" which knows about your memory
# |       map, by using symbols like nasys_program_mem from
# |       excalibur.s.
# |
# |   (path to nios_jumptostart.s.o)
# |       A "program prefix" that we at the front of
# |       every Nios program. It contains a jump to
# |       _start, and the ascii signature "Nios".
# |
# |   --start-group -l nios32 -l c -l m -l gcc --end-group
# |       The linker treats this a set of libraries
# |       to scan repeatedly until no new references are
# |       resolved. (The libraries sometimes refer to each
# |       other, so multiple passes are needed.) Each
# |       -l option is taken as lib(something).a, so the
# |       above line really looks for libnios32.1, libc.a,
# |       libm.a, and libgcc.a.
# |
# |   -L(various paths)
# |       Places the linker might look for libraries
# |

GCC_VER = $(shell nios-elf-gcc --version)
LFLAGS = \
		-e _start \
		-u _start \
		-g \
		-T $(sopc_builder)/bin/excalibur.ld \
		$(SDK_ROOT)/lib/obj$(M)/nios_jumptostart.s.o \
		--start-group \
			-l nios$(M) \
			-l c \
			-l m \
			-l gcc \
		--end-group \
		-L$(sopc_kit_nios)/bin/nios-gnupro/nios-elf/lib/m$(M) \
		-L$(sopc_kit_nios)/bin/nios-gnupro/lib/gcc-lib/nios-elf/$(GCC_VER)/m$(M) \
		-L$(sopc_builder)/bin/nios-gnupro/nios-elf/lib/m$(M) \
		-L$(sopc_builder)/bin/nios-gnupro/lib/gcc-lib/nios-elf/$(GCC_VER)/m$(M) \
		-L$(SDK_ROOT)/lib \
		-L. \
		-L../lib \
		-L../../lib \
		-L../../../lib \

# |
# | Note about -L's above:
# |
# | we look in the quartus-3.0-and-later place, sopc_kit_nios,
# | and also in the pre-3.0 place, sopc_builder, for the compiler
# | libraries
# |

# |
# | Rule for making .out file from
# | the objects. The OBJECTS variable
# | must come before the LFLAGS, because
# | the LFLAGS has the libraries. The linker
# | needs to know which library routines you've
# | referenced from your code before scanning
# | them and deciding which parts to use.
# |

$(OBJ)/$(PROGRAM_NAME).out : $(OBJ) $(OBJECTS)
	@$(E) Linking $@
	@$(LD) $(OBJECTS) $(LFLAGS) -o $(OBJ)/$(PROGRAM_NAME).out 

# |
# | S-Record
# |
# | We like Nios programs to be in an S-Record
# | for use by nios-run or SOPC Builder memory
# | contents
# |
# | The S-Record is the only output file that
# | we dont stash tidily into the obj folder
# |

$(PROGRAM_NAME).srec : $(OBJ)/$(PROGRAM_NAME).out
	@$(E) Converting $(PROGRAM_NAME) to S-Record
	@$(OC) -O srec $(OBJ)/$(PROGRAM_NAME).out $(PROGRAM_NAME).srec 


# |
# | The following several targets are unique
# | to generating certain flash-config files
# | for the Apex 20k Nios development board.
# |
# | These targets may be omitted if you adapt
# | this Makefile for your own projects.
# |

$(PROGRAM_NAME).flash : $(PROGRAM_NAME).srec
	$(E) Converting $(PROGRAM_NAME).srec to $(PROGRAM_NAME).flash ;
	@srec2flash $(PROGRAM_NAME).srec

DESIGN_NAME = standard_32

$(DESIGN_NAME).hexout.flash : ../../../$(DESIGN_NAME).hexout
	@$(E) Converting $(DESIGN_NAME).hexout to $(DESIGN_NAME).hexout.flash ;
	@cd ../../../ ; hexout2flash $(DESIGN_NAME).hexout -b 0x1c0000 -s 0x3f000
	@mv ../../../$(DESIGN_NAME).hexout.flash .

$(DESIGN_NAME).germs : $(DESIGN_NAME).hexout.flash $(PROGRAM_NAME).flash
	@$(E) "Assembling hardware and software images into $(DESIGN_NAME).germs"
	@cat $(DESIGN_NAME).hexout.flash $(PROGRAM_NAME).flash > $(DESIGN_NAME).germs

# |
# | Handy auxilliary files
# |

$(OBJ)/$(PROGRAM_NAME).nm : $(OBJ)/$(PROGRAM_NAME).out
	@$(E) Making $(PROGRAM_NAME).nm
	@$(NM) $(OBJ)/$(PROGRAM_NAME).out | sort > $(OBJ)/$(PROGRAM_NAME).nm

$(OBJ)/$(PROGRAM_NAME).objdump : $(OBJ)/$(PROGRAM_NAME).out
	@$(E) Making $(PROGRAM_NAME).objdump
	@$(OD) $(OBJ)/$(PROGRAM_NAME).out -d --source > $(OBJ)/$(PROGRAM_NAME).objdump

# +-------------------------------------
# | Shortcut Targets
# |

srec : $(PROGRAM_NAME).srec

out : $(OBJ)/$(PROGRAM_NAME).out

flash : $(DESIGN_NAME).germs

run : $(PROGRAM_NAME).srec
	@$(E) Running $(PROGRAM_NAME)
	@$(NR) $(PROGRAM_NAME).srec
	@$(E) Done running $(PROGRAM_NAME)

aux : $(OBJ)/$(PROGRAM_NAME).nm $(OBJ)/$(PROGRAM_NAME).objdump

all : nios16_note srec aux

help :
	@echo 
	@echo Program name: $(PROGRAM_NAME)
	@echo 
	@echo Available makefile targets:
	@echo
	@echo "  make clean -- erase intermediate files"
	@echo "  make srec  -- compile, link, and convert to S-Record"
	@echo "  make run   -- make the S-Record, and then nios-run, too"
	@echo 
	@echo "  make out   -- only make the .out file"
	@echo "  make aux   -- generate .nm and .objdump files"
	@echo

# end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -