-
Notifications
You must be signed in to change notification settings - Fork 19
/
lnp-forge.in
180 lines (143 loc) · 4.94 KB
/
lnp-forge.in
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#!@@CT_make@@ -rf
#################################################################
# lnp-forge and this file are based on the crosstool-NG software.
# (copyright 2007 Yann E. MORIN - licensed under the GPL v2)
# Adapted by McArcady (https://github.com/McArcady/lnp-forge).
#################################################################
# Makefile for lnp-forge.
# 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 lnp-forge 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@@
# 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=@
CT_ECHO=echo
ifeq ($(strip $(origin V)),command line)
ifeq ($(strip $(V)),0)
SILENT=@
CT_ECHO=:
else
ifeq ($(strip $(V)),1)
SILENT=
CT_ECHO=:
else
ifeq ($(strip $(V)),2)
SILENT=
CT_ECHO=echo
endif # V == 2
endif # V== 1
endif # V == 0
endif # origin V
export V SILENT CT_ECHO
all: help
.PHONY: $(PHONY)
PHONY += all
FORCE:
# Help system
help:: help-head help-config 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-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'
help-build::
@echo ' source - Download sources for currently configured toolchain'
@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)/scripts/scripts.mk
help-config::
@echo ' show-tuple - Print the tuple of the currently configured toolchain'
help-distrib::
help-env::
@echo ' V=0|1|2|<unset> - <unset> show only human-readable messages (default)'
@echo ' 0 => do not show commands or human-readable message'
@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
source: .config.2
$(SILENT)CT_SOURCE=y $(CT_LIB_DIR)/scripts/lnp-forge.sh
build: .config.2
$(SILENT)$(CT_LIB_DIR)/scripts/lnp-forge.sh
build.%:
$(SILENT)$(MAKE) -rf $(CT_NG) build CT_JOBS=$*
PHONY += version
version:
@echo 'This is lnp-forge version $(CT_VERSION)'
@echo
@echo 'lnp-forge is based on the crosstool-NG software.'
@echo '(copyright 2007 Yann E. MORIN - licensed under the GPL v2)'
@echo 'Adapted by McArcady (https://github.com/McArcady/lnp-forge).'
@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::
@$(CT_ECHO) " CLEAN log"
$(SILENT)rm -f build.log
@$(CT_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/src .build-all
PHONY += distclean
distclean:: clean
@$(CT_ECHO) " CLEAN .config"
$(SILENT)rm -f .config .config.* ..config*