微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

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

时间:11-26 来源:互联网 点击:

        1. OSSHELL
        2. #########################
        3. #HOSTARCH为i686,HOSTOS为linux,SHELL为/bin/sh
        4. #############################
        5. #Dealwithcollidingdefinitionsfromtcshetc.
        6. VENDOR=
        7. #########################################################################
        8. #Allowforsilentbuilds
        9. ifeq(,$(findstrings,$(MAKEFLAGS)))
        10. XECHO=echo
        11. else
        12. XECHO=:
        13. endif
        14. ###########################
        15. #因为MAKEFLAGS变量的字符串为空,找不到s,所以ifeq为真,XECHO=echo
        16. ###########################
        17. #########################################################################
        18. #
        19. #U-bootbuildsupportsproducingaobjectfilestotheseparateexternal
        20. #directory.Twousecasesaresupported:
        21. #
        22. #1)AddO=tothemakecommandline
        23. #makeO=/tmp/buildall
        24. #
        25. #2)SetenvironementvariableBUILD_DIRtopointtothedesiredlocation
        26. #exportBUILD_DIR=/tmp/build
        27. #make
        28. #
        29. #ThesecondapproachcanalsobeusedwithaMAKEALLscript
        30. #exportBUILD_DIR=/tmp/build
        31. #./MAKEALL
        32. #
        33. #CommandlineO=settingoverridesBUILD_DIRenvironentvariable.
        34. #
        35. #Whennoneoftheabovemethodsisusedthelocalbuildisperformedand
        36. #theobjectfilesareplacedinthesourcedirectory.
        37. #
        38. ifdefO
        39. ifeq("$(originO)","commandline")
        40. BUILD_DIR:=$(O)
        41. endif
        42. endif
        43. #################################
        44. #如果没有在make命令行中定义O=/tmp之类的,那么BUILD_DIR就为/tmp,否则为空。
        45. #当使用makeO=/tmp时,表明#ifdefO有定义,而$(originO)返回的就是"commandline"
        46. #################################
        47. ifneq($(BUILD_DIR),)
        48. saved-output:=$(BUILD_DIR)
        49. #Attempttocreateaoutputdirectory.
        50. $(shell[-d${BUILD_DIR}]||mkdir-p${BUILD_DIR})
        51. #Verifyifitwassuccessful.
        52. BUILD_DIR:=$(shellcd$(BUILD_DIR)&&/bin/pwd)
        53. $(if$(BUILD_DIR),,$(erroroutputdirectory"$(saved-output)"doesnotexist))
        54. endif#ifneq($(BUILD_DIR),)
        55. #################################
        56. #如果BUILD_DIR不为空,那么这几句就执行:
        57. #首先,saved-output变量也是BUILD_DIR的值
        58. #如果BUILD_DIR不存在,那么就创建BUILD_DIR目录
        59. #检测BUILD_DIR目录是否成功建好了,如果有问题就输出错误信息
        60. #################################
        61. OBJTREE:=$(if$(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
        62. SPLTREE:=$(OBJTREE)/spl
        63. SRCTREE:=$(CURDIR)
        64. TOPDIR:=$(SRCTREE)
        65. LNDIR:=$(OBJTREE)
        66. exportTOPDIRSRCTREEOBJTREESPLTREE
        67. ###########################################
        68. #如果BUILD_DIR有值,那么OBJTREE就是BUILD_DIR的值,如果BUILD_DIR为空,那么OBJTREE就是CURDIR的值,$(CURDIR)时GNUMake内嵌的变量,是当前目录。
        69. #我们在make时候不加O=/tmp之类的参数,所以OBJTREE就是当前工作目录,SPLTREE是当前工作目录下的spl目录,SRCTREE时当前工作目录,TOPDIR也是当前目录,LNDIR也是当前目录。
        70. ##########################################
        71. MKCONFIG:=$(SRCTREE)/mkconfig
        72. exportMKCONFIG
        73. #############################################
        74. #MKCONFIG定义为当前工作目录下的mkconfig脚本,并export
        75. #############################################
        76. ifneq($(OBJTREE),$(SRCTREE))
        77. REMOTE_BUILD:=1
        78. exportREMOTE_BUILD
        79. endif
        80. ####################################################################
        81. #在我们的执行中,OBJTREE和SRCTREE是相等的,所以不管了
        82. ###################################################################
        83. #$(obj)and(src)aredefinedinconfig.mkbuthereinmainMakefile
        84. #wealsoneedthembeforeconfig.mkisincludedwhichisthecasefor
        85. #sometargetslikeunconfig,clean,clobber,distclean,etc.
        86. ifneq($(OBJTREE),$(SRCTREE))
        87. obj:=$(OBJTREE)/
        88. src:=$(SRCTREE)/
        89. else
        90. obj:=
        91. src:=
        92. endif
        93. exportobjsrc
        94. #######################################
        95. #可以先看下上面的注释因为两个路径相同,所以执行else
        96. #########################################
        97. #MakesureCDPATHsettingsdontinterfere
        98. unexportCDPATH
        99. #########################################################################
        100. #The"tools"areneededearly,soputthisfirst
        101. #Dontincludestuffalreadydonein$(LIBS)
        102. #The"examples"conditionallydependonU-Boot(say,whenUSE_PRIVATE_LIBGCC
        103. #is"yes"),socompileexamplesafterU-Bootiscompiled.
        104. SUBDIR_TOOLS=tools
        105. SUBDIR_EXAMPLES=examples/standaloneexamples/api
        106. SUBDIRS=$(SUBDIR_TOOLS)
        107. ###########

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top