fs/ubifs: work around fakeroot / sed -i issue on systems with SELinux enabled
[buildroot-gz.git] / Makefile
blob13239616a86c6907078606bf1b63db92c08b3008
1 # Makefile for buildroot
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>
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.
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.
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
22 #--------------------------------------------------------------
23 # Just run 'make menuconfig', configure stuff, then run 'make'.
24 # You shouldn't need to mess with anything beyond this point...
25 #--------------------------------------------------------------
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)
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
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.
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))
60 CANONICAL_CURDIR = $(realpath $(CURDIR))
62 REQ_UMASK = 0022
64 # Make sure O= is passed (with its absolute canonical path) everywhere the
65 # toplevel makefile is called back.
66 EXTRAMAKEARGS := O=$(CANONICAL_O)
68 # Check Buildroot execution pre-requisites here.
69 ifneq ($(shell umask):$(CURDIR):$(O),$(REQ_UMASK):$(CANONICAL_CURDIR):$(CANONICAL_O))
70 .PHONY: _all $(MAKECMDGOALS)
72 $(MAKECMDGOALS): _all
75 _all:
76 @umask $(REQ_UMASK) && \
77 $(MAKE) -C $(CANONICAL_CURDIR) --no-print-directory \
78 $(MAKECMDGOALS) $(EXTRAMAKEARGS)
80 else # umask / $(CURDIR) / $(O)
82 # This is our default rule, so must come first
83 all:
85 # Set and export the version string
86 export BR2_VERSION := 2016.11-rc2
88 # Save running make version since it's clobbered by the make package
89 RUNNING_MAKE_VERSION := $(MAKE_VERSION)
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
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.
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:
113 # absolute path
114 TOPDIR := $(CURDIR)
115 CONFIG_CONFIG_IN = Config.in
116 CONFIG = support/kconfig
117 DATE := $(shell date +%Y%m%d)
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)
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
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.
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
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 :=
153 # Include some helper macros and variables
154 include support/misc/utils.mk
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
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))
175 # Handling of BR2_EXTERNAL.
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.
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
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
202 # Need that early, before we scan packages
203 # Avoids doing the $(or...) everytime
204 BR_GRAPH_OUT := $(or $(BR2_GRAPH_OUT),pdf)
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
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
224 ################################################################################
226 # staging and target directories do NOT list these as
227 # dependencies anywhere else
229 ################################################################################
230 $(BUILD_DIR) $(TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST):
231 @mkdir -p $@
233 BR2_CONFIG = $(CONFIG_DIR)/.config
235 # Pull in the user's configuration file
236 ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
237 -include $(BR2_CONFIG)
238 endif
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
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
256 ifeq ($(KBUILD_VERBOSE),1)
258 ifndef VERBOSE
259 VERBOSE = 1
260 endif
261 export VERBOSE
262 else
263 Q = @
264 endif
266 # kconfig uses CONFIG_SHELL
267 CONFIG_SHELL := $(SHELL)
269 export SHELL CONFIG_SHELL Q KBUILD_VERBOSE
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)
314 export HOSTAR HOSTAS HOSTCC HOSTCXX HOSTLD
315 export HOSTCC_NOCCACHE HOSTCXX_NOCCACHE
317 # Determine the userland we are running on.
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.
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).
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.
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/' )
343 HOSTCC_VERSION := $(shell $(HOSTCC_NOCCACHE) --version | \
344 sed -n -r 's/^.* ([0-9]*)\.([0-9]*)\.([0-9]*)[ ]*.*/\1 \2/p')
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
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
357 # Having DESTDIR set in the environment confuses the installation
358 # steps of some packages.
359 unexport DESTDIR
361 # Causes breakage with packages that needs host-ruby
362 unexport RUBYOPT
364 include package/pkg-utils.mk
365 include package/doc-asciidoc.mk
367 ifeq ($(BR2_HAVE_DOT_CONFIG),y)
369 ################################################################################
371 # Hide troublesome environment variables from sub processes
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
392 GNU_HOST_NAME := $(shell support/gnuconfig/config.guess)
394 PACKAGES :=
395 PACKAGES_ALL :=
397 # silent mode requested?
398 QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q)
400 # Strip off the annoying quoting
401 ARCH := $(call qstrip,$(BR2_ARCH))
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/)
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
421 # packages compiled for the host go here
422 HOST_DIR := $(call qstrip,$(BR2_HOST_DIR))
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)"
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
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
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
451 ################################################################################
453 # You should probably leave this stuff alone unless you know
454 # what you are doing.
456 ################################################################################
458 all: world
460 # Include legacy before the other things, because package .mk files
461 # may rely on it.
462 include Makefile.legacy
464 include package/Makefile.in
465 include support/dependencies/dependencies.mk
467 include toolchain/*.mk
468 include toolchain/*/*.mk
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
477 include $(sort $(wildcard package/*/*.mk))
479 include boot/common.mk
480 include linux/linux.mk
481 include fs/common.mk
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)
490 # Nothing to include if no BR2_EXTERNAL tree in use
491 include $(BR2_EXTERNAL_MKS)
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.
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.
501 ifeq ($(MAKECMDGOALS),)
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
515 $(foreach pkg,$(call UPPERCASE,$(PACKAGES)),\
516 $(foreach dep,$(call UPPERCASE,$($(pkg)_FINAL_ALL_DEPENDENCIES)),\
517 $(eval $(call CHECK_ONE_DEPENDENCY,$(pkg),$(dep))$(sep))))
519 endif
521 dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
522 $(HOST_DIR) $(BINARIES_DIR)
524 $(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_CONFIG)
525 $(MAKE1) $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTCXX="$(HOSTCXX_NOCCACHE)" silentoldconfig
527 prepare: $(BUILD_DIR)/buildroot-config/auto.conf
529 world: target-post-image
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
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
540 RSYNC_VCS_EXCLUSIONS = \
541 --exclude .svn --exclude .git --exclude .hg --exclude .bzr \
542 --exclude CVS
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
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
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
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
598 ifeq ($(BR2_ENABLE_LOCALE_PURGE),y)
599 LOCALE_WHITELIST = $(BUILD_DIR)/locales.nopurge
600 LOCALE_NOPURGE = $(call qstrip,$(BR2_ENABLE_LOCALE_WHITELIST))
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
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; \
631 endef
632 TARGET_FINALIZE_HOOKS += PURGE_LOCALES
633 endif
635 $(TARGETS_ROOTFS): target-finalize
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
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
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
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
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))
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))
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))
702 source: $(foreach p,$(PACKAGES),$(p)-all-source)
704 _external-deps: $(foreach p,$(PACKAGES),$(p)-all-external-deps)
705 external-deps:
706 @$(MAKE1) -Bs $(EXTRAMAKEARGS) _external-deps | sort -u
708 # check if download URLs are outdated
709 source-check: $(foreach p,$(PACKAGES),$(p)-all-source-check)
711 legal-info-clean:
712 @rm -fr $(LEGAL_INFO_DIR)
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
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)"
737 show-targets:
738 @echo $(PACKAGES) $(TARGETS_ROOTFS)
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))
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; }
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
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
771 check-dependencies:
772 @cd "$(CONFIG_DIR)"; \
773 $(TOPDIR)/support/scripts/graph-depends -C
775 else # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
777 all: menuconfig
779 endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
781 # configuration
782 # ---------------------------------------------------------------------------
784 HOSTCFLAGS = $(CFLAGS_FOR_BUILD)
785 export HOSTCFLAGS
787 .PHONY: prepare-kconfig
788 prepare-kconfig: outputmakefile $(BUILD_DIR)/.br2-external.in
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)
795 DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG))
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=
809 xconfig: $(BUILD_DIR)/buildroot-config/qconf prepare-kconfig
810 @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
812 gconfig: $(BUILD_DIR)/buildroot-config/gconf prepare-kconfig
813 @$(COMMON_CONFIG_ENV) srctree=$(TOPDIR) $< $(CONFIG_CONFIG_IN)
815 menuconfig: $(BUILD_DIR)/buildroot-config/mconf prepare-kconfig
816 @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
818 nconfig: $(BUILD_DIR)/buildroot-config/nconf prepare-kconfig
819 @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
821 config: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
822 @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
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.
829 oldconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
830 @$(COMMON_CONFIG_ENV) $< --oldconfig $(CONFIG_CONFIG_IN)
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
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
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
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
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
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
868 silentoldconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
869 $(COMMON_CONFIG_ENV) $< --silentoldconfig $(CONFIG_CONFIG_IN)
871 olddefconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
872 $(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN)
874 defconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
875 @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN)
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)))
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)
891 .PHONY: defconfig savedefconfig
893 ################################################################################
895 # Cleanup and misc junk
897 ################################################################################
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
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)
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)))))
925 clean:
926 rm -rf $(TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) \
927 $(BUILD_DIR) $(BASE_DIR)/staging \
928 $(LEGAL_INFO_DIR) $(GRAPHS_DIR)
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)
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
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
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))
1038 release: OUT = buildroot-$(BR2_VERSION)
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
1051 print-version:
1052 @echo $(BR2_VERSION_FULL)
1054 include docs/manual/manual.mk
1055 -include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(dir)/docs/*/*.mk)
1057 .PHONY: $(noconfig_targets)
1059 endif #umask / $(CURDIR) / $(O)