yann@1141: #!@@CT_make@@ -rf yann@182: # Makefile for crosstool-NG. yann@182: # 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 yann@182: @echo 'Environement variables (see @@CT_DOCDIR@@/overview.txt):' yann@182: yann@182: help-tail:: yann@182: @echo yann@932: @echo 'Use action "config" or "menuconfig" to configure crosstool-NG' yann@932: @echo 'Use action "build" to build your toolchain' yann@932: @echo 'Use action "version" to see the version' yann@185: @echo 'See "man 1 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@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@1336: show-tuple: .config yann@1336: $(SILENT)$(bash) $(CT_LIB_DIR)/scripts/showTuple.sh yann@1336: yann@182: # Actual build yann@372: build: .config 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@675: @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@953: $(SILENT)rm -f 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@940: @$(ECHO) " CLEAN targets" yann@940: $(SILENT)chmod -R u+w targets >/dev/null 2>&1 || true yann@940: $(SILENT)rm -rf targets