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