GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读
时间:11-26
来源:互联网
点击:
- OSSHELL
- #########################
- #HOSTARCH为i686,HOSTOS为linux,SHELL为/bin/sh
- #############################
- #Dealwithcollidingdefinitionsfromtcshetc.
- VENDOR=
- #########################################################################
- #Allowforsilentbuilds
- ifeq(,$(findstrings,$(MAKEFLAGS)))
- XECHO=echo
- else
- XECHO=:
- endif
- ###########################
- #因为MAKEFLAGS变量的字符串为空,找不到s,所以ifeq为真,XECHO=echo
- ###########################
- #########################################################################
- #
- #U-bootbuildsupportsproducingaobjectfilestotheseparateexternal
- #directory.Twousecasesaresupported:
- #
- #1)AddO=tothemakecommandline
- #makeO=/tmp/buildall
- #
- #2)SetenvironementvariableBUILD_DIRtopointtothedesiredlocation
- #exportBUILD_DIR=/tmp/build
- #make
- #
- #ThesecondapproachcanalsobeusedwithaMAKEALLscript
- #exportBUILD_DIR=/tmp/build
- #./MAKEALL
- #
- #CommandlineO=settingoverridesBUILD_DIRenvironentvariable.
- #
- #Whennoneoftheabovemethodsisusedthelocalbuildisperformedand
- #theobjectfilesareplacedinthesourcedirectory.
- #
- ifdefO
- ifeq("$(originO)","commandline")
- BUILD_DIR:=$(O)
- endif
- endif
- #################################
- #如果没有在make命令行中定义O=/tmp之类的,那么BUILD_DIR就为/tmp,否则为空。
- #当使用makeO=/tmp时,表明#ifdefO有定义,而$(originO)返回的就是"commandline"
- #################################
- ifneq($(BUILD_DIR),)
- saved-output:=$(BUILD_DIR)
- #Attempttocreateaoutputdirectory.
- $(shell[-d${BUILD_DIR}]||mkdir-p${BUILD_DIR})
- #Verifyifitwassuccessful.
- BUILD_DIR:=$(shellcd$(BUILD_DIR)&&/bin/pwd)
- $(if$(BUILD_DIR),,$(erroroutputdirectory"$(saved-output)"doesnotexist))
- endif#ifneq($(BUILD_DIR),)
- #################################
- #如果BUILD_DIR不为空,那么这几句就执行:
- #首先,saved-output变量也是BUILD_DIR的值
- #如果BUILD_DIR不存在,那么就创建BUILD_DIR目录
- #检测BUILD_DIR目录是否成功建好了,如果有问题就输出错误信息
- #################################
- OBJTREE:=$(if$(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
- SPLTREE:=$(OBJTREE)/spl
- SRCTREE:=$(CURDIR)
- TOPDIR:=$(SRCTREE)
- LNDIR:=$(OBJTREE)
- exportTOPDIRSRCTREEOBJTREESPLTREE
- ###########################################
- #如果BUILD_DIR有值,那么OBJTREE就是BUILD_DIR的值,如果BUILD_DIR为空,那么OBJTREE就是CURDIR的值,$(CURDIR)时GNUMake内嵌的变量,是当前目录。
- #我们在make时候不加O=/tmp之类的参数,所以OBJTREE就是当前工作目录,SPLTREE是当前工作目录下的spl目录,SRCTREE时当前工作目录,TOPDIR也是当前目录,LNDIR也是当前目录。
- ##########################################
- MKCONFIG:=$(SRCTREE)/mkconfig
- exportMKCONFIG
- #############################################
- #MKCONFIG定义为当前工作目录下的mkconfig脚本,并export
- #############################################
- ifneq($(OBJTREE),$(SRCTREE))
- REMOTE_BUILD:=1
- exportREMOTE_BUILD
- endif
- ####################################################################
- #在我们的执行中,OBJTREE和SRCTREE是相等的,所以不管了
- ###################################################################
- #$(obj)and(src)aredefinedinconfig.mkbuthereinmainMakefile
- #wealsoneedthembeforeconfig.mkisincludedwhichisthecasefor
- #sometargetslikeunconfig,clean,clobber,distclean,etc.
- ifneq($(OBJTREE),$(SRCTREE))
- obj:=$(OBJTREE)/
- src:=$(SRCTREE)/
- else
- obj:=
- src:=
- endif
- exportobjsrc
- #######################################
- #可以先看下上面的注释因为两个路径相同,所以执行else
- #########################################
- #MakesureCDPATHsettingsdontinterfere
- unexportCDPATH
- #########################################################################
- #The"tools"areneededearly,soputthisfirst
- #Dontincludestuffalreadydonein$(LIBS)
- #The"examples"conditionallydependonU-Boot(say,whenUSE_PRIVATE_LIBGCC
- #is"yes"),socompileexamplesafterU-Bootiscompiled.
- SUBDIR_TOOLS=tools
- SUBDIR_EXAMPLES=examples/standaloneexamples/api
- SUBDIRS=$(SUBDIR_TOOLS)
- ###########
ARM汇编u-bootmakefilemkconfi 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)