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