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