Makefile源码注解

    技术2022-05-20  50

    cpci5200为例,顺序分析UBOOT根目录下的顶层Makefile大致的流程及结构如下:

    #

    # (C) Copyright 2000-2006

    # Wolfgang Denk, DENX Software Engineering, wd@denx.de.

    #

    # See file CREDITS for list of people who contributed to this

    # project.

    #

    # This program is free software; you can redistribute it and/or

    # modify it under the terms of the GNU General Public License as

    # published by the Free Software Foundatio; either version 2 of

    # the License, or (at your option) any later version.

    #

    # This program is distributed in the hope that it will be useful,

    # but WITHOUT ANY WARRANTY; without even the implied warranty of

    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

    # GNU General Public License for more details.

    #

    # You should have received a copy of the GNU General Public License

    # along with this program; if not, write to the Free Software

    # Foundation, Inc., 59 Temple Place, Suite 330, Boston,

    # MA 02111-1307 USA

    #

     

    #版本信息1.1.6版,定义版本文件变量

    VERSION = 1

    PATCHLEVEL = 1

    SUBLEVEL = 5

    EXTRAVERSION =

    U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)

    VERSION_FILE = $(obj)include/version_autogenerated.h

     

    #检查宿主机环境,这部分是常量的定义,注意这里的$(obj),这个常量在这里为空,它放#到这里,是因为在target unconfig, clean, clobber, distclean中需要用这个变量,#具体是个怎么用法,我没有去仔细分析。

    #HOSTARCH这个变量的赋值,是通过执行一套shell程序来完成的,其中$(shell xxx) #的语法就是在shell中执行xxx的命令。这里的|就是linux中的管道处理符,/就是换行的#连接符,表示下一行与本行是同行程序处理。

    #uname -m,就是得到machine hardware name,中文翻译成机器硬件名?!

    #sed -e的意思,就是表示后面跟的是一串命令脚本,s/abc/def/的命令表达式,就是表#示要从标准输入中,查找到内容为abc的,然后替换成def。这样执行这一套程序下来,就#知道了机器的硬件体系了。

    #uname -s,得到kernel name,内核的名字。

    #tr '[:upper:]' '[:lower:]',表示从标准输入里,把大字都换成小写,然后输出到标准#输出。然后后面再跟了一串用来特别处理cygwin环境下编译的环境变量的配置的。

     

    HOSTARCH := $(shell uname -m | /

           sed -e s/i.86/i386/ /

               -e s/sun4u/sparc64/ /

               -e s/arm.*/arm/ /

               -e s/sa110/arm/ /

               -e s/powerpc/ppc/ /

               -e s/macppc/ppc/)

     

    HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | /

               sed -e 's//(cygwin/).*/cygwin/')

     

    export    HOSTARCH HOSTOS

     

    # Deal with colliding definitions from tcsh etc.

    VENDOR=

     

    #########################################################################

    #定义源码及生成的目标文件存放的目录,目标文件存放目录BUILD_DIR可以通过

    #make O=dir 指定。如果没有指定,则设定为源码顶层目录。一般编译的时候不

    #指定输出目录,则BUILD_DIR为空。

    #

    # U-boot build supports producing a object files to the separate external

    # directory. Two use cases are supported:

    #

    # 1) Add O= to the make command line

    # 'make O=/tmp/build all'

    #

    # 2) Set environement variable BUILD_DIR to point to the desired location

    # 'export BUILD_DIR=/tmp/build'

    # 'make'

    #

    # The second approach can also be used with a MAKEALL script

    # 'export BUILD_DIR=/tmp/build'

    # './MAKEALL'

    #

    # Command line 'O=' setting overrides BUILD_DIR environent variable.

    #

    # When none of the above methods is used the local build is performed and

    # the object files are placed in the source directory.

    #

     

    #使用一个条件判断,判断0这个变量有没有被定义,如果定义了,则进一步判断,这个0的定#义是从哪里来的,$(origin 0)就是来得到0的定义的来源,如果是命令行,则采用。同理如#果BUILD_DIR变量不为空,则给另外一个变量saved-output赋值。

    ifdef O

    ifeq ("$(origin O)", "command line")

    BUILD_DIR := $(O)

    endif

    endif

     

    ifneq ($(BUILD_DIR),)

    saved-output := $(BUILD_DIR)

     

    # Attempt to create a output directory.

    #执行shell的时候,用了一个||符号,这个符号的功能与C语言里的||符号功能很相似,如果#左边的值为真,则不执行后面的操作。所以这里就是先用-d选项判断${BUILD_DIR}这个目录#存在与否,如果存在,就不执行后面的建目录的命令,如果不存在,则建目录。

    $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})

     

    # Verify if it was successful.

    #接下来这一段就是执行cd命令,进入到新建的目录里,然后执行pwd命令来得到当前目录的

    #真实位置。为什么需要这样做呢,因为前面的创建目录工作可能不成功,所以导致后面的cd

    #命令也没有进去,所以需要后面的pwd命令来确认一下。接下来的if用了一个三段式的形式,#if(a,b,c)这样的形式,执行步骤为,先判断a的真假,如果为真,则执行b,如果为假,则

    #执行c。所以这里的意思就是判断目录建成没有建成,如果建成,则什么也不干,没建成,

    #就使用error,输出错误信息且退出。

    BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)

    $(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))

    endif # ifneq ($(BUILD_DIR),)

     

    #下面是普通的变量赋值,其它目录变量定义如下,OBJTREELNDIR为存放生成文件的目#录,TOPDIRSRCTREE为源码所在目录

    OBJTREE            := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))

    SRCTREE           := $(CURDIR)

    TOPDIR              := $(SRCTREE)

    LNDIR         := $(OBJTREE)

    export    TOPDIR SRCTREE OBJTREE

     

    #定义变量MKCONFIG:这个变量指向一个脚本,即顶层目录的mkconfig

    MKCONFIG       := $(SRCTREE)/mkconfig

    export MKCONFIG

     

    ifneq ($(OBJTREE),$(SRCTREE))

    REMOTE_BUILD     := 1

    export REMOTE_BUILD

    endif

     

    # $(obj) and (src) are defined in config.mk but here in main Makefile

    # we also need them before config.mk is included which is the case for

    # some targets like unconfig, clean, clobber, distclean, etc.

    ifneq ($(OBJTREE),$(SRCTREE))

    obj := $(OBJTREE)/

    src := $(SRCTREE)/

    else

    obj :=

    src :=

    endif

    export obj src

     

    #########################################################################

     

    #判断$(OBJTREE)/include/config.mk$(wildcard $(OBJTREE)/include/config.mk)得到

    #的值是否一样。$(wildcard PATTERN)的使用就是查找到与PATTERN相符合的,并且是存在的,#以空格分开的文件列表。说白了,这句话就是判断$(OBJTREE)/include/config.mk文件是否#存在。如果存在,则执行后面用红色标记的内容,如果不存在,则执行接下去的内容,直到#红色标记部分。

    #如果include/config.mk文件已存在,就从里面获取目标板构架信息

    #否则就要执行者make xxx_config来生成该文件

    #以下这部分直到红色标记处是在$(OBJTREE)/include/config.mk文件已经存在的情况下才

    #执行的。

    ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))

     

    # load ARCH, BOARD, and CPU configuration

    #开头一句中的include,它是把后面跟的文件内容给加到它出现的地方,这里就是把#$(OBJTREE)/include/config.mk文件的内容加入到了这里,所以就得到了ARCHBOARDCPU

    #的值,如果VENDORSOC也定义了,也会得到它们的值。

    include $(OBJTREE)/include/config.mk

    export    ARCH CPU BOARD VENDOR SOC

     

    #接着的一大段,就是在判断没有定义CROSS_COMPILE变量的情况下,根据各种情况对这个变量的值进行判断。这个值就是交叉编译工具的开头部分的名称。建议在编译的时候,还是把这个变量的值给置上,置上当前系统里交叉编译工具相应的值,因为很难指望这些个判断就能把你现在系统里的值给判断对了。置变量的方法有-很多,其中一个,就是在make命令后跟上变量的赋值,例如:make CROSS_COMPILE=arm-linux-gnueabi-,或是把CROSS_COMPILE设成一个系统变量,然后直接make CROSS_COMPILE=${CROSS_COMPILE}-这样来设置。

    ifndef CROSS_COMPILE

    ifeq ($(HOSTARCH),ppc)

    CROSS_COMPILE =

    else

    ifeq ($(ARCH),ppc)

    CROSS_COMPILE = powerpc-linux-

    endif

    ifeq ($(ARCH),arm)

    CROSS_COMPILE = arm-linux-

    endif

    ifeq ($(ARCH),i386)

    ifeq ($(HOSTARCH),i386)

    CROSS_COMPILE =

    else

    CROSS_COMPILE = i386-linux-

    endif

    endif

    ifeq ($(ARCH),mips)

    CROSS_COMPILE = mips_4KC-

    endif

    ifeq ($(ARCH),nios)

    CROSS_COMPILE = nios-elf-

    endif

    ifeq ($(ARCH),nios2)

    CROSS_COMPILE = nios2-elf-

    endif

    ifeq ($(ARCH),m68k)

    CROSS_COMPILE = m68k-elf-

    endif

    ifeq ($(ARCH),microblaze)

    CROSS_COMPILE = mb-

    endif

    ifeq ($(ARCH),blackfin)

    CROSS_COMPILE = bfin-elf-

    endif

    endif

    endif

     

    export    CROSS_COMPILE

     

    # load other configuration

    #这里把$(TOPDIR)/config.mk这个文件的内容包含进来了,即包含顶层目录下的config.mk

    #这个文件里面主要定义了交叉编译器及选项和编译规则(sinclude,它也是把后面所跟的文件给包含进来。它与include的区别就是,include后面跟的文件,一定是存在的,如果不存在,执行就会出错误;那么sinclude后面所跟的文件,可以不存在,如果文件存在则包含进来,如果不存在,则什么也不做。)

    include $(TOPDIR)/config.mk

     

    #########################################################################

    # U-Boot objects....order is important (i.e. start must be first)

     

    #U-boot需要的目标文件,顺序很重要,start.o必须放第一位,

    #针对不同架构,安排目标文件的布局,对于不同的CPU追加相应的目标文件。这段代码,其#实也是定义变量,根据不同的条件,给变量定义不同的值。这些变量都是在后面编译的时

    #候,写到运行命令参数里面的,这些变量的意义,还有各种参数的意义,可以查看相应的

    #工具的参数手册来得到,跟移植没有什么太大的关系

    #需要注意一下各个变量值所添加的顺序,第一个添加的,编译的时候,变量进行替换,就

    #会被放在前面,然后就会被首先编译,连接,以此类推。可以看到,最先执行的就是start.o

    #这个文件里的内容,这个文件是由start.S来生成的

    OBJS  = cpu/$(CPU)/start.o

    ifeq ($(CPU),i386)

    OBJS += cpu/$(CPU)/start16.o

    OBJS += cpu/$(CPU)/reset.o

    endif

    ifeq ($(CPU),ppc4xx)

    OBJS += cpu/$(CPU)/resetvec.o

    endif

    ifeq ($(CPU),mpc83xx)

    OBJS += cpu/$(CPU)/resetvec.o

    endif

    ifeq ($(CPU),mpc85xx)

    OBJS += cpu/$(CPU)/resetvec.o

    endif

    ifeq ($(CPU),bf533)

    OBJS += cpu/$(CPU)/start1.o  cpu/$(CPU)/interrupt.o       cpu/$(CPU)/cache.o

    OBJS += cpu/$(CPU)/cplbhdlr.o     cpu/$(CPU)/cplbmgr.o       cpu/$(CPU)/flush.o

    endif

     

    OBJS := $(addprefix $(obj),$(OBJS))

     

    #需要的库文件

    LIBS  = lib_generic/libgeneric.a

    LIBS += board/$(BOARDDIR)/lib$(BOARD).a

    LIBS += cpu/$(CPU)/lib$(CPU).a

    ifdef SOC

    LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a

    endif

    LIBS += lib_$(ARCH)/lib$(ARCH).a

    LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a /

           fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a

    LIBS += net/libnet.a

    LIBS += disk/libdisk.a

    LIBS += rtc/librtc.a

    LIBS += dtt/libdtt.a

    LIBS += drivers/libdrivers.a

    LIBS += drivers/nand/libnand.a

    LIBS += drivers/nand_legacy/libnand_legacy.a

    LIBS += drivers/sk98lin/libsk98lin.a

    LIBS += post/libpost.a post/cpu/libcpu.a

    LIBS += common/libcommon.a

    LIBS += $(BOARDLIBS)

     

    LIBS := $(addprefix $(obj),$(LIBS))

    .PHONY : $(LIBS)

     

    # Add GCC lib

    PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc

     

    # The "tools" are needed early, so put this first

    # Don't include stuff already done in $(LIBS)

    SUBDIRS     = tools /

             examples /

             post /

             post/cpu

    .PHONY : $(SUBDIRS)

     

    ifeq ($(CONFIG_NAND_U_BOOT),y)

    NAND_SPL = nand_spl

    U_BOOT_NAND = $(obj)u-boot-nand.bin

    endif

     

    __OBJS := $(subst $(obj),,$(OBJS))

    __LIBS := $(subst $(obj),,$(LIBS))

     

    #########################################################################

    #########################################################################

     

    #这里就是定义了各种目标的target。我们最终想要的目标就是$(obj)u-boot,然后看后面的,#它都信赖了好多其它的目标,然后这些个目标,也是在此处定义的,然后有相应的$(MAKE)

    #来执行相应的操作,所以这样就实现了一个Makefile文件,

    #套很多个其它的Makefile文件来编译整个工程的情况。

    ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)

     

    all:          $(ALL)

     

    $(obj)u-boot.hex: $(obj)u-boot

                  $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@

     

    $(obj)u-boot.srec:       $(obj)u-boot

                  $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@

     

    $(obj)u-boot.bin:  $(obj)u-boot

                  $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@

     

    $(obj)u-boot.img: $(obj)u-boot.bin

                  ./tools/mkimage -A $(ARCH) -T firmware -C none /

                  -a $(TEXT_BASE) -e 0 /

                  -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | /

                         sed -e 's/"[     ]*$$/ for $(BOARD) board"/') /

                  -d $< $@

     

    $(obj)u-boot.dis:  $(obj)u-boot

                  $(OBJDUMP) -d $< > $@

     

    $(obj)u-boot:        depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)

                  UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*/(__u_boot_cmd_.*/)/-u/1/p'|sort|uniq`;/

                  cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) /

                         --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) /

                         -Map u-boot.map -o u-boot

     

    $(OBJS):

                  $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))

     

    $(LIBS):

                  $(MAKE) -C $(dir $(subst $(obj),,$@))

     

    $(SUBDIRS):

                  $(MAKE) -C $@ all

     

    $(NAND_SPL):   version

                  $(MAKE) -C nand_spl all

     

    $(U_BOOT_NAND): $(NAND_SPL) $(obj)u-boot.bin

                  cat nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin

     

    version:

                  @echo -n "#define U_BOOT_VERSION /"U-Boot " > $(VERSION_FILE); /

                  echo -n "$(U_BOOT_VERSION)" >> $(VERSION_FILE); /

                  echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion /

                          $(TOPDIR)) >> $(VERSION_FILE); /

                  echo "/"" >> $(VERSION_FILE)

     

    gdbtools:

                  $(MAKE) -C tools/gdb all || exit 1

     

    updater:

                  $(MAKE) -C tools/updater all || exit 1

     

    env:

                  $(MAKE) -C tools/env all || exit 1

     

    depend dep:

                  for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done

     

    tags ctags:

                  ctags -w -o $(OBJTREE)/ctags `find $(SUBDIRS) include /

                                lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) /

                                fs/cramfs fs/fat fs/fdos fs/jffs2 /

                                net disk rtc dtt drivers drivers/sk98lin common /

                         /( -name CVS -prune /) -o /( -name '*.[ch]' -print /)`

     

    etags:

                  etags -a -o $(OBJTREE)/etags `find $(SUBDIRS) include /

                                lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) /

                                fs/cramfs fs/fat fs/fdos fs/jffs2 /

                                net disk rtc dtt drivers drivers/sk98lin common /

                         /( -name CVS -prune /) -o /( -name '*.[ch]' -print /)`

     

    $(obj)System.map:      $(obj)u-boot

                  @$(NM) $< | /

                  grep -v '/(compiled/)/|/(/.o$$/)/|/( [aUw] /)/|/(/./.ng$$/)/|/(LASH[RL]DI/)' | /

                  sort > $(obj)System.map

     

    #########################################################################

    else

    all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin /

    $(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot /

    $(SUBDIRS) version gdbtools updater env depend /

    dep tags ctags etags $(obj)System.map:

           @echo "System not configured - see README" >&2

           @ exit 1

    endif

    #这里就明说了,如果$(OBJTREE)/include/config.mk文件不存在,则编译不能进行下去了。

    #########################################################################

     

    #删掉了包括$(obj)include/config.mk文件在内的,几个在编译的时候生成的配置文件,这

    #$(obj)include/config.mk$(OBJTREE)/include/config.mk是同一个文件。这样做是为

    #了保证重新生成文件的纯粹性。

    unconfig:

           @rm -f $(obj)include/config.h $(obj)include/config.mk /

                  $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp

     

    #========================================================================

    # PowerPC

    #========================================================================

     

    #########################################################################

    ## MPC5xx Systems

    #########################################################################

     

    canmb_config:      unconfig

           @$(MKCONFIG) -a canmb ppc mpc5xxx canmb

     

    cmi_mpc5xx_config:    unconfig

           @$(MKCONFIG) $(@:_config=) ppc mpc5xx cmi

     

    PATI_config:        unconfig

           @$(MKCONFIG) $(@:_config=) ppc mpc5xx pati mpl

     

    #########################################################################

    ## MPC5xxx Systems

    #########################################################################

     

    aev_config: unconfig

           @$(MKCONFIG) -a aev ppc mpc5xxx tqm5200

     

    BC3450_config:   unconfig

           @$(MKCONFIG) -a BC3450 ppc mpc5xxx bc3450

     

    cpci5200_config:  unconfig

           @$(MKCONFIG) -a cpci5200  ppc mpc5xxx cpci5200 esd

     

    hmi1001_config:         unconfig

           @$(MKCONFIG) hmi1001 ppc mpc5xxx hmi1001

     

    Lite5200_config                        /

    Lite5200_LOWBOOT_config                 /

    Lite5200_LOWBOOT08_config             /

    icecube_5200_config                 /

    icecube_5200_LOWBOOT_config         /

    icecube_5200_LOWBOOT08_config            /

    icecube_5200_DDR_config             /

    icecube_5200_DDR_LOWBOOT_config     /

    icecube_5200_DDR_LOWBOOT08_config  /

    icecube_5100_config:                unconfig

           @mkdir -p $(obj)include

           @mkdir -p $(obj)board/icecube

           @ >$(obj)include/config.h

           @[ -z "$(findstring LOWBOOT_,$@)" ] || /

                  { if [ "$(findstring DDR,$@)" ] ; /

                         then echo "TEXT_BASE = 0xFF800000" >$(obj)board/icecube/config.tmp ; /

                         else echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; /

                    fi ; /

                    echo "... with LOWBOOT configuration" ; /

                  }

           @[ -z "$(findstring LOWBOOT08,$@)" ] || /

                  { echo "TEXT_BASE = 0xFF800000" >$(obj)board/icecube/config.tmp ; /

                    echo "... with 8 MB flash only" ; /

                    echo "... with LOWBOOT configuration" ; /

                  }

           @[ -z "$(findstring DDR,$@)" ] || /

                  { echo "#define CONFIG_MPC5200_DDR" >>$(obj)include/config.h ; /

                    echo "... DDR memory revision" ; /

                  }

           @[ -z "$(findstring 5200,$@)" ] || /

                  { echo "#define CONFIG_MPC5200"           >>$(obj)include/config.h ; /

                    echo "... with MPC5200 processor" ; /

                  }

           @[ -z "$(findstring 5100,$@)" ] || /

                  { echo "#define CONFIG_MGT5100"           >>$(obj)include/config.h ; /

                    echo "... with MGT5100 processor" ; /

                  }

           @$(MKCONFIG) -a IceCube ppc mpc5xxx icecube

     

    v38b_config: unconfig

           @./mkconfig -a V38B ppc mpc5xxx v38b

     

    inka4x0_config:    unconfig

           @$(MKCONFIG) inka4x0 ppc mpc5xxx inka4x0

     

    lite5200b_config   /

    lite5200b_LOWBOOT_config: unconfig

           @mkdir -p $(obj)include

           @mkdir -p $(obj)board/icecube

           @ >$(obj)include/config.h

           @ echo "#define CONFIG_MPC5200_DDR"      >>$(obj)include/config.h

           @ echo "... DDR memory revision"

           @ echo "#define CONFIG_MPC5200"         >>$(obj)include/config.h

           @ echo "#define CONFIG_LITE5200B"       >>$(obj)include/config.h

           @[ -z "$(findstring LOWBOOT_,$@)" ] || /

                  { echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; /

                    echo "... with LOWBOOT configuration" ; /

                  }

           @ echo "... with MPC5200B processor"

           @$(MKCONFIG) -a IceCube  ppc mpc5xxx icecube

     

    mcc200_config     /

    mcc200_SDRAM_config   /

    mcc200_highboot_config    /

    mcc200_COM12_config    /

    mcc200_COM12_SDRAM_config  /

    mcc200_COM12_highboot_config   /

    mcc200_COM12_highboot_SDRAM_config /

    mcc200_highboot_SDRAM_config  /

    prs200_config      /

    prs200_DDR_config   /

    prs200_highboot_config     /

    prs200_highboot_DDR_config:  unconfig

           @mkdir -p $(obj)include

           @mkdir -p $(obj)board/mcc200

           @ >$(obj)include/config.h

           @[ -n "$(findstring highboot,$@)" ] || /

                  { echo "... with lowboot configuration" ; /

                  }

           @[ -z "$(findstring highboot,$@)" ] || /

                  { echo "TEXT_BASE = 0xFFF00000" >$(obj)board/mcc200/config.tmp ; /

                    echo "... with highboot configuration" ; /

                  }

           @[ -n "$(findstring _SDRAM,$@)" ] || /

                  { if [ -n "$(findstring mcc200,$@)" ]; /

                    then /

                       echo "... with DDR" ; /

                    else /

                         if [ -n "$(findstring _DDR,$@)" ];/

                         then /

                                echo "... with DDR" ; /

                         else /

                                echo "#define CONFIG_MCC200_SDRAM" >>$(obj)include/config.h ;/

                                echo "... with SDRAM" ; /

                         fi; /

                    fi; /

                  }

           @[ -z "$(findstring _SDRAM,$@)" ] || /

                  { echo "#define CONFIG_MCC200_SDRAM"    >>$(obj)include/config.h ; /

                    echo "... with SDRAM" ; /

                  }

           @[ -z "$(findstring COM12,$@)" ] || /

                  { echo "#define CONFIG_CONSOLE_COM12" >>$(obj)include/config.h ; /

                    echo "... with console on COM12" ; /

                  }

           @[ -z "$(findstring prs200,$@)" ] || /

                  { echo "#define CONFIG_PRS200"  >>$(obj)include/config.h ;/

                  }

           @$(MKCONFIG) -n $@ -a mcc200 ppc mpc5xxx mcc200

     

    o2dnt_config:

           @$(MKCONFIG) o2dnt ppc mpc5xxx o2dnt

     

    pf5200_config:  unconfig

           @$(MKCONFIG) pf5200  ppc mpc5xxx pf5200 esd

     

    PM520_config /

    PM520_DDR_config /

    PM520_ROMBOOT_config /

    PM520_ROMBOOT_DDR_config: unconfig

           @mkdir -p $(obj)include

           @ >$(obj)include/config.h

           @[ -z "$(findstring DDR,$@)" ] || /

                  { echo "#define CONFIG_MPC5200_DDR" >>$(obj)include/config.h ; /

                    echo "... DDR memory revision" ; /

                  }

           @[ -z "$(findstring ROMBOOT,$@)" ] || /

                  { echo "#define CONFIG_BOOT_ROM" >>$(obj)include/config.h ; /

                    echo "... booting from 8-bit flash" ; /

                  }

           @$(MKCONFIG) -a PM520 ppc mpc5xxx pm520

     

    smmaco4_config: unconfig

           @$(MKCONFIG) -a smmaco4 ppc mpc5xxx tqm5200

     

    spieval_config:      unconfig

           @$(MKCONFIG) -a spieval ppc mpc5xxx tqm5200

     

    TB5200_B_config /

    TB5200_config:    unconfig

           @mkdir -p $(obj)include

           @[ -z "$(findstring _B,$@)" ] || /

                  { echo "#define CONFIG_TQM5200_B"      >>$(obj)include/config.h ; /

                    echo "... with MPC5200B processor" ; /

                  }

           @$(MKCONFIG) -n $@ -a TB5200 ppc mpc5xxx tqm5200

     

    MINI5200_config       /

    EVAL5200_config      /

    TOP5200_config: unconfig

           @mkdir -p $(obj)include

           @ echo "#define CONFIG_$(@:_config=) 1"       >$(obj)include/config.h

           @$(MKCONFIG) -n $@ -a TOP5200 ppc mpc5xxx top5200 emk

     

    Total5100_config        /

    Total5200_config        /

    Total5200_lowboot_config /

    Total5200_Rev2_config            /

    Total5200_Rev2_lowboot_config:    unconfig

           @mkdir -p $(obj)include

           @mkdir -p $(obj)board/total5200

           @ >$(obj)include/config.h

           @[ -z "$(findstring 5100,$@)" ] || /

                  { echo "#define CONFIG_MGT5100"           >>$(obj)include/config.h ; /

                    echo "... with MGT5100 processor" ; /

                  }

           @[ -z "$(findstring 5200,$@)" ] || /

                  { echo "#define CONFIG_MPC5200"           >>$(obj)include/config.h ; /

                    echo "... with MPC5200 processor" ; /

                  }

           @[ -n "$(findstring Rev,$@)" ] || /

                  { echo "#define CONFIG_TOTAL5200_REV 1"  >>$(obj)include/config.h ; /

                    echo "... revision 1 board" ; /

                  }

           @[ -z "$(findstring Rev2_,$@)" ] || /

                  { echo "#define CONFIG_TOTAL5200_REV 2"  >>$(obj)include/config.h ; /

                    echo "... revision 2 board" ; /

                  }

           @[ -z "$(findstring lowboot_,$@)" ] || /

                  { echo "TEXT_BASE = 0xFE000000" >$(obj)board/total5200/config.tmp ; /

                    echo "... with lowboot configuration" ; /

                  }

           @$(MKCONFIG) -a Total5200 ppc mpc5xxx total5200

     

    cam5200_config /

    fo300_config /

    MiniFAP_config /

    TQM5200S_config /

    TQM5200S_HIGHBOOT_config /

    TQM5200_B_config /

    TQM5200_B_HIGHBOOT_config /

    TQM5200_config       /

    TQM5200_STK100_config:     unconfig

           @mkdir -p $(obj)include

           @mkdir -p $(obj)board/tqm5200

           @ >$(obj)include/config.h

           @[ -z "$(findstring cam5200,$@)" ] || /

                  { echo "#define CONFIG_CAM5200"    >>$(obj)include/config.h ; /

                    echo "#define CONFIG_TQM5200S"       >>$(obj)include/config.h ; /

                    echo "#define CONFIG_TQM5200_B"     >>$(obj)include/config.h ; /

                    echo "... TQM5200S on Cam5200" ; /

                  }

           @[ -z "$(findstring fo300,$@)" ] || /

                  { echo "#define CONFIG_FO300"  >>$(obj)include/config.h ; /

                    echo "... TQM5200 on FO300" ; /

                  }

           @[ -z "$(findstring MiniFAP,$@)" ] || /

                  { echo "#define CONFIG_MINIFAP"    >>$(obj)include/config.h ; /

                    echo "... TQM5200_AC on MiniFAP" ; /

                  }

           @[ -z "$(findstring STK100,$@)" ] || /

                  { echo "#define CONFIG_STK52XX_REV100"  >>$(obj)include/config.h ; /

                    echo "... on a STK52XX.100 base board" ; /

                  }

           @[ -z "$(findstring TQM5200_B,$@)" ] || /

                  { echo "#define CONFIG_TQM5200_B"      >>$(obj)include/config.h ; /

                  }

           @[ -z "$(findstring TQM5200S,$@)" ] || /

                  { echo "#define CONFIG_TQM5200S"  >>$(obj)include/config.h ; /

                    echo "#define CONFIG_TQM5200_B"     >>$(obj)include/config.h ; /

                  }

           @[ -z "$(findstring HIGHBOOT,$@)" ] || /

                  { echo "TEXT_BASE = 0xFFF00000" >$(obj)board/tqm5200/config.tmp ; /

                  }

           @$(MKCONFIG) -n $@ -a TQM5200 ppc mpc5xxx tqm5200

     

    #########################################################################

    #########################################################################

    #########################################################################

     

    clean:

           find $(OBJTREE) -type f /

                  /( -name 'core' -o -name '*.bak' -o -name '*~' /

                  -o -name '*.o'  -o -name '*.a'  /) -print /

                  | xargs rm -f

           rm -f $(obj)examples/hello_world $(obj)examples/timer /

                 $(obj)examples/eepro100_eeprom $(obj)examples/sched /

                 $(obj)examples/mem_to_mem_idma2intr $(obj)examples/82559_eeprom /

                 $(obj)examples/smc91111_eeprom $(obj)examples/interrupt /

                 $(obj)examples/test_burst

           rm -f $(obj)tools/img2srec $(obj)tools/mkimage $(obj)tools/envcrc /

                  $(obj)tools/gen_eth_addr

           rm -f $(obj)tools/mpc86x_clk $(obj)tools/ncb

           rm -f $(obj)tools/easylogo/easylogo $(obj)tools/bmp_logo

           rm -f $(obj)tools/gdb/astest $(obj)tools/gdb/gdbcont $(obj)tools/gdb/gdbsend

           rm -f $(obj)tools/env/fw_printenv $(obj)tools/env/fw_setenv

           rm -f $(obj)board/cray/L1/bootscript.c $(obj)board/cray/L1/bootscript.image

           rm -f $(obj)board/netstar/eeprom $(obj)board/netstar/crcek $(obj)board/netstar/crcit

           rm -f $(obj)board/netstar/*.srec $(obj)board/netstar/*.bin

           rm -f $(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom

           rm -f $(obj)board/integratorap/u-boot.lds $(obj)board/integratorcp/u-boot.lds

           rm -f $(obj)include/bmp_logo.h

           find nand_spl -lname "*" -print | xargs rm -f

           rm -f nand_spl/u-boot-spl nand_spl/u-boot-spl.map

     

    clobber:  clean

           find $(OBJTREE) -type f /( -name .depend /

                  -o -name '*.srec' -o -name '*.bin' -o -name u-boot.img /) /

                  -print0 /

                  | xargs -0 rm -f

           rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS $(obj)include/version_autogenerated.h

           rm -fr $(obj)*.*~

           rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)

           rm -f $(obj)tools/crc32.c $(obj)tools/environment.c $(obj)tools/env/crc32.c

           rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c

           rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm

     

    ifeq ($(OBJTREE),$(SRCTREE))

    mrproper /

    distclean:       clobber unconfig

    else

    mrproper /

    distclean:       clobber unconfig

           rm -rf $(OBJTREE)/*

    endif

     

    backup:

           F=`basename $(TOPDIR)` ; cd .. ; /

           gtar --force-local -zcvf `date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F

     

    #########################################################################


    最新回复(0)