#!@@CT_make@@ -rf
# Makefile for crosstool-NG.
# Copyright 2006 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>

# 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  'Environement 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 <yann.morin.1998@anciens.enib.fr>'
	@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
