原创 【连载】Sunplus DVD软件Makefile详解(二)

2009-11-30 13:11 3289 6 6 分类: MCU/ 嵌入式

Sunplus DVD软件Makefile详解(二)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


         xluoly@hotmail.com



正式开始--Makefile


Sunplus DVD使用的是基于Cygwin环境的GNU工具链整个程序的构建是由各目录下的Makefile管理的。为了便于叙述,下文中的“根目录”都是指Source Code的主目录。各模块的Makefile关系如下:


根目录:Makefile.sult包含Makefile.ult


根目录:Makefile包含Makefile.ult


子目录:Makefile包含Makefile.sult


根目录下的文件Makefile.ult可看作是核心Makefile,其中定义各模块Makefile的公用部分;各目录下的文件Makefile可看作是该模块的主Makefile,定义各模块编译过程的差异部分。


下面以SPHE8104L软件为例,详细介绍Makefile中的各部分内容。


Makefile.ult


1   #


2   # Makefile.utl


3   #


4   .SUFFIXES:


5   .PHONY:     all clean depends bak debug tar force


6  


7   PREFIX         = package/


8   PREFIX1        =


9   PERLPATH       = pl/


10


11  CC              = gcc


12  CPP             = cpp -P -traditional


13  AS              = as


14  LD              = ld


15  AR              = ar


16  OBJDUMP        = objdump


17  OBJCOPY        = objcopy


18  OBJDUMP2BIN   = dump2bin


19  WECHO          = wecho


20 


21  # cross-compiling tools


22  DSP3            = dsp3/


23  XCC             = $(CC)


24  XAS             = $(AS)


25  XLD             = $(LD)


26  XAR             = $(AR)


27  XRANLIB        = $(RANLIB)


28  XOBJDUMP   = $(PREFIX1)$(OBJDUMP)


29 


30  # CFLAGS


31  CFLAGS_MACHINE  = -m728 -membedded-data


32  CFLAGS_ENDIAN   = -DLITTLE_ENDIAN


33  CFLAGS_COPT = \


34      -fno-writable-strings \


35      -fstrength-reduce \


36      -fthread-jumps \


37      -ffixed-22 \


38      -fdata-sections \


39      -ffunction-sections


40 


41  CFLAGS_C = \


42      -g \


43      -W -Wall -Werror\


44      $(CFLAGS_COPT) \


45      $(CFLAGS_MACHINE) $(CFLAGS_ENDIAN)


46 


47  CFLAGS_S = \


48      -g1 -O2 \


49      $(CFLAGS_MACHINE) $(CFLAGS_ENDIAN)


50 


51  INCLUDE_DIR = \


52           -<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />I. -I./h


53 


54  CFLAGS_MIPS =  -O2 -Os $(CFLAGS_C) $(CFLAGS_COMPILE) $(INCLUDE_DIR)


55  CFLAGS_MIPS_S   = $(CFLAGS_S) $(CFLAGS_COMPILE) $(INCLUDE_DIR)


56  CFLAGS_MIPS_FAST = -O3 $(CFLAGS_C) $(CFLAGS_COMPILE) $(INCLUDE_DIR)


57 


58  PERL             = $(PREFIX1)perl


59  RM               = rm


60  CP               = cp


61


62  DUMP2BIN        = $(PREFIX1)$(OBJDUMP2BIN)


63  ECHO             = $(PREFIX1)$(WECHO)


64  MAKEIM          = $(PREFIX)makeim


65  MAKEPM          = $(PREFIX)makepm


66  FGZIP           = $(PREFIX1)fgzip


67  FGZIP2          = $(PREFIX1)fgzip2


68  RZIP             = $(PREFIX1)rzip


69  BINOBJ          = $(PREFIX1)binobj


70  FONT_PARSER    = $(PREFIX1)font_parse


71  MODUAL          = $(PREFIX1)module


72  XB2             = $(PREFIX1)xb2


73  CHKSUM         = $(PREFIX1)checksum8200


74  SRTFONTPARSE  = $(PREFIX1)SrtFontParse


75 


76  # perl tools


77  DUMP2HEX        = $(PERL) $(PERLPATH)/dump2hex.pl


78  HEX2BIN         = $(PERL) $(PERLPATH)/hex2bin.pl --byte


79  MAKEDEP        = $(PERL) $(PERLPATH)/makedep.pl


80  #DATE           := $(shell $(PERL) pl/date.pl)


81 


82  # default rules


83  all:


84 


85  clean:


86      @$(ECHO) \"remove all generated files\"


87      @-$(RM) -f core *.o *.d *.s *.map *.dis *.obj MIPS/*.d MIPS/*.o


88 


89  depends: $(DEPENDS)


90      @$(ECHO) \"dependency made\"


91 


92  # sub-rules


93  MIPS:


94      mkdir MIPS


95 


96  MIPS/%.o : MIPS/%.d


97 


98  MIPS/%.d : %.c


99      @$(ECHO) \"mkdep $*.c\"


100    @$(XCC) $(CFLAGS_MIPS) -M $< > depend.tmp


101         @$(MAKEDEP) depend.tmp $@


102


103 MIPS/%.o : %.c


104         @$(ECHO) \"compile $<\"


105         @$(XCC) $(CFLAGS_MIPS) -c -o $@ $<


106


107 MIPS/%.o : %.S


108         @$(ECHO) \"assemble $<\"


109         @$(XCC) $(CFLAGS_MIPS_S) -c -o $@ $<


110


111 MIPS/%.s : %.c


112    @$(ECHO) \"compile $<\"


113         @$(XCC) $(CFLAGS_MIPS) -S -fverbose-asm -o $@ $<


114


115 %.dis : MIPS/%.o


116         @$(XOBJDUMP) --source -d --syms $< > $@


117


前面的数字是行号,为了便于说明而加入的,不是Makefile.ult文件的内容。下面以行号进行详细解释。


2)以“#”开头的行是注释,这里是注明当前文件名。


4Makefile本身包含有隐含的后缀规则,“.SUFFIXES”用于定义后缀列表,这里为空,表示删除默认的后缀,关闭隐含的后缀规则。例如,编译C程序的隐含规则是:“.o”的目标的依赖目标会自动推导为.c,并且其生成命令是$(CC) –c $(CPPFLAGS) $(CFLAGS)


5)声明伪目标。


79)定义工具软件的路径。


1128)定义交叉工具链。工具链没有使用交叉工具前缀的名称,直接使用“gcc”,但这并不是通常所指的用于PC机的“gcc”,比较好的做法是加上前缀形成“mipsel-elf-gcc”,这样就不会混淆了,因为SPHE8104L CPU内核为MIPS R3000。我们看到的很多交叉工具链都是这样加以区别的。


3056)定义编译工具的各种参数,有些参数在GCC资料中无法查到,可能是Sunplus加入的。


5880)为各种可能用到的辅助工具定义别名。


82116)定义各种目标的依赖规则和编译命令。从各模块Makefile文件之间的包含关系中,我们看到,该文件(Makefile.ult)总是包含在各模块主Makefile的最前面。因此,all总是成为默认目标,all目标的依赖关系和执行的命令则分别由各模块主Makefile定义。


Makefile.sult


1  #


2  # Makefile.sutl


3  #


4 


5  sinclude ../Makefile.utl


6 


7  PREFIX      =


8  PREFIX1     = ../package/


9  PERLPATH    = ../pl/


10


11 INCLUDE_DIR  = \


12          -I./ -I../ -I../h/ -I../ir_vfd/


13


5)包含上一级目录下的文件Makefile.ult。关键字sincludeC语言中的#include的作用类似,被包含的文件会原模原样的放在当前文件的包含位置。


这个文件是供子模块的Makefile包含的。各子模块的Makefile都是位于根目录的一级子目录下。各种路径的搜寻都是采用相对路径的方式,因此,“../”都是指根目录。如果建立一个Makefile文件位于根目录的二级子目录下,直接包含这个文件就会造成路径错误。


 

『未完,待续...』


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条