新闻中心

EEPW首页>嵌入式系统>设计应用> GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

作者: 时间:2016-11-26 来源:网络 收藏
  • LIBS:=$(addprefix$(obj),$(sort$(LIBS)))
  • ########################################
  • #将LIBS排序后为LIBS增加前缀
  • #########################################
  • .PHONY:$(LIBS)
  • LIBBOARD=board/$(BOARDDIR)/lib$(BOARD).o
  • LIBBOARD:=$(addprefix$(obj),$(LIBBOARD))
  • ###########################################
  • #为LIBBOARD增加前缀,LIBBOARD就是board/samsung/smdk2410/libsmdk2410.o
  • ###########################################
  • #AddGCClib
  • ifdefUSE_PRIVATE_LIBGCC
  • ifeq("$(USE_PRIVATE_LIBGCC)","yes")
  • PLATFORM_LIBGCC=$(OBJTREE)/arch/$(ARCH)/lib/libgcc.o
  • else
  • PLATFORM_LIBGCC=-L$(USE_PRIVATE_LIBGCC)-lgcc
  • endif
  • else
  • PLATFORM_LIBGCC:=-L$(shelldirname`$(CC)$(CFLAGS)-print-libgcc-file-name`)-lgcc
  • endif
  • PLATFORM_LIBS+=$(PLATFORM_LIBGCC)
  • exportPLATFORM_LIBS
  • #SpecialflagsforCPPwhenprocessingthelinkerscript.
  • #Passtheversiondownsowecanhandlebackwardscompatibility
  • #onthefly.
  • LDPPFLAGS+=
  • -include$(TOPDIR)/include/u-boot/u-boot.lds.h
  • -DCPUDIR=$(CPUDIR)
  • $(shell$(LD)--version|
  • sed-nes/GNUldversion . .*/-DLD_MAJOR=1-DLD_MINOR=2/p)
  • __OBJS:=$(subst$(obj),,$(OBJS))
  • __LIBS:=$(subst$(obj),,$(LIBS))$(subst$(obj),,$(LIBBOARD))
  • #########################################################################
  • #########################################################################
  • ifneq($(CONFIG_BOARD_SIZE_LIMIT),)
  • BOARD_SIZE_CHECK=
  • @actual=`wc-c$@|awk{print$$1}`;
  • limit=$(CONFIG_BOARD_SIZE_LIMIT);
  • iftest
    limit;then
  • echo"$@exceedsfilesizelimit:";
  • echo"limit:$$limitbytes";
  • echo"actual:$$actualbytes";
  • echo"excess:$$((actual-limit))bytes";
  • exit1;
  • fi
  • else
  • BOARD_SIZE_CHECK=
  • endif
  • 本文引用地址: //m.amcfsurvey.com/article/201611/321714.htm

    这里也给出顶层目录下的config.mk文件的注释:

    [cpp]view plaincopy
    1. #
    2. #(C)Copyright2000-2006
    3. #WolfgangDenk,DENXSoftwareEngineering,wd@denx.de.
    4. #
    5. #SeefileCREDITSforlistofpeoplewhocontributedtothis
    6. #project.
    7. #
    8. #Thisprogramisfreesoftware;youcanredistributeitand/or
    9. #modifyitunderthetermsoftheGNUGeneralPublicLicenseas
    10. #publishedbytheFreeSoftwareFoundation;eitherversion2of
    11. #theLicense,or(atyouroption)anylaterversion.
    12. #
    13. #Thisprogramisdistributedinthehopethatitwillbeuseful,
    14. #butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
    15. #MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe
    16. #GNUGeneralPublicLicenseformoredetails.
    17. #
    18. #YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense
    19. #alongwiththisprogram;ifnot,writetotheFreeSoftware
    20. #Foundation,Inc.,59TemplePlace,Suite330,Boston,
    21. #MA02111-1307USA
    22. #
    23. #########################################################################
    24. ifeq($(CURDIR),$(SRCTREE))
    25. dir:=
    26. else
    27. dir:=$(subst$(SRCTREE)/,,$(CURDIR))
    28. endif
    29. ###########################################################################
    30. #在顶层makefile中已经分析了CURDIR和SRCTREE都是当前目录,所以这里dir暂时为空
    31. ###########################################################################
    32. ifneq($(OBJTREE),$(SRCTREE))
    33. #CreateobjectfilesforSPLinaseparatedirectory
    34. ifeq($(CONFIG_SPL_BUILD),y)
    35. obj:=$(if$(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
    36. else
    37. obj:=$(if$(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)
    38. endif
    39. src:=$(if$(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/)
    40. $(shellmkdir-p$(obj))
    41. else
    42. #CreateobjectfilesforSPLinaseparatedirectory
    43. ifeq($(CONFIG_SPL_BUILD),y)
    44. obj:=$(if$(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
    45. $(shellmkdir-p$(obj))
    46. else
    47. obj:=
    48. endif
    49. src:=
    50. endif
    51. ########################################################################################
    52. #首先OBJTREE和SRCTREE都是当前目录,所以执行else
    53. #查找CONFIG_SPL_BUILD是否定义为y,在autoconf.mk中,并没有这个定义,所以obj和src暂时也为空
    54. ########################################################################################
    55. #cleantheslate...
    56. PLATFORM_RELFLAGS=
    57. PLATFORM_CPPFLAGS=
    58. PLATFORM_LDFLAGS=
    59. #########################################################################
    60. HOSTCFLAGS=-Wall-Wstrict-prototypes-O2-fomit-frame-pointer
    61. $(HOSTCPPFLAGS)
    62. HOSTSTRIP=strip
    63. #
    64. #MacOSX/DarwinsCpreprocessorisApplespecific.It
    65. #generatesnumerouserrorsandwarnings.Wewanttobypassit
    66. #anduseGNUCscpp.Todothiswepassthe-traditional-cpp
    67. #optiontothecompiler.Notethatthe-traditional-cppflag
    68. #DOESNOThavethesamesemanticsasGNUCsflag,allitdoes
    69. #isinvoketheGNUpreprocessorinstockANSI/ISOCfashion.
    70. #
    71. #Appleslinkerissimilar,thankstothenew2stagelinking
    72. #multiplesymboldefinitionsaretreatedaserrors,hencethe
    73. #-multiply_definedsuppressoptiontoturnoffthiserror.
    74. #
    75. ifeq($(HOSTOS),darwin)
    76. #getmajorandminorproductversion(e.g.10and6forSnowLeopard)
    77. DARWIN_MAJOR_VERSION=$(shellsw_vers-productVersion|cut-f1-d.)
    78. DARWIN_MINOR_VERSION=$(shellsw_vers-productVersion|cut-f2-d.)
    79. os_x_before=$(shellif[$(DARWIN_MAJOR_VERSION)-le$(1)-a
    80. $(DARWIN_MINOR_VERSION)-le$(2)];thenecho"$(3)";elseecho"$(4)";fi;)
    81. #SnowLeopardsbuildenvironmenthasnolongerrestrictionsasdescribedabove
    82. HOSTCC=$(callos_x_before,10,5,"cc","gcc")
    83. HOSTCFLAGS+=$(callos_x_before,10,4,"-traditional-cpp")
    84. HOSTLDFLAGS+=$(callos_x_before,10,5,"-multiply_definedsuppress")
    85. else
    86. HOSTCC=gcc
    87. endif
    88. ifeq($(HOSTOS),cygwin)
    89. HOSTCFLAGS+=-ansi
    90. endif
    91. #Webuildsomefileswithextrapedanticflagstotrytominimizethings
    92. #thatwontbuildonsomeweirdhostcompiler--thoughtherearelotsof
    93. #exceptionsforfilesthatarentcomplaint.
    94. HOSTCFLAGS_NOPED=$(filter-out-pedantic,$(HOSTCFLAGS))
    95. HOSTCFLAGS+=-pedantic
    96. ############################################################
    97. #HOSTCFLAGS_NOPED是利用filter-out函数从HOSTCFLAGS中过滤掉-pedantic选项
    98. #而HOSTCFLAGS追加上-pedantic选项
    99. ############################################################
    100. #########################################################################
    101. #
    102. #Optionchecker,gccversion(courtesylinuxkernel)toensure
    103. #onlysupportedcompileroptionsareused
    104. #
    105. CC_OPTIONS_CACHE_FILE:=$(OBJTREE)/include/generated/cc_options.mk
    106. CC_TEST_OFILE:=$(OBJTREE)/include/generated/cc_test_file.o
    107. -include$(CC_OPTIONS_CACHE_FILE)
    108. #############################################################################
    109. #定义编译选项
    110. #在cc_options.mk中有如下选项:
    111. #CC_OPTIONS+=-marm
    112. #CC_OPTIONS+=-mno-thumb-interwork
    113. #CC_OPTIONS+=-mapcs-32
    114. #CC_OPTIONS+=-malignment-traps
    115. #CC_OPTIONS+=-Wno-format-nonliteral
    116. #CC_OPTIONS+=-Wno-format-security
    117. #CC_OPTIONS+=-mabi=apcs-gnu
    118. #CC_OPTIONS+=-mabi=aapcs-linux
    119. #############################################################################
    120. cc-option-sys=$(shellmkdir-p$(dir$(CC_TEST_OFILE));
    121. if$(CC)$(CFLAGS)$(1)-S-xc/dev/null-o$(CC_TEST_OFILE)
    122. >/dev/null2>&1;then
    123. echoCC_OPTIONS+=$(strip$1)>>$(CC_OPTIONS_CACHE_FILE);
    124. echo"$(1)";fi)
    125. ifeq($(CONFIG_CC_OPT_CACHE_DISABLE),y)
    126. cc-option=$(strip$(if$(callcc-option-sys,$1),$1,$2))
    127. else
    128. cc-option=$(strip$(if$(findstring$1,$(CC_OPTIONS)),$1,
    129. $(if$(callcc-option-sys,$1),$1,$2)))
    130. endif
    131. ###########################################################################################
    132. #定义两个函数,cc-option-sys被cc-option调用
    133. #cc-option被后面的函数调用
    134. ############################################################################################
    135. #cc-version
    136. #Usagegcc-ver:=$(callcc-version)
    137. cc-version=$(shell$(SHELL)$(SRCTREE)/tools/gcc-version.sh$(CC))
    138. ##########################################################################################
    139. #使用tools/gcc-version.sh脚本来获取编译器的版本
    140. #在顶层makefile中,有调用cc-version函数
    141. ##########################################################################################
    142. #
    143. #Includethemakevariables(CC,etc...)
    144. #
    145. AS=$(CROSS_COMPILE)as
    146. LD=$(CROSS_COMPILE)ld
    147. CC=$(CROSS_COMPILE)gcc
    148. CPP=$(CC)-E
    149. AR=$(CROSS_COMPILE)ar
    150. NM=$(CROSS_COMPILE)nm
    151. LDR=$(CROSS_COMPILE)ldr
    152. STRIP=$(CROSS_COMPILE)strip
    153. OBJCOPY=$(CROSS_COMPILE)objcopy
    154. OBJDUMP=$(CROSS_COMPILE)objdump
    155. RANLIB=$(CROSS_COMPILE)RANLIB
    156. DTC=dtc
    157. #########################################################################
    158. #定义汇编器,连接器,编译器,打包工具,反汇编工具,值的注意的RANLIB的作用是在静态库有添加新的.o后,负责更新索引.
    159. #########################################################################
    160. #Loadgeneratedboardconfiguration
    161. sinclude$(OBJTREE)/include/autoconf.mk
    162. sinclude$(OBJTREE)/include/config.mk
    163. ################################################################################################
    164. #包上配置编译时产生的autoconf.mk和config.mk文件
    165. ################################################################################################
    166. #Somearchitectureconfig.mkfilesneedtoknowwhatCPUDIRissetto,
    167. #socalculateCPUDIRbeforeincludingARCH/SOC/CPUconfig.mkfiles.
    168. #Checkifarch/$ARCH/cpu/$CPUexists,otherwiseassumearch/$ARCH/cpucontains
    169. #CPU-specificcode.
    170. CPUDIR=arch/$(ARCH)/cpu/$(CPU)
    171. ifneq($(SRCTREE)/$(CPUDIR),$(wildcard$(SRCTREE)/$(CPUDIR)))
    172. CPUDIR=arch/$(ARCH)/cpu
    173. endif
    174. #################################################################################################
    175. #定义CPUDIR为arch/arm/cpu/arm920t
    176. #################################################################################################
    177. sinclude$(TOPDIR)/arch/$(ARCH)/config.mk#includearchitecturedependendrules
    178. sinclude$(TOPDIR)/$(CPUDIR)/config.mk#includeCPUspecificrules
    179. ##################################################################################################
    180. #包上arch/arm/config.mk和/arch/arm/cpu/arm920t/config.mk文件
    181. ##################################################################################################
    182. ifdefSOC
    183. sinclude$(TOPDIR)/$(CPUDIR)/$(SOC)/config.mk#includeSoCspecificrules
    184. endif
    185. ######################################################################
    186. #包上arch/arm/cpu/arm920t/s3c24x0/config.mk文件
    187. #####################################################################
    188. ifdefVENDOR
    189. BOARDDIR=$(VENDOR)/$(BOARD)
    190. else
    191. BOARDDIR=$(BOARD)
    192. endif
    193. ifdefBOARD
    194. sinclude$(TOPDIR)/board/$(BOARDDIR)/config.mk#includeboardspecificrules
    195. endif
    196. ######################################################################################
    197. #包上board/samsung/smdk2410/config.mk文件
    198. ######################################################################################
    199. #########################################################################
    200. #Wedontactuallyuse$(ARFLAGS)anywhereanymore,socatchpeople
    201. #whoareportingoldcodetolatestmainlinebutnotupdating$(AR).
    202. ARFLAGS=$(errorupdateyourMakefiletousecmd_link_o_targetandnotAR)
    203. RELFLAGS=$(PLATFORM_RELFLAGS)
    204. DBGFLAGS=-g#-DDEBUG
    205. OPTFLAGS=-Os#-fomit-frame-pointer
    206. OBJCFLAGS+=--gap-fill=0xff
    207. gccincdir:=$(shell$(CC)-print-file-name=include)
    208. CPPFLAGS:=$(DBGFLAGS)$(OPTFLAGS)$(RELFLAGS)
    209. -D__KERNEL__
    210. #Enablegarbagecollectionofun-usedsectionsforSPL
    211. ifeq($(CONFIG_SPL_BUILD),y)
    212. CPPFLAGS+=-ffunction-sections-fdata-sections
    213. LDFLAGS_FINAL+=--gc-sections
    214. endif
    215. ifneq($(CONFIG_SYS_TEXT_BASE),)
    216. CPPFLAGS+=-DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
    217. endif
    218. ifneq($(CONFIG_SPL_TEXT_BASE),)
    219. CPPFLAGS+=-DCONFIG_SPL_TEXT_BASE=$(CONFIG_SPL_TEXT_BASE)
    220. endif
    221. ifneq($(CONFIG_SPL_PAD_TO),)
    222. CPPFLAGS+=-DCONFIG_SPL_PAD_TO=$(CONFIG_SPL_PAD_TO)
    223. endif
    224. ifeq($(CONFIG_SPL_BUILD),y)
    225. CPPFLAGS+=-DCONFIG_SPL_BUILD
    226. endif
    227. ifneq($(RESET_VECTOR_ADDRESS),)
    228. CPPFLAGS+=-DRESET_VECTOR_ADDRESS=$(RESET_VECTOR_ADDRESS)
    229. endif
    230. ifneq($(OBJTREE),$(SRCTREE))
    231. CPPFLAGS+=-I$(OBJTREE)/include2-I$(OBJTREE)/include
    232. endif
    233. CPPFLAGS+=-I$(TOPDIR)/include
    234. CPPFLAGS+=-fno-builtin-ffreestanding-nostdinc
    235. -isystem$(gccincdir)-pipe$(PLATFORM_CPPFLAGS)
    236. ifdefBUILD_TAG
    237. CFLAGS:=$(CPPFLAGS)-Wall-Wstrict-prototypes
    238. -DBUILD_TAG="$(BUILD_TAG)"
    239. else
    240. CFLAGS:=$(CPPFLAGS)-Wall-Wstrict-prototypes
    241. endif
    242. CFLAGS_SSP:=$(callcc-option,-fno-stack-protector)
    243. CFLAGS+=$(CFLAGS_SSP)
    244. #Sometoolchainsenablesecurityrelatedwarningflagsbydefault,
    245. #buttheydontmakemuchsenseintheu-bootworld,sodisablethem.
    246. CFLAGS_WARN:=$(callcc-option,-Wno-format-nonliteral)
    247. $(callcc-option,-Wno-format-security)
    248. CFLAGS+=$(CFLAGS_WARN)
    249. #Reportstackusageifsupported
    250. CFLAGS_STACK:=$(callcc-option,-fstack-usage)
    251. CFLAGS+=$(CFLAGS_STACK)
    252. #$(CPPFLAGS)sets-g,whichcausesgcctopassasuitable-g
    253. #optiontotheassembler.
    254. AFLAGS_DEBUG:=
    255. #turnjbsrintojsrform68k
    256. ifeq($(ARCH),m68k)
    257. ifeq($(findstring3.4,$(shell$(CC)--version)),3.4)
    258. AFLAGS_DEBUG:=-Wa,-gstabs,-S
    259. endif
    260. endif


    评论


    技术专区

    关闭