]> rtime.felk.cvut.cz Git - coffee/buildroot.git/blob - Makefile
Makefile: generate SOURCE_DATE_EPOCH for reproducible builds
[coffee/buildroot.git] / Makefile
1 # Makefile for buildroot
2 #
3 # Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
4 # Copyright (C) 2006-2014 by the Buildroot developers <buildroot@uclibc.org>
5 # Copyright (C) 2014-2016 by the Buildroot developers <buildroot@buildroot.org>
6 #
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 #
21
22 #--------------------------------------------------------------
23 # Just run 'make menuconfig', configure stuff, then run 'make'.
24 # You shouldn't need to mess with anything beyond this point...
25 #--------------------------------------------------------------
26
27 # Delete default rules. We don't use them. This saves a bit of time.
28 .SUFFIXES:
29
30 # we want bash as shell
31 SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
32          else if [ -x /bin/bash ]; then echo /bin/bash; \
33          else echo sh; fi; fi)
34
35 # Set O variable if not already done on the command line;
36 # or avoid confusing packages that can use the O=<dir> syntax for out-of-tree
37 # build by preventing it from being forwarded to sub-make calls.
38 ifneq ("$(origin O)", "command line")
39 O := $(CURDIR)/output
40 endif
41
42 # Check if the current Buildroot execution meets all the pre-requisites.
43 # If they are not met, Buildroot will actually do its job in a sub-make meeting
44 # its pre-requisites, which are:
45 #  1- Permissive enough umask:
46 #       Wrong or too restrictive umask will prevent Buildroot and packages from
47 #       creating files and directories.
48 #  2- Absolute canonical CWD (i.e. $(CURDIR)):
49 #       Otherwise, some packages will use CWD as-is, others will compute its
50 #       absolute canonical path. This makes harder tracking and fixing host
51 #       machine path leaks.
52 #  3- Absolute canonical output location (i.e. $(O)):
53 #       For the same reason as the one for CWD.
54
55 # Remove the trailing '/.' from $(O) as it can be added by the makefile wrapper
56 # installed in the $(O) directory.
57 # Also remove the trailing '/' the user can set when on the command line.
58 override O := $(patsubst %/,%,$(patsubst %.,%,$(O)))
59 # Make sure $(O) actually exists before calling realpath on it; this is to
60 # avoid empty CANONICAL_O in case on non-existing entry.
61 CANONICAL_O := $(shell mkdir -p $(O) >/dev/null 2>&1)$(realpath $(O))
62
63 CANONICAL_CURDIR = $(realpath $(CURDIR))
64
65 REQ_UMASK = 0022
66
67 # Make sure O= is passed (with its absolute canonical path) everywhere the
68 # toplevel makefile is called back.
69 EXTRAMAKEARGS := O=$(CANONICAL_O)
70
71 # Check Buildroot execution pre-requisites here.
72 ifneq ($(shell umask):$(CURDIR):$(O),$(REQ_UMASK):$(CANONICAL_CURDIR):$(CANONICAL_O))
73 .PHONY: _all $(MAKECMDGOALS)
74
75 $(MAKECMDGOALS): _all
76         @:
77
78 _all:
79         @umask $(REQ_UMASK) && \
80                 $(MAKE) -C $(CANONICAL_CURDIR) --no-print-directory \
81                         $(MAKECMDGOALS) $(EXTRAMAKEARGS)
82
83 else # umask / $(CURDIR) / $(O)
84
85 # This is our default rule, so must come first
86 all:
87
88 # Set and export the version string
89 export BR2_VERSION := 2016.11-rc1
90 # Actual time the release is cut (for reproducible builds)
91 BR2_VERSION_EPOCH = 1478206447
92
93 # Save running make version since it's clobbered by the make package
94 RUNNING_MAKE_VERSION := $(MAKE_VERSION)
95
96 # Check for minimal make version (note: this check will break at make 10.x)
97 MIN_MAKE_VERSION = 3.81
98 ifneq ($(firstword $(sort $(RUNNING_MAKE_VERSION) $(MIN_MAKE_VERSION))),$(MIN_MAKE_VERSION))
99 $(error You have make '$(RUNNING_MAKE_VERSION)' installed. GNU make >= $(MIN_MAKE_VERSION) is required)
100 endif
101
102 # Parallel execution of this Makefile is disabled because it changes
103 # the packages building order, that can be a problem for two reasons:
104 # - If a package has an unspecified optional dependency and that
105 #   dependency is present when the package is built, it is used,
106 #   otherwise it isn't (but compilation happily proceeds) so the end
107 #   result will differ if the order is swapped due to parallel
108 #   building.
109 # - Also changing the building order can be a problem if two packages
110 #   manipulate the same file in the target directory.
111 #
112 # Taking into account the above considerations, if you still want to execute
113 # this top-level Makefile in parallel comment the ".NOTPARALLEL" line and
114 # use the -j<jobs> option when building, e.g:
115 #      make -j$((`getconf _NPROCESSORS_ONLN`+1))
116 .NOTPARALLEL:
117
118 # absolute path
119 TOPDIR := $(CURDIR)
120 CONFIG_CONFIG_IN = Config.in
121 CONFIG = support/kconfig
122 DATE := $(shell date +%Y%m%d)
123
124 # Compute the full local version string so packages can use it as-is
125 # Need to export it, so it can be got from environment in children (eg. mconf)
126 export BR2_VERSION_FULL := $(BR2_VERSION)$(shell $(TOPDIR)/support/scripts/setlocalversion)
127
128 noconfig_targets := menuconfig nconfig gconfig xconfig config oldconfig randconfig \
129         defconfig %_defconfig allyesconfig allnoconfig silentoldconfig release \
130         randpackageconfig allyespackageconfig allnopackageconfig \
131         print-version olddefconfig distclean manual manual-html manual-split-html \
132         manual-pdf manual-text manual-epub
133
134 # Some global targets do not trigger a build, but are used to collect
135 # metadata, or do various checks. When such targets are triggered,
136 # some packages should not do their configuration sanity
137 # checks. Provide them a BR_BUILDING variable set to 'y' when we're
138 # actually building and they should do their sanity checks.
139 #
140 # We're building in two situations: when MAKECMDGOALS is empty
141 # (default target is to build), or when MAKECMDGOALS contains
142 # something else than one of the nobuild_targets.
143 nobuild_targets := source %-source source-check \
144         legal-info %-legal-info external-deps _external-deps \
145         clean distclean help show-targets graph-depends \
146         %-graph-depends %-show-depends %-show-version \
147         graph-build graph-size list-defconfigs \
148         savedefconfig printvars
149 ifeq ($(MAKECMDGOALS),)
150 BR_BUILDING = y
151 else ifneq ($(filter-out $(nobuild_targets),$(MAKECMDGOALS)),)
152 BR_BUILDING = y
153 endif
154
155 # We call make recursively to build packages. The command-line overrides that
156 # are passed to Buildroot don't apply to those package build systems. In
157 # particular, we don't want to pass down the O=<dir> option for out-of-tree
158 # builds, because the value specified on the command line will not be correct
159 # for packages.
160 MAKEOVERRIDES :=
161
162 # Include some helper macros and variables
163 include support/misc/utils.mk
164
165 # Set variables related to in-tree or out-of-tree build.
166 # Here, both $(O) and $(CURDIR) are absolute canonical paths.
167 ifeq ($(O),$(CURDIR)/output)
168 CONFIG_DIR := $(CURDIR)
169 NEED_WRAPPER =
170 else
171 CONFIG_DIR := $(O)
172 NEED_WRAPPER = y
173 endif
174
175 # bash prints the name of the directory on 'cd <dir>' if CDPATH is
176 # set, so unset it here to not cause problems. Notice that the export
177 # line doesn't affect the environment of $(shell ..) calls, so
178 # explictly throw away any output from 'cd' here.
179 export CDPATH :=
180 BASE_DIR := $(shell mkdir -p $(O) && cd $(O) >/dev/null && pwd)
181 $(if $(BASE_DIR),, $(error output directory "$(O)" does not exist))
182
183
184 # Handling of BR2_EXTERNAL.
185 #
186 # The value of BR2_EXTERNAL is stored in .br-external in the output directory.
187 # The location of the external.mk makefile fragments is computed in that file.
188 # On subsequent invocations of make, this file is read in. BR2_EXTERNAL can
189 # still be overridden on the command line, therefore the file is re-created
190 # every time make is run.
191
192 BR2_EXTERNAL_FILE = $(BASE_DIR)/.br-external.mk
193 -include $(BR2_EXTERNAL_FILE)
194 $(shell support/scripts/br2-external \
195         -m -o '$(BR2_EXTERNAL_FILE)' $(BR2_EXTERNAL))
196 BR2_EXTERNAL_ERROR =
197 include $(BR2_EXTERNAL_FILE)
198 ifneq ($(BR2_EXTERNAL_ERROR),)
199 $(error $(BR2_EXTERNAL_ERROR))
200 endif
201
202 # To make sure that the environment variable overrides the .config option,
203 # set this before including .config.
204 ifneq ($(BR2_DL_DIR),)
205 DL_DIR := $(BR2_DL_DIR)
206 endif
207 ifneq ($(BR2_CCACHE_DIR),)
208 BR_CACHE_DIR := $(BR2_CCACHE_DIR)
209 endif
210
211 # Need that early, before we scan packages
212 # Avoids doing the $(or...) everytime
213 BR_GRAPH_OUT := $(or $(BR2_GRAPH_OUT),pdf)
214
215 BUILD_DIR := $(BASE_DIR)/build
216 BINARIES_DIR := $(BASE_DIR)/images
217 TARGET_DIR := $(BASE_DIR)/target
218 # initial definition so that 'make clean' works for most users, even without
219 # .config. HOST_DIR will be overwritten later when .config is included.
220 HOST_DIR := $(BASE_DIR)/host
221 GRAPHS_DIR := $(BASE_DIR)/graphs
222
223 LEGAL_INFO_DIR = $(BASE_DIR)/legal-info
224 REDIST_SOURCES_DIR_TARGET = $(LEGAL_INFO_DIR)/sources
225 REDIST_SOURCES_DIR_HOST = $(LEGAL_INFO_DIR)/host-sources
226 LICENSE_FILES_DIR_TARGET = $(LEGAL_INFO_DIR)/licenses
227 LICENSE_FILES_DIR_HOST = $(LEGAL_INFO_DIR)/host-licenses
228 LEGAL_MANIFEST_CSV_TARGET = $(LEGAL_INFO_DIR)/manifest.csv
229 LEGAL_MANIFEST_CSV_HOST = $(LEGAL_INFO_DIR)/host-manifest.csv
230 LEGAL_WARNINGS = $(LEGAL_INFO_DIR)/.warnings
231 LEGAL_REPORT = $(LEGAL_INFO_DIR)/README
232
233 ################################################################################
234 #
235 # staging and target directories do NOT list these as
236 # dependencies anywhere else
237 #
238 ################################################################################
239 $(BUILD_DIR) $(TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST):
240         @mkdir -p $@
241
242 BR2_CONFIG = $(CONFIG_DIR)/.config
243
244 # Pull in the user's configuration file
245 ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
246 -include $(BR2_CONFIG)
247 endif
248
249 # timezone and locale may affect build output
250 ifeq ($(BR2_REPRODUCIBLE),y)
251 export TZ=UTC
252 export LANG=C
253 export LC_ALL=C
254 BR2_VERSION_GIT_EPOCH = $(shell GIT_DIR=$(TOPDIR)/.git $(GIT) log -1 --format=%at)
255 export SOURCE_DATE_EPOCH = $(if $(wildcard $(TOPDIR)/.git),$(BR2_VERSION_GIT_EPOCH),$(BR2_VERSION_EPOCH))
256 endif
257
258 # To put more focus on warnings, be less verbose as default
259 # Use 'make V=1' to see the full commands
260 ifeq ("$(origin V)", "command line")
261   KBUILD_VERBOSE = $(V)
262 endif
263 ifndef KBUILD_VERBOSE
264   KBUILD_VERBOSE = 0
265 endif
266
267 ifeq ($(KBUILD_VERBOSE),1)
268   Q =
269 ifndef VERBOSE
270   VERBOSE = 1
271 endif
272 export VERBOSE
273 else
274   Q = @
275 endif
276
277 # kconfig uses CONFIG_SHELL
278 CONFIG_SHELL := $(SHELL)
279
280 export SHELL CONFIG_SHELL Q KBUILD_VERBOSE
281
282 ifndef HOSTAR
283 HOSTAR := ar
284 endif
285 ifndef HOSTAS
286 HOSTAS := as
287 endif
288 ifndef HOSTCC
289 HOSTCC := gcc
290 HOSTCC := $(shell which $(HOSTCC) || type -p $(HOSTCC) || echo gcc)
291 endif
292 HOSTCC_NOCCACHE := $(HOSTCC)
293 ifndef HOSTCXX
294 HOSTCXX := g++
295 HOSTCXX := $(shell which $(HOSTCXX) || type -p $(HOSTCXX) || echo g++)
296 endif
297 HOSTCXX_NOCCACHE := $(HOSTCXX)
298 ifndef HOSTCPP
299 HOSTCPP := cpp
300 endif
301 ifndef HOSTLD
302 HOSTLD := ld
303 endif
304 ifndef HOSTLN
305 HOSTLN := ln
306 endif
307 ifndef HOSTNM
308 HOSTNM := nm
309 endif
310 ifndef HOSTOBJCOPY
311 HOSTOBJCOPY := objcopy
312 endif
313 ifndef HOSTRANLIB
314 HOSTRANLIB := ranlib
315 endif
316 HOSTAR := $(shell which $(HOSTAR) || type -p $(HOSTAR) || echo ar)
317 HOSTAS := $(shell which $(HOSTAS) || type -p $(HOSTAS) || echo as)
318 HOSTCPP := $(shell which $(HOSTCPP) || type -p $(HOSTCPP) || echo cpp)
319 HOSTLD := $(shell which $(HOSTLD) || type -p $(HOSTLD) || echo ld)
320 HOSTLN := $(shell which $(HOSTLN) || type -p $(HOSTLN) || echo ln)
321 HOSTNM := $(shell which $(HOSTNM) || type -p $(HOSTNM) || echo nm)
322 HOSTOBJCOPY := $(shell which $(HOSTOBJCOPY) || type -p $(HOSTOBJCOPY) || echo objcopy)
323 HOSTRANLIB := $(shell which $(HOSTRANLIB) || type -p $(HOSTRANLIB) || echo ranlib)
324
325 export HOSTAR HOSTAS HOSTCC HOSTCXX HOSTLD
326 export HOSTCC_NOCCACHE HOSTCXX_NOCCACHE
327
328 # Determine the userland we are running on.
329 #
330 # Note that, despite its name, we are not interested in the actual
331 # architecture name. This is mostly used to determine whether some
332 # of the binary tools (e.g. pre-built external toolchains) can run
333 # on the current host. So we need to know if the userland we're
334 # running on can actually run those toolchains.
335 #
336 # For example, a 64-bit prebuilt toolchain will not run on a 64-bit
337 # kernel if the userland is 32-bit (e.g. in a chroot for example).
338 #
339 # So, we extract the first part of the tuple the host gcc was
340 # configured to generate code for; we assume this is our userland.
341 #
342 export HOSTARCH := $(shell LC_ALL=C $(HOSTCC_NOCCACHE) -v 2>&1 | \
343         sed -e '/^Target: \([^-]*\).*/!d' \
344             -e 's//\1/' \
345             -e 's/i.86/x86/' \
346             -e 's/sun4u/sparc64/' \
347             -e 's/arm.*/arm/' \
348             -e 's/sa110/arm/' \
349             -e 's/ppc64/powerpc64/' \
350             -e 's/ppc/powerpc/' \
351             -e 's/macppc/powerpc/' \
352             -e 's/sh.*/sh/' )
353
354 HOSTCC_VERSION := $(shell $(HOSTCC_NOCCACHE) --version | \
355         sed -n -r 's/^.* ([0-9]*)\.([0-9]*)\.([0-9]*)[ ]*.*/\1 \2/p')
356
357 # For gcc >= 5.x, we only need the major version.
358 ifneq ($(firstword $(HOSTCC_VERSION)),4)
359 HOSTCC_VERSION := $(firstword $(HOSTCC_VERSION))
360 endif
361
362 # Make sure pkg-config doesn't look outside the buildroot tree
363 HOST_PKG_CONFIG_PATH := $(PKG_CONFIG_PATH)
364 unexport PKG_CONFIG_PATH
365 unexport PKG_CONFIG_SYSROOT_DIR
366 unexport PKG_CONFIG_LIBDIR
367
368 # Having DESTDIR set in the environment confuses the installation
369 # steps of some packages.
370 unexport DESTDIR
371
372 # Causes breakage with packages that needs host-ruby
373 unexport RUBYOPT
374
375 include package/pkg-utils.mk
376 include package/doc-asciidoc.mk
377
378 ifeq ($(BR2_HAVE_DOT_CONFIG),y)
379
380 ################################################################################
381 #
382 # Hide troublesome environment variables from sub processes
383 #
384 ################################################################################
385 unexport CROSS_COMPILE
386 unexport ARCH
387 unexport CC
388 unexport LD
389 unexport AR
390 unexport CXX
391 unexport CPP
392 unexport RANLIB
393 unexport CFLAGS
394 unexport CXXFLAGS
395 unexport GREP_OPTIONS
396 unexport TAR_OPTIONS
397 unexport CONFIG_SITE
398 unexport QMAKESPEC
399 unexport TERMINFO
400 unexport MACHINE
401 unexport O
402
403 GNU_HOST_NAME := $(shell support/gnuconfig/config.guess)
404
405 PACKAGES :=
406 PACKAGES_ALL :=
407
408 # silent mode requested?
409 QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q)
410
411 # Strip off the annoying quoting
412 ARCH := $(call qstrip,$(BR2_ARCH))
413
414 KERNEL_ARCH := $(shell echo "$(ARCH)" | sed -e "s/-.*//" \
415         -e s/i.86/i386/ -e s/sun4u/sparc64/ \
416         -e s/arcle/arc/ \
417         -e s/arceb/arc/ \
418         -e s/arm.*/arm/ -e s/sa110/arm/ \
419         -e s/aarch64.*/arm64/ \
420         -e s/bfin/blackfin/ \
421         -e s/parisc64/parisc/ \
422         -e s/powerpc64.*/powerpc/ \
423         -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
424         -e s/sh.*/sh/ \
425         -e s/microblazeel/microblaze/)
426
427 ZCAT := $(call qstrip,$(BR2_ZCAT))
428 BZCAT := $(call qstrip,$(BR2_BZCAT))
429 XZCAT := $(call qstrip,$(BR2_XZCAT))
430 TAR_OPTIONS = $(call qstrip,$(BR2_TAR_OPTIONS)) -xf
431
432 # packages compiled for the host go here
433 HOST_DIR := $(call qstrip,$(BR2_HOST_DIR))
434
435 # Quotes are needed for spaces and all in the original PATH content.
436 BR_PATH = "$(HOST_DIR)/bin:$(HOST_DIR)/sbin:$(HOST_DIR)/usr/bin:$(HOST_DIR)/usr/sbin:$(PATH)"
437
438 # Location of a file giving a big fat warning that output/target
439 # should not be used as the root filesystem.
440 TARGET_DIR_WARNING_FILE = $(TARGET_DIR)/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM
441
442 ifeq ($(BR2_CCACHE),y)
443 CCACHE := $(HOST_DIR)/usr/bin/ccache
444 BR_CACHE_DIR ?= $(call qstrip,$(BR2_CCACHE_DIR))
445 export BR_CACHE_DIR
446 HOSTCC := $(CCACHE) $(HOSTCC)
447 HOSTCXX := $(CCACHE) $(HOSTCXX)
448 else
449 export BR_NO_CCACHE
450 endif
451
452 # Scripts in support/ or post-build scripts may need to reference
453 # these locations, so export them so it is easier to use
454 export BR2_CONFIG
455 export BR2_REPRODUCIBLE
456 export TARGET_DIR
457 export STAGING_DIR
458 export HOST_DIR
459 export BINARIES_DIR
460 export BASE_DIR
461
462 ################################################################################
463 #
464 # You should probably leave this stuff alone unless you know
465 # what you are doing.
466 #
467 ################################################################################
468
469 all: world
470
471 # Include legacy before the other things, because package .mk files
472 # may rely on it.
473 include Makefile.legacy
474
475 include package/Makefile.in
476 include support/dependencies/dependencies.mk
477
478 include toolchain/*.mk
479 include toolchain/*/*.mk
480
481 # Include the package override file if one has been provided in the
482 # configuration.
483 PACKAGE_OVERRIDE_FILE = $(call qstrip,$(BR2_PACKAGE_OVERRIDE_FILE))
484 ifneq ($(PACKAGE_OVERRIDE_FILE),)
485 -include $(PACKAGE_OVERRIDE_FILE)
486 endif
487
488 include $(sort $(wildcard package/*/*.mk))
489
490 include boot/common.mk
491 include linux/linux.mk
492 include fs/common.mk
493
494 # If using a br2-external tree, the BR2_EXTERNAL_$(NAME)_PATH variables
495 # are also present in the .config file. Since .config is included after
496 # we defined them in the Makefile, the values for those variables are
497 # quoted. We just include the generated Makefile fragment .br2-external.mk
498 # a third time, which will set those variables to the un-quoted values.
499 include $(BR2_EXTERNAL_FILE)
500
501 # Nothing to include if no BR2_EXTERNAL tree in use
502 include $(BR2_EXTERNAL_MKS)
503
504 # Now we are sure we have all the packages scanned and defined. We now
505 # check for each package in the list of enabled packages, that all its
506 # dependencies are indeed enabled.
507 #
508 # Only trigger the check for default builds. If the user forces building
509 # a package, even if not enabled in the configuration, we want to accept
510 # it.
511 #
512 ifeq ($(MAKECMDGOALS),)
513
514 define CHECK_ONE_DEPENDENCY
515 ifeq ($$($(2)_TYPE),target)
516 ifeq ($$($(2)_IS_VIRTUAL),)
517 ifneq ($$($$($(2)_KCONFIG_VAR)),y)
518 $$(error $$($(2)_NAME) is in the dependency chain of $$($(1)_NAME) that \
519 has added it to its _DEPENDENCIES variable without selecting it or \
520 depending on it from Config.in)
521 endif
522 endif
523 endif
524 endef
525
526 $(foreach pkg,$(call UPPERCASE,$(PACKAGES)),\
527         $(foreach dep,$(call UPPERCASE,$($(pkg)_FINAL_ALL_DEPENDENCIES)),\
528                 $(eval $(call CHECK_ONE_DEPENDENCY,$(pkg),$(dep))$(sep))))
529
530 endif
531
532 dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
533         $(HOST_DIR) $(BINARIES_DIR)
534
535 $(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_CONFIG)
536         $(MAKE1) $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTCXX="$(HOSTCXX_NOCCACHE)" silentoldconfig
537
538 prepare: $(BUILD_DIR)/buildroot-config/auto.conf
539
540 world: target-post-image
541
542 .PHONY: all world toolchain dirs clean distclean source outputmakefile \
543         legal-info legal-info-prepare legal-info-clean printvars help \
544         list-defconfigs target-finalize target-post-image source-check
545
546 # Populating the staging with the base directories is handled by the skeleton package
547 $(STAGING_DIR):
548         @mkdir -p $(STAGING_DIR)
549         @ln -snf $(STAGING_DIR) $(BASE_DIR)/staging
550
551 RSYNC_VCS_EXCLUSIONS = \
552         --exclude .svn --exclude .git --exclude .hg --exclude .bzr \
553         --exclude CVS
554
555 STRIP_FIND_CMD = find $(TARGET_DIR)
556 ifneq (,$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)))
557 STRIP_FIND_CMD += \( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) -prune -o
558 endif
559 STRIP_FIND_CMD += -type f \( -perm /111 -o -name '*.so*' \)
560 # file exclusions:
561 # - libpthread.so: a non-stripped libpthread shared library is needed for
562 #   proper debugging of pthread programs using gdb.
563 # - ld.so: a non-stripped dynamic linker library is needed for valgrind
564 # - kernel modules (*.ko): do not function properly when stripped like normal
565 #   applications and libraries. Normally kernel modules are already excluded
566 #   by the executable permission check above, so the explicit exclusion is only
567 #   done for kernel modules with incorrect permissions.
568 STRIP_FIND_CMD += -not \( $(call findfileclauses,libpthread*.so* ld-*.so* *.ko $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) -print0
569
570 ifeq ($(BR2_ECLIPSE_REGISTER),y)
571 define TOOLCHAIN_ECLIPSE_REGISTER
572         ./support/scripts/eclipse-register-toolchain `readlink -f $(O)` \
573                 $(notdir $(TARGET_CROSS)) $(BR2_ARCH)
574 endef
575 TARGET_FINALIZE_HOOKS += TOOLCHAIN_ECLIPSE_REGISTER
576 endif
577
578 # Generate locale data. Basically, we call the localedef program
579 # (built by the host-localedef package) for each locale. The input
580 # data comes preferably from the toolchain, or if the toolchain does
581 # not have them (Linaro toolchains), we use the ones available on the
582 # host machine.
583 ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
584 GLIBC_GENERATE_LOCALES = $(call qstrip,$(BR2_GENERATE_LOCALE))
585 ifneq ($(GLIBC_GENERATE_LOCALES),)
586 PACKAGES += host-localedef
587
588 define GENERATE_GLIBC_LOCALES
589         $(Q)mkdir -p $(TARGET_DIR)/usr/lib/locale/
590         $(Q)for locale in $(GLIBC_GENERATE_LOCALES) ; do \
591                 inputfile=`echo $${locale} | cut -f1 -d'.'` ; \
592                 charmap=`echo $${locale} | cut -f2 -d'.' -s` ; \
593                 if test -z "$${charmap}" ; then \
594                         charmap="UTF-8" ; \
595                 fi ; \
596                 echo "Generating locale $${inputfile}.$${charmap}" ; \
597                 I18NPATH=$(STAGING_DIR)/usr/share/i18n:/usr/share/i18n \
598                 $(HOST_DIR)/usr/bin/localedef \
599                         --prefix=$(TARGET_DIR) \
600                         --$(call LOWERCASE,$(BR2_ENDIAN))-endian \
601                         -i $${inputfile} -f $${charmap} \
602                         $${locale} ; \
603         done
604 endef
605 TARGET_FINALIZE_HOOKS += GENERATE_GLIBC_LOCALES
606 endif
607 endif
608
609 ifeq ($(BR2_ENABLE_LOCALE_PURGE),y)
610 LOCALE_WHITELIST = $(BUILD_DIR)/locales.nopurge
611 LOCALE_NOPURGE = $(call qstrip,$(BR2_ENABLE_LOCALE_WHITELIST))
612
613 # This piece of junk does the following:
614 # First collect the whitelist in a file.
615 # Then go over all the locale dirs and for each subdir, check if it exists
616 # in the whitelist file. If it doesn't, kill it.
617 # Finally, specifically for X11, regenerate locale.dir from the whitelist.
618 define PURGE_LOCALES
619         rm -f $(LOCALE_WHITELIST)
620         for i in $(LOCALE_NOPURGE) locale-archive; do echo $$i >> $(LOCALE_WHITELIST); done
621
622         for dir in $(wildcard $(addprefix $(TARGET_DIR),/usr/share/locale /usr/share/X11/locale /usr/lib/locale)); \
623         do \
624                 for langdir in $$dir/*; \
625                 do \
626                         if [ -e "$${langdir}" ]; \
627                         then \
628                                 grep -qx "$${langdir##*/}" $(LOCALE_WHITELIST) || rm -rf $$langdir; \
629                         fi \
630                 done; \
631         done
632         if [ -d $(TARGET_DIR)/usr/share/X11/locale ]; \
633         then \
634                 for lang in $(LOCALE_NOPURGE); \
635                 do \
636                         if [ -f $(TARGET_DIR)/usr/share/X11/locale/$$lang/XLC_LOCALE ]; \
637                         then \
638                                 echo "$$lang/XLC_LOCALE: $$lang"; \
639                         fi \
640                 done > $(TARGET_DIR)/usr/share/X11/locale/locale.dir; \
641         fi
642 endef
643 TARGET_FINALIZE_HOOKS += PURGE_LOCALES
644 endif
645
646 $(TARGETS_ROOTFS): target-finalize
647
648 target-finalize: $(PACKAGES)
649         @$(call MESSAGE,"Finalizing target directory")
650         $(foreach hook,$(TARGET_FINALIZE_HOOKS),$($(hook))$(sep))
651         rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \
652                 $(TARGET_DIR)/usr/lib/pkgconfig $(TARGET_DIR)/usr/share/pkgconfig \
653                 $(TARGET_DIR)/usr/lib/cmake $(TARGET_DIR)/usr/share/cmake
654         find $(TARGET_DIR)/usr/{lib,share}/ -name '*.cmake' -print0 | xargs -0 rm -f
655         find $(TARGET_DIR)/lib $(TARGET_DIR)/usr/lib $(TARGET_DIR)/usr/libexec \
656                 \( -name '*.a' -o -name '*.la' \) -print0 | xargs -0 rm -f
657 ifneq ($(BR2_PACKAGE_GDB),y)
658         rm -rf $(TARGET_DIR)/usr/share/gdb
659 endif
660 ifneq ($(BR2_PACKAGE_BASH),y)
661         rm -rf $(TARGET_DIR)/usr/share/bash-completion
662 endif
663 ifneq ($(BR2_PACKAGE_ZSH),y)
664         rm -rf $(TARGET_DIR)/usr/share/zsh
665 endif
666         rm -rf $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/man
667         rm -rf $(TARGET_DIR)/usr/info $(TARGET_DIR)/usr/share/info
668         rm -rf $(TARGET_DIR)/usr/doc $(TARGET_DIR)/usr/share/doc
669         rm -rf $(TARGET_DIR)/usr/share/gtk-doc
670         -rmdir $(TARGET_DIR)/usr/share 2>/dev/null
671         $(STRIP_FIND_CMD) | xargs -0 $(STRIPCMD) 2>/dev/null || true
672
673 # See http://sourceware.org/gdb/wiki/FAQ, "GDB does not see any threads
674 # besides the one in which crash occurred; or SIGTRAP kills my program when
675 # I set a breakpoint"
676 ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
677         find $(TARGET_DIR)/lib -type f -name 'libpthread*.so*' | \
678                 xargs -r $(STRIPCMD) $(STRIP_STRIP_DEBUG)
679 endif
680
681 # Valgrind needs ld.so with enough information, so only strip
682 # debugging symbols.
683         find $(TARGET_DIR)/lib -type f -name 'ld-*.so*' | \
684                 xargs -r $(STRIPCMD) $(STRIP_STRIP_DEBUG)
685         test -f $(TARGET_DIR)/etc/ld.so.conf && \
686                 { echo "ERROR: we shouldn't have a /etc/ld.so.conf file"; exit 1; } || true
687         test -d $(TARGET_DIR)/etc/ld.so.conf.d && \
688                 { echo "ERROR: we shouldn't have a /etc/ld.so.conf.d directory"; exit 1; } || true
689         mkdir -p $(TARGET_DIR)/etc
690         ( \
691                 echo "NAME=Buildroot"; \
692                 echo "VERSION=$(BR2_VERSION_FULL)"; \
693                 echo "ID=buildroot"; \
694                 echo "VERSION_ID=$(BR2_VERSION)"; \
695                 echo "PRETTY_NAME=\"Buildroot $(BR2_VERSION)\"" \
696         ) >  $(TARGET_DIR)/etc/os-release
697
698         @$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
699                 $(call MESSAGE,"Copying overlay $(d)"); \
700                 rsync -a --ignore-times --keep-dirlinks $(RSYNC_VCS_EXCLUSIONS) \
701                         --chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
702                         $(d)/ $(TARGET_DIR)$(sep))
703
704         @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_BUILD_SCRIPT)), \
705                 $(call MESSAGE,"Executing post-build script $(s)"); \
706                 $(EXTRA_ENV) $(s) $(TARGET_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
707
708 target-post-image: $(TARGETS_ROOTFS) target-finalize
709         @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_IMAGE_SCRIPT)), \
710                 $(call MESSAGE,"Executing post-image script $(s)"); \
711                 $(EXTRA_ENV) $(s) $(BINARIES_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
712
713 source: $(foreach p,$(PACKAGES),$(p)-all-source)
714
715 _external-deps: $(foreach p,$(PACKAGES),$(p)-all-external-deps)
716 external-deps:
717         @$(MAKE1) -Bs $(EXTRAMAKEARGS) _external-deps | sort -u
718
719 # check if download URLs are outdated
720 source-check: $(foreach p,$(PACKAGES),$(p)-all-source-check)
721
722 legal-info-clean:
723         @rm -fr $(LEGAL_INFO_DIR)
724
725 legal-info-prepare: $(LEGAL_INFO_DIR)
726         @$(call MESSAGE,"Collecting legal info")
727         @$(call legal-license-file,buildroot,COPYING,COPYING,HOST)
728         @$(call legal-manifest,PACKAGE,VERSION,LICENSE,LICENSE FILES,SOURCE ARCHIVE,SOURCE SITE,TARGET)
729         @$(call legal-manifest,PACKAGE,VERSION,LICENSE,LICENSE FILES,SOURCE ARCHIVE,SOURCE SITE,HOST)
730         @$(call legal-manifest,buildroot,$(BR2_VERSION_FULL),GPLv2+,COPYING,not saved,not saved,HOST)
731         @$(call legal-warning,the Buildroot source code has not been saved)
732         @cp $(BR2_CONFIG) $(LEGAL_INFO_DIR)/buildroot.config
733
734 legal-info: dirs legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p)-all-legal-info) \
735                 $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST)
736         @cat support/legal-info/README.header >>$(LEGAL_REPORT)
737         @if [ -r $(LEGAL_WARNINGS) ]; then \
738                 cat support/legal-info/README.warnings-header \
739                         $(LEGAL_WARNINGS) >>$(LEGAL_REPORT); \
740                 cat $(LEGAL_WARNINGS); fi
741         @rm -f $(LEGAL_WARNINGS)
742         @(cd $(LEGAL_INFO_DIR); \
743                 find * -type f -exec sha256sum {} + | LC_ALL=C sort -k2 \
744                         >.legal-info.sha256; \
745                 mv .legal-info.sha256 legal-info.sha256)
746         @echo "Legal info produced in $(LEGAL_INFO_DIR)"
747
748 show-targets:
749         @echo $(PACKAGES) $(TARGETS_ROOTFS)
750
751 graph-build: $(O)/build/build-time.log
752         @install -d $(GRAPHS_DIR)
753         $(foreach o,name build duration,./support/scripts/graph-build-time \
754                                         --type=histogram --order=$(o) --input=$(<) \
755                                         --output=$(GRAPHS_DIR)/build.hist-$(o).$(BR_GRAPH_OUT) \
756                                         $(if $(BR2_GRAPH_ALT),--alternate-colors)$(sep))
757         $(foreach t,packages steps,./support/scripts/graph-build-time \
758                                    --type=pie-$(t) --input=$(<) \
759                                    --output=$(GRAPHS_DIR)/build.pie-$(t).$(BR_GRAPH_OUT) \
760                                    $(if $(BR2_GRAPH_ALT),--alternate-colors)$(sep))
761
762 graph-depends-requirements:
763         @dot -? >/dev/null 2>&1 || \
764                 { echo "ERROR: The 'dot' program from Graphviz is needed for graph-depends" >&2; exit 1; }
765
766 graph-depends: graph-depends-requirements
767         @$(INSTALL) -d $(GRAPHS_DIR)
768         @cd "$(CONFIG_DIR)"; \
769         $(TOPDIR)/support/scripts/graph-depends $(BR2_GRAPH_DEPS_OPTS) \
770                 --direct -o $(GRAPHS_DIR)/$(@).dot
771         dot $(BR2_GRAPH_DOT_OPTS) -T$(BR_GRAPH_OUT) \
772                 -o $(GRAPHS_DIR)/$(@).$(BR_GRAPH_OUT) \
773                 $(GRAPHS_DIR)/$(@).dot
774
775 graph-size:
776         $(Q)mkdir -p $(GRAPHS_DIR)
777         $(Q)$(TOPDIR)/support/scripts/size-stats --builddir $(BASE_DIR) \
778                 --graph $(GRAPHS_DIR)/graph-size.$(BR_GRAPH_OUT) \
779                 --file-size-csv $(GRAPHS_DIR)/file-size-stats.csv \
780                 --package-size-csv $(GRAPHS_DIR)/package-size-stats.csv
781
782 check-dependencies:
783         @cd "$(CONFIG_DIR)"; \
784         $(TOPDIR)/support/scripts/graph-depends -C
785
786 else # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
787
788 all: menuconfig
789
790 endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
791
792 # configuration
793 # ---------------------------------------------------------------------------
794
795 HOSTCFLAGS = $(CFLAGS_FOR_BUILD)
796 export HOSTCFLAGS
797
798 .PHONY: prepare-kconfig
799 prepare-kconfig: outputmakefile $(BUILD_DIR)/.br2-external.in
800
801 $(BUILD_DIR)/buildroot-config/%onf:
802         mkdir -p $(@D)/lxdialog
803         PKG_CONFIG_PATH="$(HOST_PKG_CONFIG_PATH)" $(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" \
804             obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
805
806 DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG))
807
808 # We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will
809 # recognize that if it's still at its default $(CONFIG_DIR)/defconfig
810 COMMON_CONFIG_ENV = \
811         BR2_DEFCONFIG='$(call qstrip,$(value BR2_DEFCONFIG))' \
812         KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \
813         KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \
814         KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
815         BR2_CONFIG=$(BR2_CONFIG) \
816         HOST_GCC_VERSION="$(HOSTCC_VERSION)" \
817         BUILD_DIR=$(BUILD_DIR) \
818         SKIP_LEGACY=
819
820 xconfig: $(BUILD_DIR)/buildroot-config/qconf prepare-kconfig
821         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
822
823 gconfig: $(BUILD_DIR)/buildroot-config/gconf prepare-kconfig
824         @$(COMMON_CONFIG_ENV) srctree=$(TOPDIR) $< $(CONFIG_CONFIG_IN)
825
826 menuconfig: $(BUILD_DIR)/buildroot-config/mconf prepare-kconfig
827         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
828
829 nconfig: $(BUILD_DIR)/buildroot-config/nconf prepare-kconfig
830         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
831
832 config: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
833         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
834
835 # For the config targets that automatically select options, we pass
836 # SKIP_LEGACY=y to disable the legacy options. However, in that case
837 # no values are set for the legacy options so a subsequent oldconfig
838 # will query them. Therefore, run an additional olddefconfig.
839
840 oldconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
841         @$(COMMON_CONFIG_ENV) $< --oldconfig $(CONFIG_CONFIG_IN)
842
843 randconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
844         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --randconfig $(CONFIG_CONFIG_IN)
845         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
846
847 allyesconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
848         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --allyesconfig $(CONFIG_CONFIG_IN)
849         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
850
851 allnoconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
852         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --allnoconfig $(CONFIG_CONFIG_IN)
853         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
854
855 randpackageconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
856         @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg
857         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \
858                 KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \
859                 $< --randconfig $(CONFIG_CONFIG_IN)
860         @rm -f $(CONFIG_DIR)/.config.nopkg
861         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
862
863 allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
864         @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg
865         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \
866                 KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \
867                 $< --allyesconfig $(CONFIG_CONFIG_IN)
868         @rm -f $(CONFIG_DIR)/.config.nopkg
869         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
870
871 allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
872         @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg
873         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \
874                 KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \
875                 $< --allnoconfig $(CONFIG_CONFIG_IN)
876         @rm -f $(CONFIG_DIR)/.config.nopkg
877         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
878
879 silentoldconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
880         $(COMMON_CONFIG_ENV) $< --silentoldconfig $(CONFIG_CONFIG_IN)
881
882 olddefconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
883         $(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN)
884
885 defconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
886         @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN)
887
888 define percent_defconfig
889 # Override the BR2_DEFCONFIG from COMMON_CONFIG_ENV with the new defconfig
890 %_defconfig: $(BUILD_DIR)/buildroot-config/conf $(1)/configs/%_defconfig prepare-kconfig
891         @$$(COMMON_CONFIG_ENV) BR2_DEFCONFIG=$(1)/configs/$$@ \
892                 $$< --defconfig=$(1)/configs/$$@ $$(CONFIG_CONFIG_IN)
893 endef
894 $(eval $(foreach d,$(call reverse,$(TOPDIR) $(BR2_EXTERNAL_DIRS)),$(call percent_defconfig,$(d))$(sep)))
895
896 savedefconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
897         @$(COMMON_CONFIG_ENV) $< \
898                 --savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \
899                 $(CONFIG_CONFIG_IN)
900         @$(SED) '/BR2_DEFCONFIG=/d' $(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig)
901
902 .PHONY: defconfig savedefconfig
903
904 ################################################################################
905 #
906 # Cleanup and misc junk
907 #
908 ################################################################################
909
910 # outputmakefile generates a Makefile in the output directory, if using a
911 # separate output directory. This allows convenient use of make in the
912 # output directory.
913 outputmakefile:
914 ifeq ($(NEED_WRAPPER),y)
915         $(Q)$(TOPDIR)/support/scripts/mkmakefile $(TOPDIR) $(O)
916 endif
917
918 # Even though the target is a real file, we mark it as PHONY as we
919 # want it to be re-generated each time make is invoked, in case the
920 # value of BR2_EXTERNAL is changed.
921 .PHONY: $(BUILD_DIR)/.br2-external.in
922 $(BUILD_DIR)/.br2-external.in: $(BUILD_DIR)
923         $(Q)support/scripts/br2-external -k -o "$(@)" $(BR2_EXTERNAL)
924
925 # printvars prints all the variables currently defined in our
926 # Makefiles. Alternatively, if a non-empty VARS variable is passed,
927 # only the variables matching the make pattern passed in VARS are
928 # displayed.
929 printvars:
930         @$(foreach V, \
931                 $(sort $(if $(VARS),$(filter $(VARS),$(.VARIABLES)),$(.VARIABLES))), \
932                 $(if $(filter-out environment% default automatic, \
933                                 $(origin $V)), \
934                 $(info $V=$($V) ($(value $V)))))
935
936 clean:
937         rm -rf $(TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) \
938                 $(BUILD_DIR) $(BASE_DIR)/staging \
939                 $(LEGAL_INFO_DIR) $(GRAPHS_DIR)
940
941 distclean: clean
942 ifeq ($(O),output)
943         rm -rf $(O)
944 endif
945         rm -rf $(TOPDIR)/dl $(BR2_CONFIG) $(CONFIG_DIR)/.config.old $(CONFIG_DIR)/..config.tmp \
946                 $(CONFIG_DIR)/.auto.deps $(BR2_EXTERNAL_FILE)
947
948 help:
949         @echo 'Cleaning:'
950         @echo '  clean                  - delete all files created by build'
951         @echo '  distclean              - delete all non-source files (including .config)'
952         @echo
953         @echo 'Build:'
954         @echo '  all                    - make world'
955         @echo '  toolchain              - build toolchain'
956         @echo
957         @echo 'Configuration:'
958         @echo '  menuconfig             - interactive curses-based configurator'
959         @echo '  nconfig                - interactive ncurses-based configurator'
960         @echo '  xconfig                - interactive Qt-based configurator'
961         @echo '  gconfig                - interactive GTK-based configurator'
962         @echo '  oldconfig              - resolve any unresolved symbols in .config'
963         @echo '  silentoldconfig        - Same as oldconfig, but quietly, additionally update deps'
964         @echo '  olddefconfig           - Same as silentoldconfig but sets new symbols to their default value'
965         @echo '  randconfig             - New config with random answer to all options'
966         @echo '  defconfig              - New config with default answer to all options'
967         @echo '                             BR2_DEFCONFIG, if set, is used as input'
968         @echo '  savedefconfig          - Save current config to BR2_DEFCONFIG (minimal config)'
969         @echo '  allyesconfig           - New config where all options are accepted with yes'
970         @echo '  allnoconfig            - New config where all options are answered with no'
971         @echo '  randpackageconfig      - New config with random answer to package options'
972         @echo '  allyespackageconfig    - New config where pkg options are accepted with yes'
973         @echo '  allnopackageconfig     - New config where package options are answered with no'
974         @echo
975         @echo 'Package-specific:'
976         @echo '  <pkg>                  - Build and install <pkg> and all its dependencies'
977         @echo '  <pkg>-source           - Only download the source files for <pkg>'
978         @echo '  <pkg>-extract          - Extract <pkg> sources'
979         @echo '  <pkg>-patch            - Apply patches to <pkg>'
980         @echo '  <pkg>-depends          - Build <pkg>'\''s dependencies'
981         @echo '  <pkg>-configure        - Build <pkg> up to the configure step'
982         @echo '  <pkg>-build            - Build <pkg> up to the build step'
983         @echo '  <pkg>-show-depends     - List packages on which <pkg> depends'
984         @echo '  <pkg>-show-rdepends    - List packages which have <pkg> as a dependency'
985         @echo '  <pkg>-graph-depends    - Generate a graph of <pkg>'\''s dependencies'
986         @echo '  <pkg>-graph-rdepends   - Generate a graph of <pkg>'\''s reverse dependencies'
987         @echo '  <pkg>-dirclean         - Remove <pkg> build directory'
988         @echo '  <pkg>-reconfigure      - Restart the build from the configure step'
989         @echo '  <pkg>-rebuild          - Restart the build from the build step'
990         $(foreach p,$(HELP_PACKAGES), \
991                 @echo $(sep) \
992                 @echo '$($(p)_NAME):' $(sep) \
993                 $($(p)_HELP_CMDS)$(sep))
994         @echo
995         @echo 'Documentation:'
996         @echo '  manual                 - build manual in all formats'
997         @echo '  manual-html            - build manual in HTML'
998         @echo '  manual-split-html      - build manual in split HTML'
999         @echo '  manual-pdf             - build manual in PDF'
1000         @echo '  manual-text            - build manual in text'
1001         @echo '  manual-epub            - build manual in ePub'
1002         @echo '  graph-build            - generate graphs of the build times'
1003         @echo '  graph-depends          - generate graph of the dependency tree'
1004         @echo '  graph-size             - generate stats of the filesystem size'
1005         @echo '  list-defconfigs        - list all defconfigs (pre-configured minimal systems)'
1006         @echo
1007         @echo 'Miscellaneous:'
1008         @echo '  source                 - download all sources needed for offline-build'
1009         @echo '  source-check           - check selected packages for valid download URLs'
1010         @echo '  external-deps          - list external packages used'
1011         @echo '  legal-info             - generate info about license compliance'
1012         @echo
1013         @echo '  make V=0|1             - 0 => quiet build (default), 1 => verbose build'
1014         @echo '  make O=dir             - Locate all output files in "dir", including .config'
1015         @echo
1016         @echo 'For further details, see README, generate the Buildroot manual, or consult'
1017         @echo 'it on-line at http://buildroot.org/docs.html'
1018         @echo
1019
1020 # List the defconfig files
1021 # $(1): base directory
1022 # $(2): br2-external name, empty for bundled
1023 define list-defconfigs
1024         @first=true; \
1025         for defconfig in $(1)/configs/*_defconfig; do \
1026                 [ -f "$${defconfig}" ] || continue; \
1027                 if $${first}; then \
1028                         if [ "$(2)" ]; then \
1029                                 printf 'External configs in "$(call qstrip,$(2))":\n'; \
1030                         else \
1031                                 printf "Built-in configs:\n"; \
1032                         fi; \
1033                         first=false; \
1034                 fi; \
1035                 defconfig="$${defconfig##*/}"; \
1036                 printf "  %-35s - Build for %s\n" "$${defconfig}" "$${defconfig%_defconfig}"; \
1037         done; \
1038         $${first} || printf "\n"
1039 endef
1040
1041 # We iterate over BR2_EXTERNAL_NAMES rather than BR2_EXTERNAL_DIRS,
1042 # because we want to display the name of the br2-external tree.
1043 list-defconfigs:
1044         $(call list-defconfigs,$(TOPDIR))
1045         $(foreach name,$(BR2_EXTERNAL_NAMES),\
1046                 $(call list-defconfigs,$(BR2_EXTERNAL_$(name)_PATH),\
1047                         $(BR2_EXTERNAL_$(name)_DESC))$(sep))
1048
1049 release: OUT = buildroot-$(BR2_VERSION)
1050
1051 # Create release tarballs. We need to fiddle a bit to add the generated
1052 # documentation to the git output
1053 release:
1054         git archive --format=tar --prefix=$(OUT)/ HEAD > $(OUT).tar
1055         $(MAKE) O=$(OUT) manual-html manual-text manual-pdf
1056         $(MAKE) O=$(OUT) manual-clean
1057         tar rf $(OUT).tar $(OUT)
1058         gzip -9 -c < $(OUT).tar > $(OUT).tar.gz
1059         bzip2 -9 -c < $(OUT).tar > $(OUT).tar.bz2
1060         rm -rf $(OUT) $(OUT).tar
1061
1062 print-version:
1063         @echo $(BR2_VERSION_FULL)
1064
1065 include docs/manual/manual.mk
1066 -include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(dir)/docs/*/*.mk)
1067
1068 .PHONY: $(noconfig_targets)
1069
1070 endif #umask / $(CURDIR) / $(O)