#!@@CT_make@@ -rf # Makefile for crosstool-NG. # Copyright 2006 Yann E. MORIN # Don't print directory as we descend into them # Don't use built-in rules, we know what we're doing MAKEFLAGS += --no-print-directory --no-builtin-rules # Don't go parallel .NOTPARALLEL: # This is where ct-ng is: export CT_NG:=$(lastword $(MAKEFILE_LIST)) # and this is where we're working in: export CT_TOP_DIR:=$(shell pwd) # Paths and values set by ./configure # Don't bother to change it other than with a new ./configure! export CT_LIB_DIR:=@@CT_LIBDIR@@ export CT_DOC_DIR:=@@CT_DOCDIR@@ # This is crosstool-NG version string export CT_VERSION:=@@CT_VERSION@@ # Paths found by ./configure include $(CT_LIB_DIR)/paths.mk # Some distributions (eg. Ubuntu) thought it wise to point /bin/sh to # a truly POSIX-conforming shell, ash in this case. This is not so good # as we, smart (haha!) developers (as smart we ourselves think we are), # got used to bashisms, and are enclined to easiness... So force use of # bash. export SHELL=$(bash) # GREP_OPTIONS=--color=always will break the generated .in files # We do not need any GREP_OPTIONS anyway, so set it to empty. export GREP_OPTIONS= # Make the restart/stop steps availabe to scripts/crostool-NG.sh export CT_STOP:=$(STOP) export CT_RESTART:=$(RESTART) SILENT=@ ECHO=echo ifeq ($(strip $(origin V)),command line) ifeq ($(strip $(V)),0) SILENT=@ ECHO=: else ifeq ($(strip $(V)),1) SILENT= ECHO=: else ifeq ($(strip $(V)),2) SILENT= ECHO=echo endif # V == 2 endif # V== 1 endif # V == 0 endif # origin V export V SILENT ECHO all: help .PHONY: $(PHONY) PHONY += all FORCE: # Help system help:: help-head help-config help-samples help-build help-clean help-distrib help-env help-tail help-head:: version @echo 'See below for a list of available actions, listed by category:' help-config:: @echo @echo 'Configuration actions:' help-samples:: @echo @echo 'Preconfigured toolchains (#: force number of // jobs):' help-build:: @echo @echo 'Build actions (#: force number of // jobs):' help-clean:: @echo @echo 'Clean actions:' help-distrib:: @echo @echo 'Distribution actions:' help-env:: @echo @echo 'Environment variables (see @@CT_DOCDIR@@/0 - Table of content.txt):' help-tail:: @echo @echo 'Use action "menuconfig" to configure your toolchain' @echo 'Use action "build" to build your toolchain' @echo 'Use action "version" to see the version' @echo 'See "man 1 $(notdir $(CT_NG))" for some help as well' help-build:: @echo ' build[.#] - Build the currently configured toolchain' help-clean:: @echo ' clean - Remove generated files' @echo ' distclean - Remove generated files, configuration and build directories' include $(CT_LIB_DIR)/config/config.mk include $(CT_LIB_DIR)/kconfig/kconfig.mk include $(CT_LIB_DIR)/steps.mk include $(CT_LIB_DIR)/samples/samples.mk include $(CT_LIB_DIR)/scripts/scripts.mk help-config:: @echo ' show-tuple - Print the tuple of the currently configured toolchain' help-distrib:: @echo ' tarball - Build a tarball of the configured toolchain' help-env:: @echo ' V=0|1|2 - 0 => show only human-readable messages (default)' @echo ' 1 => show only the commands being executed' @echo ' 2 => show both' # End help system .config: @echo "There is no existing .config file!" @echo "You need to either run 'menuconfig'," @echo "or configure an existing sample." @false .config.2: .config $(SILENT)$(sed) -r -e 's/^([^=]+_ARRAY)="(.*)"$$/\1=( \2 )/;' \ -e '/^[^=]+_ARRAY=/s/\\(.)/\1/g;' \ $< >$@ show-tuple: .config.2 $(SILENT)$(bash) $(CT_LIB_DIR)/scripts/showTuple.sh # Actual build build: .config.2 $(SILENT)$(CT_LIB_DIR)/scripts/crosstool-NG.sh build.%: $(SILENT)$(MAKE) -rf $(CT_NG) $(shell echo "$(@)" |$(sed) -r -e 's|^([^.]+)\.([[:digit:]]+)$$|\1 CT_JOBS=\2|;') PHONY += tarball #tarball: # @$(CT_LIB_DIR)/scripts/tarball.sh tarball: @echo 'Tarball creation disabled for now... Sorry.' @true PHONY += version version: @echo 'This is crosstool-NG version $(CT_VERSION)' @echo @echo 'Copyright (C) 2008 Yann E. MORIN ' @echo 'This is free software; see the source for copying conditions.' @echo 'There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A' @echo 'PARTICULAR PURPOSE.' @echo PHONY += clean clean:: @$(ECHO) " CLEAN log" $(SILENT)rm -f build.log .config.* ..config* PHONY += distclean distclean:: clean @$(ECHO) " CLEAN .config" $(SILENT)rm -f .config .config.* ..config* @$(ECHO) " CLEAN build dir" $(SILENT)[ ! -d targets ] || chmod -R u+w targets $(SILENT)[ ! -d .build ] || chmod -R u+w .build $(SILENT)rm -rf targets .build