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