文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>_top_makefile(mcf5249)

_top_makefile(mcf5249)

时间:2006-06-06  来源:rwen2012

     1    ############################################################################
     2    
     3    #
     4    # Makefile -- Top level uClinux makefile.
     5    #
     6    # Copyright (c) 2001-2002, SnapGear (www.snapgear.com)
     7    # Copyright (c) 2001, Lineo
     8    #
     9    
    10    VERSIONPKG = 1.3.4
    11    VERSIONSTR = $(CONFIG_VENDOR)/$(CONFIG_PRODUCT) Version $(VERSIONPKG)
    其中,CONFIG_VENDOR, CONFIG_PRODUCT在19行中的.config中“后定义”,注意Makefile
     中可以使用这种方式。
    
    12    
    13    ############################################################################
    14    #
    15    # Lets work out what the user wants, and if they have configured us yet
    16    #
    17    
    18    ifeq (.config,$(wildcard .config))
    19    include .config
#    .config内容:
#        CONFIG_DEFAULTS_HHTECH_M5249=y
#        CONFIG_DEFAULTS_KERNEL_2_4=y
#        CONFIG_DEFAULTS_LIBC_UC_LIBC=y
#        CONFIG_VENDOR=HHtech
#        CONFIG_PRODUCT=M5249
#        CONFIG_LINUXDIR=linux-2.4.x
#        CONFIG_LIBCDIR=libc
#        CONFIG_LANGUAGE=

    20    
    21    all: subdirs romfs modules modules_install image
    22    else
    23    all: config_error
    24    endif
    25    
    26    ############################################################################
    27    #
    28    # Get the core stuff worked out
    29    #
    30    
    31    LINUXDIR = $(CONFIG_LINUXDIR)  ;;linux-2.4.x
    32    LIBCDIR  = $(CONFIG_LIBCDIR)    ;;libc
    33    ROOTDIR  = $(shell pwd)        ;;uClinux-dist
    34    PATH     := $(PATH):$(ROOTDIR)/tools
    35    HOSTCC   = unset GCC_EXEC_PREFIX; cc
    36    IMAGEDIR = $(ROOTDIR)/images
    37    ROMFSDIR = $(ROOTDIR)/romfs
    38    ROMFSINST= romfs-inst.sh
    39    SCRIPTSDIR = $(ROOTDIR)/config/scripts
    40    TFTPDIR    = /tftpboot
    41    
    ;;内核的conifg文件
    42    LINUX_CONFIG  = $(ROOTDIR)/$(LINUXDIR)/.config
    
    ;;uClinux的config文件,用于提示编入哪些用户程序(在user目录中的程序)
    43    CONFIG_CONFIG = $(ROOTDIR)/config/.config
    
    44    MODULES_CONFIG = $(ROOTDIR)/modules/.config
    45    
    ;;测试用户shell
    46    CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
    47          else if [ -x /bin/bash ]; then echo /bin/bash; \
    48          else echo sh; fi ; fi)
    49    
    
    50    ifeq (config.arch,$(wildcard config.arch))
    51    include config.arch

#config.arch的内容:
#    CONSOLE_BAUD_RATE = 19200
#    CPUFLAGS = -m5307 -DCONFIG_COLDFIRE  ;;52XX的编译参数
#
#     包含机器相关的参数
#    include $(ROOTDIR)/vendors/config/m68knommu/config.arch
#
#    以下是可选的参数:
#     #DISABLE_XIP         = 1            # XIP works fine
#    #DISABLE_MOVE_RODATA = 1            # move-rodata is fine
#    #DISABLE_SHARED_LIBS = 1            # shared libs are fine
#     #LOPT                = -Os
#     #UOPT                = -Os
#

    52    ARCH_CONFIG = $(ROOTDIR)/config.arch
    53    export ARCH_CONFIG
    54    endif
    55    
    56    ifneq ($(SUBARCH),)
    57    # Using UML, so make the kernel and non-kernel with different ARCHs
    58    MAKEARCH = $(MAKE) ARCH=$(SUBARCH) CROSS_COMPILE=$(CROSS_COMPILE)
    59    MAKEARCH_KERNEL = $(MAKE) ARCH=$(ARCH) SUBARCH=$(SUBARCH) CROSS_COMPILE=$(CROSS_COMPILE)
    60    else
    61    MAKEARCH = $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
    62    MAKEARCH_KERNEL = $(MAKEARCH)
    63    endif
    64    
    65    
    66    DIRS    = $(VENDOR_TOPDIRS) lib user

    67    VENDDIR = $(ROOTDIR)/vendors/$(CONFIG_VENDOR)/$(CONFIG_PRODUCT)/.
##        = uClinux-dist/vendors/HHtech/M5249

    68    
    69    export VENDOR PRODUCT ROOTDIR LINUXDIR HOSTCC CONFIG_SHELL
    70    export CONFIG_CONFIG LINUX_CONFIG ROMFSDIR SCRIPTSDIR
    71    export VERSIONPKG VERSIONSTR ROMFSINST PATH IMAGEDIR TFTPDIR
    72    
    73    ############################################################################
    74    
    75    #
    76    # Config stuff,  we recall ourselves to load the new config.arch before
    77    # running the kernel and other config scripts
    78    #
    79    
    80    .PHONY: config.tk config.in
    81    
    82    config.in:
    83        config/mkconfig > config.in
    84    
    85    config.tk: config.in
    86        $(MAKE) -C $(SCRIPTSDIR) tkparse
    87        ARCH=dummy $(SCRIPTSDIR)/tkparse < config.in > config.tmp
    88        @if [ -f /usr/local/bin/wish ];    then \
    89            echo '#!'"/usr/local/bin/wish -f" > config.tk; \
    90        else \
    91            echo '#!'"/usr/bin/wish -f" > config.tk; \
    92        fi
    93        cat $(SCRIPTSDIR)/header.tk >> ./config.tk
    94        cat config.tmp >> config.tk
    95        rm -f config.tmp
    96        echo "set defaults \"/dev/null\"" >> config.tk
    97        echo "set help_file \"config/Configure.help\"" >> config.tk
    98        cat $(SCRIPTSDIR)/tail.tk >> config.tk
    99        chmod 755 config.tk
   100    
   101    .PHONY: xconfig
   102    xconfig: config.tk
   103        @wish -f config.tk
   104        @if [ ! -f .config ]; then \
   105            echo; \
   106            echo "You have not saved your config, please re-run make config"; \
   107            echo; \
   108            exit 1; \
   109         fi
   110        @config/setconfig defaults
   111        @if egrep "^CONFIG_DEFAULTS_KERNEL=y" .config > /dev/null; then \
   112            $(MAKE) linux_xconfig; \
   113         fi
   114        @if egrep "^CONFIG_DEFAULTS_MODULES=y" .config > /dev/null; then \
   115            $(MAKE) modules_xconfig; \
   116         fi
   117        @if egrep "^CONFIG_DEFAULTS_VENDOR=y" .config > /dev/null; then \
   118            $(MAKE) config_xconfig; \
   119         fi
   120        @config/setconfig final
   121    
   122    .PHONY: config
   123    config: config.in
   124        @HELP_FILE=config/Configure.help \
   125            $(CONFIG_SHELL) $(SCRIPTSDIR)/Configure config.in
   126        @config/setconfig defaults
   127        @if egrep "^CONFIG_DEFAULTS_KERNEL=y" .config > /dev/null; then \
   128            $(MAKE) linux_config; \
   129         fi
   130        @if egrep "^CONFIG_DEFAULTS_MODULES=y" .config > /dev/null; then \
   131            $(MAKE) modules_config; \
   132         fi
   133        @if egrep "^CONFIG_DEFAULTS_VENDOR=y" .config > /dev/null; then \
   134            $(MAKE) config_config; \
   135         fi
   136        @config/setconfig final
   137    
   138    .PHONY: menuconfig
   139    menuconfig: config.in
   140        $(MAKE) -C $(SCRIPTSDIR)/lxdialog all
   141        @HELP_FILE=config/Configure.help \
   142            $(CONFIG_SHELL) $(SCRIPTSDIR)/Menuconfig config.in
   143        @if [ ! -f .config ]; then \
   144            echo; \
   145            echo "You have not saved your config, please re-run make config"; \
   146            echo; \
   147            exit 1; \
   148         fi
   149        @config/setconfig defaults
   150        @if egrep "^CONFIG_DEFAULTS_KERNEL=y" .config > /dev/null; then \
   151            $(MAKE) linux_menuconfig; \
   152         fi
   153        @if egrep "^CONFIG_DEFAULTS_MODULES=y" .config > /dev/null; then \
   154            $(MAKE) modules_menuconfig; \
   155         fi
   156        @if egrep "^CONFIG_DEFAULTS_VENDOR=y" .config > /dev/null; then \
   157            $(MAKE) config_menuconfig; \
   158         fi
   159        @config/setconfig final
   160    
   161    .PHONY: oldconfig
   162    oldconfig:
   163        @$(MAKE) oldconfig_linux
   164        @$(MAKE) oldconfig_modules
   165        @$(MAKE) oldconfig_config
   166        @config/setconfig final
   167    
   168    .PHONY: modules
   169    modules:
   170        . $(LINUXDIR)/.config; if [ "$$CONFIG_MODULES" = "y" ]; then \
   171            [ -d $(LINUXDIR)/modules ] || mkdir $(LINUXDIR)/modules; \
   172            $(MAKEARCH_KERNEL) -C $(LINUXDIR) modules; \
   173        fi
   174    
   175    .PHONY: modules_install
   176    modules_install:
   177        . $(LINUXDIR)/.config; if [ "$$CONFIG_MODULES" = "y" ]; then \
   178            [ -d $(ROMFSDIR)/lib/modules ] || mkdir -p $(ROMFSDIR)/lib/modules; \
   179            $(MAKEARCH_KERNEL) -C $(LINUXDIR) INSTALL_MOD_PATH=$(ROMFSDIR) DEPMOD=true modules_install; \
   180            rm -f $(ROMFSDIR)/lib/modules/*/build; \
   181            find $(ROMFSDIR)/lib/modules -type f | xargs -r $(STRIP) -g; \
   182        fi
   183    
   184    linux_xconfig:
   185        $(MAKEARCH_KERNEL) -C $(LINUXDIR) xconfig
   186    linux_menuconfig:
   187        $(MAKEARCH_KERNEL) -C $(LINUXDIR) menuconfig
   188    linux_config:
   189        $(MAKEARCH_KERNEL) -C $(LINUXDIR) config
   190    modules_xconfig:
   191        [ ! -d modules ] || $(MAKEARCH) -C modules xconfig
   192    modules_menuconfig:
   193        [ ! -d modules ] || $(MAKEARCH) -C modules menuconfig
   194    modules_config:
   195        [ ! -d modules ] || $(MAKEARCH) -C modules config
   196    modules_clean:
   197        -[ ! -d modules ] || $(MAKEARCH) -C modules clean
   198    config_xconfig:
   199        $(MAKEARCH) -C config xconfig
   200    config_menuconfig:
   201        $(MAKEARCH) -C config menuconfig
   202    config_config:
   203        $(MAKEARCH) -C config config
   204    oldconfig_config:
   205        $(MAKEARCH) -C config oldconfig
   206    oldconfig_modules:
   207        [ ! -d modules ] || $(MAKEARCH) -C modules oldconfig
   208    oldconfig_linux:
   209        $(MAKEARCH_KERNEL) -C $(LINUXDIR) oldconfig
   210    
   211    ############################################################################
   212    #
   213    # normal make targets
   214    #
   215    
   216    .PHONY: romfs
   217    romfs:
   218        for dir in $(DIRS) ; do $(MAKEARCH) -C $$dir romfs || exit 1 ; done
   219        -find $(ROMFSDIR)/. -name CVS | xargs -r rm -rf
   220    
   221    .PHONY: image
   222    image:
   223        [ -d $(IMAGEDIR) ] || mkdir $(IMAGEDIR)
   224        $(MAKEARCH) -C $(VENDDIR) image
   225    
   226    #
   227    # fancy target that allows a vendor to have other top level
   228    # make targets,  for example "make vendor_flash" will run the
   229    # vendor_flash target in the vendors directory
   230    #
   231    
   232    vendor_%:
   233        $(MAKEARCH) -C $(VENDDIR) $@
   234    
   235    .PHONY: linux
   236    linux linux%_only:
   237    #    cp dm9000x.o linux-2.4.x/drivers/net
   238        @if [ $(LINUXDIR) != linux-2.5.x -a ! -f $(LINUXDIR)/.depend ] ; then \
   239            echo "ERROR: you need to do a 'make dep' first" ; \
   240            exit 1 ; \
   241        fi
   242        $(MAKEARCH_KERNEL) -C $(LINUXDIR) $(LINUXTARGET) || exit 1
   243        if [ -f $(LINUXDIR)/vmlinux ]; then \
   244            ln -f $(LINUXDIR)/vmlinux $(LINUXDIR)/linux ; \
   245        fi
   246    
   247    .PHONY: subdirs
   248    subdirs: linux
   249        for dir in $(DIRS) ; do $(MAKEARCH_KERNEL) -C $$dir || exit 1 ; done
   250    
   251    dep:
   252        @if [ ! -f $(LINUXDIR)/.config ] ; then \
   253            echo "ERROR: you need to do a 'make config' first" ; \
   254            exit 1 ; \
   255        fi
   256        $(MAKEARCH_KERNEL) -C $(LINUXDIR) dep
   257    
   258    # This one removes all executables from the tree and forces their relinking
   259    .PHONY: relink
   260    relink:
   261        find user -name '*.gdb' | sed 's/^\(.*\)\.gdb/\1 \1.gdb/' | xargs rm -f
   262        find $(VENDDIR) -name '*.gdb' | sed 's/^\(.*\)\.gdb/\1 \1.gdb/' | xargs rm -f
   263    
   264    clean: modules_clean
   265        for dir in $(LINUXDIR) $(DIRS); do $(MAKEARCH) -C $$dir clean ; done
   266        rm -rf $(ROMFSDIR)/bin/*
   267        rm -f $(IMAGEDIR)/*
   268        rm -f config.tk
   269        rm -f $(LINUXDIR)/linux
   270        rm -rf $(LINUXDIR)/net/ipsec/alg/libaes $(LINUXDIR)/net/ipsec/alg/perlasm
   271    
   272    real_clean mrproper: clean
   273        -$(MAKEARCH_KERNEL) -C $(LINUXDIR) mrproper
   274        -$(MAKEARCH) -C config clean
   275        rm -rf config.in config.arch config.tk images
   276        rm -f modules/config.tk
   277        rm -rf .config .config.old .oldconfig autoconf.h
   278    
   279    distclean: mrproper
   280        -$(MAKEARCH_KERNEL) -C $(LINUXDIR) distclean
   281    
   282    %_only:
   283        [ ! -d "$(@:_only=)" ] || $(MAKEARCH) -C $(@:_only=)
   284    
   285    %_clean:
   286        [ ! -d "$(@:_clean=)" ] || $(MAKEARCH) -C $(@:_clean=) clean
   287    
   288    config_error:
   289        @echo "*************************************************"
   290        @echo "You have not run make config."
   291        @echo "The build sequence for this source tree is:"
   292        @echo "1. 'make config' or 'make xconfig'"
   293        @echo "2. 'make dep'"
   294        @echo "3. 'make'"
   295        @echo "*************************************************"
   296        @exit 1
   297    
   298    prune:
   299        $(MAKE) -C user prune
   300    
   301    dist-prep:
   302        -find $(ROOTDIR) -name 'Makefile*.bin' | while read t; do \
   303            $(MAKEARCH) -C `dirname $$t` -f `basename $$t` $@; \
   304         done
   305    
   306    ############################################################################
相关阅读 更多 +
排行榜 更多 +
空中跑酷汉化版

空中跑酷汉化版

赛车竞速 下载
修仙传说

修仙传说

角色扮演 下载
魔界零之迷宫

魔界零之迷宫

冒险解谜 下载