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