ct-ng.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
parent 1155 21e86e18f344
child 1618 7f52e1cca71e
permissions -rw-r--r--
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
     1 #!@@CT_make@@ -rf
     2 # Makefile for crosstool-NG.
     3 # Copyright 2006 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
     4 
     5 # Don't print directory as we descend into them
     6 # Don't use built-in rules, we know what we're doing
     7 MAKEFLAGS += --no-print-directory --no-builtin-rules
     8 
     9 # Don't go parallel
    10 .NOTPARALLEL:
    11 
    12 # This is where ct-ng is:
    13 export CT_NG:=$(lastword $(MAKEFILE_LIST))
    14 # and this is where we're working in:
    15 export CT_TOP_DIR:=$(shell pwd)
    16 
    17 # Paths and values set by ./configure
    18 # Don't bother to change it other than with a new ./configure!
    19 export CT_LIB_DIR:=@@CT_LIBDIR@@
    20 export CT_DOC_DIR:=@@CT_DOCDIR@@
    21 
    22 # This is crosstool-NG version string
    23 export CT_VERSION:=@@CT_VERSION@@
    24 
    25 # Paths found by ./configure
    26 include $(CT_LIB_DIR)/paths.mk
    27 
    28 # Some distributions (eg. Ubuntu) thought it wise to point /bin/sh to
    29 # a truly POSIX-conforming shell, ash in this case. This is not so good
    30 # as we, smart (haha!) developers (as smart we ourselves think we are),
    31 # got used to bashisms, and are enclined to easiness... So force use of
    32 # bash.
    33 export SHELL=$(bash)
    34 
    35 # Make the restart/stop steps availabe to scripts/crostool-NG.sh
    36 export CT_STOP:=$(STOP)
    37 export CT_RESTART:=$(RESTART)
    38 
    39 SILENT=@
    40 ECHO=echo
    41 ifeq ($(strip $(origin V)),command line)
    42   ifeq ($(strip $(V)),0)
    43     SILENT=@
    44     ECHO=:
    45   else
    46     ifeq ($(strip $(V)),1)
    47       SILENT=
    48       ECHO=:
    49     else
    50       ifeq ($(strip $(V)),2)
    51         SILENT=
    52         ECHO=echo
    53       endif # V == 2
    54     endif # V== 1
    55   endif # V == 0
    56 endif # origin V
    57 export V SILENT ECHO
    58 
    59 .FORCE: $(FORCE)
    60 .PHONY: $(PHONY)
    61 PHONY += all
    62 all: help
    63 
    64 # Help system
    65 help:: help-head help-config help-samples help-build help-clean help-distrib help-env help-tail
    66 
    67 help-head:: version
    68 	@echo  'See below for a list of available actions, listed by category:'
    69 
    70 help-config::
    71 	@echo
    72 	@echo  'Configuration actions:'
    73 
    74 help-samples::
    75 	@echo
    76 	@echo  'Preconfigured toolchains (#: force number of // jobs):'
    77 
    78 help-build::
    79 	@echo
    80 	@echo  'Build actions (#: force number of // jobs):'
    81 
    82 help-clean::
    83 	@echo
    84 	@echo  'Clean actions:'
    85 
    86 help-distrib::
    87 	@echo
    88 	@echo  'Distribution actions:'
    89 
    90 help-env::
    91 	@echo
    92 	@echo  'Environement variables (see @@CT_DOCDIR@@/overview.txt):'
    93 
    94 help-tail::
    95 	@echo
    96 	@echo  'Use action "config" or "menuconfig" to configure crosstool-NG'
    97 	@echo  'Use action "build" to build your toolchain'
    98 	@echo  'Use action "version" to see the version'
    99 	@echo  'See "man 1 ct-ng" for some help as well'
   100 
   101 help-build::
   102 	@echo  '  build[.#]          - Build the currently configured toolchain'
   103 
   104 help-clean::
   105 	@echo  '  clean              - Remove generated files'
   106 	@echo  '  distclean          - Remove generated files, configuration and build directories'
   107 
   108 include $(CT_LIB_DIR)/config/config.mk
   109 include $(CT_LIB_DIR)/kconfig/kconfig.mk
   110 include $(CT_LIB_DIR)/steps.mk
   111 include $(CT_LIB_DIR)/samples/samples.mk
   112 include $(CT_LIB_DIR)/scripts/scripts.mk
   113 
   114 help-config::
   115 	@echo  '  show-tuple         - Print the tuple of the currently configured toolchain'
   116 
   117 help-distrib::
   118 	@echo  '  tarball            - Build a tarball of the configured toolchain'
   119 
   120 help-env::
   121 
   122 # End help system
   123 
   124 .config:
   125 	@echo "There is no existing .config file!"
   126 	@echo "You need to either run 'menuconfig',"
   127 	@echo "or configure an existing sample."
   128 	@false
   129 
   130 show-tuple: .config
   131 	$(SILENT)$(bash) $(CT_LIB_DIR)/scripts/showTuple.sh
   132 
   133 # Actual build
   134 build: .config
   135 	$(SILENT)$(CT_LIB_DIR)/scripts/crosstool-NG.sh
   136 
   137 build.%:
   138 	$(SILENT)$(MAKE) -rf $(CT_NG) $(shell echo "$(@)" |$(sed) -r -e 's|^([^.]+)\.([[:digit:]]+)$$|\1 CT_JOBS=\2|;')
   139 
   140 PHONY += tarball
   141 #tarball:
   142 #	@$(CT_LIB_DIR)/scripts/tarball.sh
   143 tarball:
   144 	@echo 'Tarball creation disabled for now... Sorry.'
   145 	@true
   146 
   147 PHONY += version
   148 version:
   149 	@echo 'This is crosstool-NG version $(CT_VERSION)'
   150 	@echo
   151 	@echo 'Copyright (C) 2008  Yann E. MORIN <yann.morin.1998@anciens.enib.fr>'
   152 	@echo 'This is free software; see the source for copying conditions.'
   153 	@echo 'There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A'
   154 	@echo 'PARTICULAR PURPOSE.'
   155 	@echo
   156 
   157 PHONY += clean
   158 clean::
   159 	@$(ECHO) "  CLEAN log"
   160 	$(SILENT)rm -f log.* .config.* ..config*
   161 
   162 PHONY += distclean
   163 distclean:: clean
   164 	@$(ECHO) "  CLEAN .config"
   165 	$(SILENT)rm -f .config .config.* ..config*
   166 	@$(ECHO) "  CLEAN targets"
   167 	$(SILENT)chmod -R u+w targets >/dev/null 2>&1 || true
   168 	$(SILENT)rm -rf targets