summaryrefslogtreecommitdiff
path: root/ct-ng.in
blob: e00616006117ab4b69ebd6e6400e6d846159716c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!@@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

# 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. (Note: this is ugly, but ./configure checks for it).
export SHELL=/bin/bash

# This is where ct-ng is.
# Don't bother to change it other than with a new ./configure!
CT_NG:=@@CT_BINDIR@@/ct-ng

export CT_TOP_DIR:=$(shell pwd)
export CT_LIB_DIR:=@@CT_LIBDIR@@
export CT_DOC_DIR:=@@CT_DOCDIR@@

# This is crosstool-NG version string
export CT_VERSION:=@@CT_VERSION@@

export CT_STOP:=$(STOP)
export CT_RESTART:=$(RESTART)

.FORCE:
.PHONY: $(PHONY)
PHONY += all
all: help

HOST_CC := gcc -funsigned-char

# 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:'

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@@/overview.txt):'

help-tail::
	@echo
	@echo  'Execute "$(CT_NG) config" or "$(CT_NG) menuconfig" to configure crosstool-NG'
	@echo  'Execute "$(CT_NG) build" to build your toolchain'
	@echo  'Execute "$(CT_NG) version" to see the version'
	@echo  'See "man 1 ct-ng" for some help as well'

# End help system

help-build::
	@echo  '  build[.#]          - Build the toolchain'

help-clean::
	@echo  '  clean              - Remove generated files'
	@echo  '  distclean          - Remove generated files, configuration and build directories'

include $(CT_LIB_DIR)/kconfig/kconfig.mk
include $(CT_LIB_DIR)/steps.mk
include $(CT_LIB_DIR)/samples/samples.mk
include $(CT_LIB_DIR)/tools/tools.mk

help-distrib::
	@echo  '  tarball            - Build a tarball of the configured toolchain'

help-env::
	@echo  '  STOP               - Stop the build just after this step'
	@echo  '  RESTART            - Restart the build just before this step'

.config:
	@echo  'You must run either one of "$(CT_NG) config" or "$(CT_NG) menuconfig" first'
	@false

# Actual build
build: .config
	@$(CT_LIB_DIR)/scripts/crosstool.sh

build.%:
	@$(CT_NG) $(shell echo "$(@)" |sed -r -e 's|^([^.]+)\.([[:digit:]]+)$$|\1 CT_JOBS=\2|;')

PHONY += tarball
#tarball:
#	@$(CT_LIB_DIR)/scripts/tarball.sh
tarball:
	@echo 'Tarbal 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::
	@rm -f $(CT_TOP_DIR)/.config.*

PHONY += distclean
distclean:: clean
	@rm -f $(CT_TOP_DIR)/.config* $(CT_TOP_DIR)/..config.tmp
	@rm -f $(CT_TOP_DIR)/log.*
	@[ ! -d "$(CT_TOP_DIR)/targets" ] || chmod -R u+w "$(CT_TOP_DIR)/targets"
	@rm -rf "$(CT_TOP_DIR)/targets"