📄 makefile
字号:
# 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 = code_to_spi# |# | 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 sectionAINCLUDES = \ $(SDK_ROOT)/inc/excalibur.s \ $(SDK_ROOT)/inc/nios_macros.sCINCLUDES = \ $(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)/code_to_spi.c.o \ $(OBJ)/asmi_spi.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-elfAS = $(GNU_TOOLS_PREFIX)-asCC = $(GNU_TOOLS_PREFIX)-gccAR = $(GNU_TOOLS_PREFIX)-arLD = $(GNU_TOOLS_PREFIX)-ldOC = $(GNU_TOOLS_PREFIX)-objcopyNM = $(GNU_TOOLS_PREFIX)-nmOD = $(GNU_TOOLS_PREFIX)-objdumpNR = nios-run# | A special echo that prints prettilyE = 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).srecDESIGN_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).srecout : $(OBJ)/$(PROGRAM_NAME).outflash : $(DESIGN_NAME).germsrun : $(PROGRAM_NAME).srec @$(E) Running $(PROGRAM_NAME) @$(NR) $(PROGRAM_NAME).srec @$(E) Done running $(PROGRAM_NAME)aux : $(OBJ)/$(PROGRAM_NAME).nm $(OBJ)/$(PROGRAM_NAME).objdumpall : nios16_note srec auxhelp : @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 + -