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