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