]> Git Repo - buildroot-mgba.git/blob - Makefile
package/libcurl: fix libpsl static build
[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.02-git
94 # Actual time the release is cut (for reproducible builds)
95 BR2_VERSION_EPOCH = 1701677000
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) $(TARGET_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
588
589 .PHONY: world
590 world: target-post-image
591
592 .PHONY: prepare-sdk
593 prepare-sdk: world
594         @$(call MESSAGE,"Rendering the SDK relocatable")
595         PARALLEL_JOBS=$(PARALLEL_JOBS) \
596                 PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) \
597                 $(TOPDIR)/support/scripts/fix-rpath host
598         PARALLEL_JOBS=$(PARALLEL_JOBS) \
599                 PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) \
600                 $(TOPDIR)/support/scripts/fix-rpath staging
601         $(call ppd-fixup-paths,$(BASE_DIR))
602         $(INSTALL) -m 755 $(TOPDIR)/support/misc/relocate-sdk.sh $(HOST_DIR)/relocate-sdk.sh
603         mkdir -p $(HOST_DIR)/share/buildroot
604         echo $(HOST_DIR) > $(HOST_DIR)/share/buildroot/sdk-location
605
606 BR2_SDK_PREFIX ?= $(GNU_TARGET_NAME)_sdk-buildroot
607 .PHONY: sdk
608 sdk: prepare-sdk $(BR2_TAR_HOST_DEPENDENCY)
609         @$(call MESSAGE,"Generating SDK tarball")
610         $(if $(BR2_SDK_PREFIX),,$(error BR2_SDK_PREFIX can not be empty))
611         $(Q)mkdir -p $(BINARIES_DIR)
612         $(TAR) czf "$(BINARIES_DIR)/$(BR2_SDK_PREFIX).tar.gz" \
613                 --owner=0 --group=0 --numeric-owner \
614                 --transform='s#^$(patsubst /%,%,$(HOST_DIR))#$(BR2_SDK_PREFIX)#' \
615                 -C / $(patsubst /%,%,$(HOST_DIR))
616
617 RSYNC_VCS_EXCLUSIONS = \
618         --exclude .svn --exclude .git --exclude .hg --exclude .bzr \
619         --exclude CVS
620
621 # When stripping, obey to BR2_STRIP_EXCLUDE_DIRS and
622 # BR2_STRIP_EXCLUDE_FILES
623 STRIP_FIND_COMMON_CMD = \
624         find $(TARGET_DIR) \
625         $(if $(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)), \
626                 \( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) \
627                 -prune -o \
628         ) \
629         $(if $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES)), \
630                 -not \( $(call findfileclauses,$(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) )
631
632 # Regular stripping for everything, except libpthread, ld-*.so and
633 # kernel modules:
634 # - libpthread.so: a non-stripped libpthread shared library is needed for
635 #   proper debugging of pthread programs using gdb.
636 # - ld.so: a non-stripped dynamic linker library is needed for valgrind
637 # - kernel modules (*.ko): do not function properly when stripped like normal
638 #   applications and libraries. Normally kernel modules are already excluded
639 #   by the executable permission check, so the explicit exclusion is only
640 #   done for kernel modules with incorrect permissions.
641 STRIP_FIND_CMD = \
642         $(STRIP_FIND_COMMON_CMD) \
643         -type f \( -perm /111 -o -name '*.so*' \) \
644         -not \( $(call findfileclauses,libpthread*.so* ld-*.so* *.ko) \) \
645         -print0
646
647 # Special stripping (only debugging symbols) for libpthread and ld-*.so.
648 STRIP_FIND_SPECIAL_LIBS_CMD = \
649         $(STRIP_FIND_COMMON_CMD) \
650         \( -name 'ld-*.so*' -o -name 'libpthread*.so*' \) \
651         -print0
652
653 # Generate locale data.
654 ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
655 GLIBC_GENERATE_LOCALES = $(call qstrip,$(BR2_GENERATE_LOCALE))
656 ifneq ($(GLIBC_GENERATE_LOCALES),)
657 PACKAGES += host-localedef
658
659 define GENERATE_GLIBC_LOCALES
660         +$(MAKE) -f support/misc/gen-glibc-locales.mk \
661                 ENDIAN=$(call LOWERCASE,$(BR2_ENDIAN)) \
662                 LOCALES="$(GLIBC_GENERATE_LOCALES)" \
663                 Q=$(Q)
664 endef
665 TARGET_FINALIZE_HOOKS += GENERATE_GLIBC_LOCALES
666 endif
667 endif
668
669 ifeq ($(BR2_ENABLE_LOCALE_PURGE),y)
670 LOCALE_WHITELIST = $(BUILD_DIR)/locales.nopurge
671 LOCALE_NOPURGE = $(call qstrip,$(BR2_ENABLE_LOCALE_WHITELIST))
672
673 # This piece of junk does the following:
674 # First collect the whitelist in a file.
675 # Then go over all the locale dirs and for each subdir, check if it exists
676 # in the whitelist file. If it doesn't, kill it.
677 # Finally, specifically for X11, regenerate locale.dir from the whitelist.
678 define PURGE_LOCALES
679         printf '%s\n' $(LOCALE_NOPURGE) locale-archive > $(LOCALE_WHITELIST)
680
681         for dir in $(addprefix $(TARGET_DIR),/usr/share/locale /usr/share/X11/locale /usr/lib/locale); \
682         do \
683                 if [ ! -d $$dir ]; then continue; fi; \
684                 for langdir in $$dir/*; \
685                 do \
686                         if [ -e "$${langdir}" ]; \
687                         then \
688                                 grep -qx "$${langdir##*/}" $(LOCALE_WHITELIST) || rm -rf $$langdir; \
689                         fi \
690                 done; \
691         done
692         if [ -d $(TARGET_DIR)/usr/share/X11/locale ]; \
693         then \
694                 for lang in $(LOCALE_NOPURGE); \
695                 do \
696                         if [ -f $(TARGET_DIR)/usr/share/X11/locale/$$lang/XLC_LOCALE ]; \
697                         then \
698                                 echo "$$lang/XLC_LOCALE: $$lang"; \
699                         fi \
700                 done > $(TARGET_DIR)/usr/share/X11/locale/locale.dir; \
701         fi
702 endef
703 TARGET_FINALIZE_HOOKS += PURGE_LOCALES
704 endif
705
706 $(TARGETS_ROOTFS): target-finalize
707
708 # Avoid the rootfs name leaking down the dependency chain
709 target-finalize: ROOTFS=
710
711 TARGET_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list.txt))
712 HOST_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-host.txt))
713 STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.txt))
714
715 .PHONY: host-finalize
716 host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK)
717         @$(call MESSAGE,"Finalizing host directory")
718         $(call per-package-rsync,$(sort $(PACKAGES)),host,$(HOST_DIR),copy)
719
720 .PHONY: staging-finalize
721 staging-finalize: $(STAGING_DIR_SYMLINK)
722
723 .PHONY: target-finalize
724 target-finalize: $(PACKAGES) $(TARGET_DIR) host-finalize
725         @$(call MESSAGE,"Finalizing target directory")
726         $(call per-package-rsync,$(sort $(PACKAGES)),target,$(TARGET_DIR),copy)
727         $(foreach hook,$(TARGET_FINALIZE_HOOKS),$($(hook))$(sep))
728         rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \
729                 $(TARGET_DIR)/usr/lib/pkgconfig $(TARGET_DIR)/usr/share/pkgconfig \
730                 $(TARGET_DIR)/usr/lib/cmake $(TARGET_DIR)/usr/share/cmake \
731                 $(TARGET_DIR)/usr/lib/rpm $(TARGET_DIR)/usr/doc
732         find $(TARGET_DIR)/usr/{lib,share}/ -name '*.cmake' -print0 | xargs -0 rm -f
733         find $(TARGET_DIR)/lib/ $(TARGET_DIR)/usr/lib/ $(TARGET_DIR)/usr/libexec/ \
734                 \( -name '*.a' -o -name '*.la' -o -name '*.prl' \) -print0 | xargs -0 rm -f
735 ifneq ($(BR2_PACKAGE_GDB),y)
736         rm -rf $(TARGET_DIR)/usr/share/gdb
737 endif
738 ifneq ($(BR2_PACKAGE_BASH),y)
739         rm -rf $(TARGET_DIR)/usr/share/bash-completion
740         rm -rf $(TARGET_DIR)/etc/bash_completion.d
741 endif
742 ifneq ($(BR2_PACKAGE_ZSH),y)
743         rm -rf $(TARGET_DIR)/usr/share/zsh
744 endif
745         rm -rf $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/man
746         rm -rf $(TARGET_DIR)/usr/info $(TARGET_DIR)/usr/share/info
747         rm -rf $(TARGET_DIR)/usr/doc $(TARGET_DIR)/usr/share/doc
748         rm -rf $(TARGET_DIR)/usr/share/gtk-doc
749         rmdir $(TARGET_DIR)/usr/share 2>/dev/null || true
750 ifneq ($(BR2_ENABLE_DEBUG):$(BR2_STRIP_strip),y:)
751         rm -rf $(TARGET_DIR)/lib/debug $(TARGET_DIR)/usr/lib/debug
752 endif
753         $(STRIP_FIND_CMD) | xargs -0 $(STRIPCMD) 2>/dev/null || true
754         $(STRIP_FIND_SPECIAL_LIBS_CMD) | xargs -0 -r $(STRIPCMD) $(STRIP_STRIP_DEBUG) 2>/dev/null || true
755
756         test -f $(TARGET_DIR)/etc/ld.so.conf && \
757                 { echo "ERROR: we shouldn't have a /etc/ld.so.conf file"; exit 1; } || true
758         test -d $(TARGET_DIR)/etc/ld.so.conf.d && \
759                 { echo "ERROR: we shouldn't have a /etc/ld.so.conf.d directory"; exit 1; } || true
760         mkdir -p $(TARGET_DIR)/etc
761         ( \
762                 echo "NAME=Buildroot"; \
763                 echo "VERSION=$(BR2_VERSION_FULL)"; \
764                 echo "ID=buildroot"; \
765                 echo "VERSION_ID=$(BR2_VERSION)"; \
766                 echo "PRETTY_NAME=\"Buildroot $(BR2_VERSION)\"" \
767         ) >  $(TARGET_DIR)/usr/lib/os-release
768         ln -sf ../usr/lib/os-release $(TARGET_DIR)/etc
769
770         @$(call MESSAGE,"Sanitizing RPATH in target tree")
771         PARALLEL_JOBS=$(PARALLEL_JOBS) \
772                 PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) \
773                 $(TOPDIR)/support/scripts/fix-rpath target
774
775 # For a merged /usr, ensure that /lib, /bin and /sbin and their /usr
776 # counterparts are appropriately setup as symlinks ones to the others.
777 ifeq ($(BR2_ROOTFS_MERGED_USR),y)
778
779         $(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
780                 @$(call MESSAGE,"Sanity check in overlay $(d)")$(sep) \
781                 $(Q)not_merged_dirs="$$(support/scripts/check-merged-usr.sh $(d))"; \
782                 test -n "$$not_merged_dirs" && { \
783                         echo "ERROR: The overlay in $(d) is not" \
784                                 "using a merged /usr for the following directories:" \
785                                 $$not_merged_dirs; \
786                         exit 1; \
787                 } || true$(sep))
788
789 endif # merged /usr
790
791         $(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
792                 @$(call MESSAGE,"Copying overlay $(d)")$(sep) \
793                 $(Q)$(call SYSTEM_RSYNC,$(d),$(TARGET_DIR))$(sep))
794
795         $(Q)$(if $(TARGET_DIR_FILES_LISTS), \
796                 cat $(TARGET_DIR_FILES_LISTS)) > $(BUILD_DIR)/packages-file-list.txt
797         $(Q)$(if $(HOST_DIR_FILES_LISTS), \
798                 cat $(HOST_DIR_FILES_LISTS)) > $(BUILD_DIR)/packages-file-list-host.txt
799         $(Q)$(if $(STAGING_DIR_FILES_LISTS), \
800                 cat $(STAGING_DIR_FILES_LISTS)) > $(BUILD_DIR)/packages-file-list-staging.txt
801
802         $(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_BUILD_SCRIPT)), \
803                 @$(call MESSAGE,"Executing post-build script $(s)")$(sep) \
804                 $(Q)$(EXTRA_ENV) $(s) $(TARGET_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
805
806         touch $(TARGET_DIR)/usr
807
808 # Note: this will run in the filesystem context, so will use a copy
809 # of target/, not the real one, so the files are still available on
810 # re-builds (foo-rebuild, etc...)
811 define ROOTFS_RM_HWDB_DATA
812         rm -rf $(TARGET_DIR)/usr/lib/udev/hwdb.d/ $(TARGET_DIR)/etc/udev/hwdb.d/
813 endef
814 ROOTFS_PRE_CMD_HOOKS += ROOTFS_RM_HWDB_DATA
815
816 .PHONY: target-post-image
817 target-post-image: $(TARGETS_ROOTFS) target-finalize staging-finalize
818         @rm -f $(ROOTFS_COMMON_TAR)
819         $(Q)mkdir -p $(BINARIES_DIR)
820         @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_IMAGE_SCRIPT)), \
821                 $(call MESSAGE,"Executing post-image script $(s)"); \
822                 $(EXTRA_ENV) $(s) $(BINARIES_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
823
824 .PHONY: source
825 source: $(foreach p,$(PACKAGES),$(p)-all-source)
826
827 .PHONY: _external-deps external-deps
828 _external-deps: $(foreach p,$(PACKAGES),$(p)-all-external-deps)
829 external-deps:
830         @$(MAKE1) -Bs $(EXTRAMAKEARGS) _external-deps | sort -u
831
832 .PHONY: legal-info-clean
833 legal-info-clean:
834         @rm -fr $(LEGAL_INFO_DIR)
835
836 .PHONY: legal-info-prepare
837 legal-info-prepare: $(LEGAL_INFO_DIR)
838         @$(call MESSAGE,"Buildroot $(BR2_VERSION_FULL) Collecting legal info")
839         @$(call legal-license-file,HOST,buildroot,buildroot,COPYING,COPYING,support/legal-info/buildroot.hash)
840         @$(call legal-manifest,TARGET,PACKAGE,VERSION,LICENSE,LICENSE FILES,SOURCE ARCHIVE,SOURCE SITE,DEPENDENCIES WITH LICENSES)
841         @$(call legal-manifest,HOST,PACKAGE,VERSION,LICENSE,LICENSE FILES,SOURCE ARCHIVE,SOURCE SITE,DEPENDENCIES WITH LICENSES)
842         @$(call legal-manifest,HOST,buildroot,$(BR2_VERSION_FULL),GPL-2.0+,COPYING,not saved,not saved)
843         @$(call legal-warning,the Buildroot source code has not been saved)
844         @cp $(BR2_CONFIG) $(LEGAL_INFO_DIR)/buildroot.config
845
846 .PHONY: legal-info
847 legal-info: legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p)-all-legal-info) \
848                 $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST)
849         @cat support/legal-info/README.header >>$(LEGAL_REPORT)
850         @if [ -r $(LEGAL_WARNINGS) ]; then \
851                 cat support/legal-info/README.warnings-header \
852                         $(LEGAL_WARNINGS) >>$(LEGAL_REPORT); \
853                 cat $(LEGAL_WARNINGS); fi
854         @rm -f $(LEGAL_WARNINGS)
855         @(cd $(LEGAL_INFO_DIR); \
856                 find * -type f -exec sha256sum {} + | LC_ALL=C sort -k2 \
857                         >.legal-info.sha256; \
858                 mv .legal-info.sha256 legal-info.sha256)
859         @echo "Legal info produced in $(LEGAL_INFO_DIR)"
860
861 .PHONY: show-targets
862 show-targets:
863         @echo $(sort $(PACKAGES)) $(sort $(TARGETS_ROOTFS))
864
865 .PHONY: show-build-order
866 show-build-order: $(patsubst %,%-show-build-order,$(PACKAGES))
867
868 .PHONY: graph-build
869 graph-build: $(O)/build/build-time.log
870         @install -d $(GRAPHS_DIR)
871         $(foreach o,name build duration,./support/scripts/graph-build-time \
872                                         --type=histogram --order=$(o) --input=$(<) \
873                                         --output=$(GRAPHS_DIR)/build.hist-$(o).$(BR_GRAPH_OUT) \
874                                         $(if $(BR2_GRAPH_ALT),--alternate-colors)$(sep))
875         $(foreach t,packages steps,./support/scripts/graph-build-time \
876                                    --type=pie-$(t) --input=$(<) \
877                                    --output=$(GRAPHS_DIR)/build.pie-$(t).$(BR_GRAPH_OUT) \
878                                    $(if $(BR2_GRAPH_ALT),--alternate-colors)$(sep))
879         ./support/scripts/graph-build-time --type=timeline --input=$(<) \
880                 --output=$(GRAPHS_DIR)/build.timeline.$(BR_GRAPH_OUT) \
881                 $(if $(BR2_GRAPH_ALT),--alternate-colors)
882
883 .PHONY: graph-depends-requirements
884 graph-depends-requirements:
885         @dot -? >/dev/null 2>&1 || \
886                 { echo "ERROR: The 'dot' program from Graphviz is needed for graph-depends" >&2; exit 1; }
887
888 .PHONY: graph-depends
889 graph-depends: graph-depends-requirements
890         @$(INSTALL) -d $(GRAPHS_DIR)
891         @cd "$(CONFIG_DIR)"; \
892         $(TOPDIR)/support/scripts/graph-depends $(BR2_GRAPH_DEPS_OPTS) \
893                 --direct -o $(GRAPHS_DIR)/$(@).dot
894         dot $(BR2_GRAPH_DOT_OPTS) -T$(BR_GRAPH_OUT) \
895                 -o $(GRAPHS_DIR)/$(@).$(BR_GRAPH_OUT) \
896                 $(GRAPHS_DIR)/$(@).dot
897
898 .PHONY: graph-size
899 graph-size:
900         $(Q)mkdir -p $(GRAPHS_DIR)
901         $(Q)$(TOPDIR)/support/scripts/size-stats --builddir $(BASE_DIR) \
902                 --graph $(GRAPHS_DIR)/graph-size.$(BR_GRAPH_OUT) \
903                 --file-size-csv $(GRAPHS_DIR)/file-size-stats.csv \
904                 --package-size-csv $(GRAPHS_DIR)/package-size-stats.csv \
905                 $(BR2_GRAPH_SIZE_OPTS)
906
907 .PHONY: check-dependencies
908 check-dependencies:
909         @cd "$(CONFIG_DIR)"; \
910         $(TOPDIR)/support/scripts/graph-depends -C
911
912 .PHONY: show-info
913 show-info:
914         @:
915         $(info $(call clean-json, \
916                         { $(foreach p, \
917                                 $(sort $(foreach i,$(PACKAGES) $(TARGETS_ROOTFS), \
918                                                 $(i) \
919                                                 $($(call UPPERCASE,$(i))_FINAL_RECURSIVE_DEPENDENCIES) \
920                                         ) \
921                                 ), \
922                                 $(call json-info,$(call UPPERCASE,$(p)))$(comma) \
923                         ) } \
924                 ) \
925         )
926
927 .PHONY: pkg-stats
928 pkg-stats:
929         @cd "$(CONFIG_DIR)" ; \
930         $(TOPDIR)/support/scripts/pkg-stats -c \
931                 --json $(O)/pkg-stats.json \
932                 --html $(O)/pkg-stats.html \
933                 --nvd-path $(DL_DIR)/buildroot-nvd
934
935 else # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
936
937 # Some subdirectories are also package names. To avoid that "make linux"
938 # on an unconfigured tree produces "Nothing to be done", add an explicit
939 # rule for it.
940 # Also for 'all' we error out and ask the user to configure first.
941 .PHONY: linux toolchain
942 linux toolchain all: outputmakefile
943         $(error Please configure Buildroot first (e.g. "make menuconfig"))
944         @exit 1
945
946 endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
947
948 # configuration
949 # ---------------------------------------------------------------------------
950
951 HOSTCFLAGS = $(CFLAGS_FOR_BUILD)
952 export HOSTCFLAGS
953
954 $(BUILD_DIR)/buildroot-config/%onf:
955         mkdir -p $(@D)/lxdialog
956         PKG_CONFIG_PATH="$(HOST_PKG_CONFIG_PATH)" $(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" \
957             obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
958
959 DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG))
960
961 # We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will
962 # recognize that if it's still at its default $(CONFIG_DIR)/defconfig
963 COMMON_CONFIG_ENV = \
964         BR2_DEFCONFIG='$(call qstrip,$(value BR2_DEFCONFIG))' \
965         KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \
966         KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \
967         KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
968         BR2_CONFIG=$(BR2_CONFIG) \
969         HOST_GCC_VERSION="$(HOSTCC_VERSION)" \
970         BASE_DIR=$(BASE_DIR) \
971         SKIP_LEGACY=
972
973 xconfig: $(BUILD_DIR)/buildroot-config/qconf outputmakefile
974         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
975
976 gconfig: $(BUILD_DIR)/buildroot-config/gconf outputmakefile
977         @$(COMMON_CONFIG_ENV) srctree=$(TOPDIR) $< $(CONFIG_CONFIG_IN)
978
979 menuconfig: $(BUILD_DIR)/buildroot-config/mconf outputmakefile
980         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
981
982 nconfig: $(BUILD_DIR)/buildroot-config/nconf outputmakefile
983         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
984
985 config: $(BUILD_DIR)/buildroot-config/conf outputmakefile
986         @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
987
988 # For the config targets that automatically select options, we pass
989 # SKIP_LEGACY=y to disable the legacy options. However, in that case
990 # no values are set for the legacy options so a subsequent oldconfig
991 # will query them. Therefore, run an additional olddefconfig.
992
993 randconfig allyesconfig alldefconfig allnoconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
994         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --$@ $(CONFIG_CONFIG_IN)
995         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
996
997 randpackageconfig allyespackageconfig allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
998         @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg
999         @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \
1000                 KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \
1001                 $< --$(subst package,,$@) $(CONFIG_CONFIG_IN)
1002         @rm -f $(CONFIG_DIR)/.config.nopkg
1003         @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null
1004
1005 oldconfig syncconfig olddefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
1006         @$(COMMON_CONFIG_ENV) $< --$@ $(CONFIG_CONFIG_IN)
1007
1008 defconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
1009         @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN)
1010
1011 %_defconfig: $(BUILD_DIR)/buildroot-config/conf  outputmakefile
1012         @defconfig=$(or \
1013                 $(firstword \
1014                         $(foreach d, \
1015                                 $(call reverse,$(TOPDIR) $(BR2_EXTERNAL_DIRS)), \
1016                                 $(wildcard $(d)/configs/$@) \
1017                         ) \
1018                 ), \
1019                 $(error "Can't find $@") \
1020         ); \
1021         $(COMMON_CONFIG_ENV) BR2_DEFCONFIG=$${defconfig} \
1022                 $< --defconfig=$${defconfig} $(CONFIG_CONFIG_IN)
1023
1024 update-defconfig: savedefconfig
1025
1026 savedefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
1027         @$(COMMON_CONFIG_ENV) $< \
1028                 --savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \
1029                 $(CONFIG_CONFIG_IN)
1030         @$(SED) '/^BR2_DEFCONFIG=/d' $(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig)
1031
1032 .PHONY: defconfig savedefconfig update-defconfig
1033
1034 ################################################################################
1035 #
1036 # Cleanup and misc junk
1037 #
1038 ################################################################################
1039
1040 # staging and target directories do NOT list these as
1041 # dependencies anywhere else
1042 $(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):
1043         @mkdir -p $@
1044
1045 # outputmakefile generates a Makefile in the output directory, if using a
1046 # separate output directory. This allows convenient use of make in the
1047 # output directory.
1048 .PHONY: outputmakefile
1049 outputmakefile:
1050 ifeq ($(NEED_WRAPPER),y)
1051         $(Q)$(TOPDIR)/support/scripts/mkmakefile $(TOPDIR) $(O)
1052 endif
1053
1054 # printvars prints all the variables currently defined in our
1055 # Makefiles. Alternatively, if a non-empty VARS variable is passed,
1056 # only the variables matching the make pattern passed in VARS are
1057 # displayed.
1058 # show-vars does the same, but as a JSON dictionnary.
1059 #
1060 # Note: we iterate of .VARIABLES and filter each variable individually,
1061 # to workaround a bug in make 4.3; see https://savannah.gnu.org/bugs/?59093
1062 .PHONY: printvars
1063 printvars:
1064 ifndef VARS
1065         $(error Please pass a non-empty VARS to 'make printvars')
1066 endif
1067         @:
1068         $(foreach V, \
1069                 $(sort $(foreach X, $(.VARIABLES), $(filter $(VARS),$(X)))), \
1070                 $(if $(filter-out environment% default automatic, \
1071                                 $(origin $V)), \
1072                 $(if $(QUOTED_VARS),\
1073                         $(info $V='$(subst ','\'',$(if $(RAW_VARS),$(value $V),$($V)))'), \
1074                         $(info $V=$(if $(RAW_VARS),$(value $V),$($V))))))
1075 # ')))) # Syntax colouring...
1076
1077 # See details above, same as for printvars
1078 .PHONY: show-vars
1079 show-vars: VARS?=%
1080 show-vars:
1081         @:
1082         $(foreach i, \
1083                 $(call clean-json, { \
1084                         $(foreach V, \
1085                                 $(.VARIABLES), \
1086                                 $(and $(filter $(VARS),$(V)) \
1087                                         , \
1088                                         $(filter-out environment% default automatic, $(origin $V)) \
1089                                         , \
1090                                         "$V": { \
1091                                                 "expanded": $(call mk-json-str,$($V))$(comma) \
1092                                                 "raw": $(call mk-json-str,$(value $V)) \
1093                                         }$(comma) \
1094                                 ) \
1095                         ) \
1096                 } ) \
1097                 , \
1098                 $(info $(i)) \
1099         )
1100
1101 .PHONY: clean
1102 clean:
1103         rm -rf $(BASE_TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) $(HOST_DIR_SYMLINK) \
1104                 $(BUILD_DIR) $(BASE_DIR)/staging \
1105                 $(LEGAL_INFO_DIR) $(GRAPHS_DIR) $(PER_PACKAGE_DIR) $(O)/pkg-stats.*
1106
1107 .PHONY: distclean
1108 distclean: clean
1109 ifeq ($(O),$(CURDIR)/output)
1110         rm -rf $(O)
1111 endif
1112         rm -rf $(TOPDIR)/dl $(BR2_CONFIG) $(CONFIG_DIR)/.config.old $(CONFIG_DIR)/..config.tmp \
1113                 $(CONFIG_DIR)/.auto.deps $(BASE_DIR)/.br2-external.*
1114
1115 .PHONY: help
1116 help:
1117         @echo 'Cleaning:'
1118         @echo '  clean                  - delete all files created by build'
1119         @echo '  distclean              - delete all non-source files (including .config)'
1120         @echo
1121         @echo 'Build:'
1122         @echo '  all                    - make world'
1123         @echo '  toolchain              - build toolchain'
1124         @echo '  sdk                    - build relocatable SDK'
1125         @echo
1126         @echo 'Configuration:'
1127         @echo '  menuconfig             - interactive curses-based configurator'
1128         @echo '  nconfig                - interactive ncurses-based configurator'
1129         @echo '  xconfig                - interactive Qt-based configurator'
1130         @echo '  gconfig                - interactive GTK-based configurator'
1131         @echo '  oldconfig              - resolve any unresolved symbols in .config'
1132         @echo '  syncconfig             - Same as oldconfig, but quietly, additionally update deps'
1133         @echo '  olddefconfig           - Same as syncconfig but sets new symbols to their default value'
1134         @echo '  randconfig             - New config with random answer to all options'
1135         @echo '  defconfig              - New config with default answer to all options;'
1136         @echo '                             BR2_DEFCONFIG, if set on the command line, is used as input'
1137         @echo '  savedefconfig          - Save current config to BR2_DEFCONFIG (minimal config)'
1138         @echo '  update-defconfig       - Same as savedefconfig'
1139         @echo '  allyesconfig           - New config where all options are accepted with yes'
1140         @echo '  allnoconfig            - New config where all options are answered with no'
1141         @echo '  alldefconfig           - New config where all options are set to default'
1142         @echo '  randpackageconfig      - New config with random answer to package options'
1143         @echo '  allyespackageconfig    - New config where pkg options are accepted with yes'
1144         @echo '  allnopackageconfig     - New config where package options are answered with no'
1145         @echo
1146         @echo 'Package-specific:'
1147         @echo '  <pkg>                  - Build and install <pkg> and all its dependencies'
1148         @echo '  <pkg>-source           - Only download the source files for <pkg>'
1149         @echo '  <pkg>-extract          - Extract <pkg> sources'
1150         @echo '  <pkg>-patch            - Apply patches to <pkg>'
1151         @echo '  <pkg>-depends          - Build <pkg>'\''s dependencies'
1152         @echo '  <pkg>-configure        - Build <pkg> up to the configure step'
1153         @echo '  <pkg>-build            - Build <pkg> up to the build step'
1154         @echo '  <pkg>-show-info        - generate info about <pkg>, as a JSON blurb'
1155         @echo '  <pkg>-show-depends     - List packages on which <pkg> depends'
1156         @echo '  <pkg>-show-rdepends    - List packages which have <pkg> as a dependency'
1157         @echo '  <pkg>-show-recursive-depends'
1158         @echo '                         - Recursively list packages on which <pkg> depends'
1159         @echo '  <pkg>-show-recursive-rdepends'
1160         @echo '                         - Recursively list packages which have <pkg> as a dependency'
1161         @echo '  <pkg>-graph-depends    - Generate a graph of <pkg>'\''s dependencies'
1162         @echo '  <pkg>-graph-rdepends   - Generate a graph of <pkg>'\''s reverse dependencies'
1163         @echo '  <pkg>-dirclean         - Remove <pkg> build directory'
1164         @echo '  <pkg>-reconfigure      - Restart the build from the configure step'
1165         @echo '  <pkg>-rebuild          - Restart the build from the build step'
1166         @echo '  <pkg>-reinstall        - Restart the build from the install step'
1167         $(foreach p,$(HELP_PACKAGES), \
1168                 @echo $(sep) \
1169                 @echo '$($(p)_NAME):' $(sep) \
1170                 $($(p)_HELP_CMDS)$(sep))
1171         @echo
1172         @echo 'Documentation:'
1173         @echo '  manual                 - build manual in all formats'
1174         @echo '  manual-html            - build manual in HTML'
1175         @echo '  manual-split-html      - build manual in split HTML'
1176         @echo '  manual-pdf             - build manual in PDF'
1177         @echo '  manual-text            - build manual in text'
1178         @echo '  manual-epub            - build manual in ePub'
1179         @echo '  graph-build            - generate graphs of the build times'
1180         @echo '  graph-depends          - generate graph of the dependency tree'
1181         @echo '  graph-size             - generate stats of the filesystem size'
1182         @echo '  list-defconfigs        - list all defconfigs (pre-configured minimal systems)'
1183         @echo
1184         @echo 'Miscellaneous:'
1185         @echo '  source                 - download all sources needed for offline-build'
1186         @echo '  external-deps          - list external packages used'
1187         @echo '  legal-info             - generate info about license compliance'
1188         @echo '  show-info              - generate info about packages, as a JSON blurb'
1189         @echo '  pkg-stats              - generate info about packages as JSON and HTML'
1190         @echo '  printvars              - dump internal variables selected with VARS=...'
1191         @echo '  show-vars              - dump all internal variables as a JSON blurb; use VARS=...'
1192         @echo '                           to limit the list to variables names matching that pattern'
1193         @echo
1194         @echo '  make V=0|1             - 0 => quiet build (default), 1 => verbose build'
1195         @echo '  make O=dir             - Locate all output files in "dir", including .config'
1196         @echo
1197         @echo 'For further details, see README, generate the Buildroot manual, or consult'
1198         @echo 'it on-line at http://buildroot.org/docs.html'
1199         @echo
1200
1201 # List the defconfig files
1202 # $(1): base directory
1203 # $(2): br2-external name, empty for bundled
1204 define list-defconfigs
1205         @first=true; \
1206         for defconfig in $(1)/configs/*_defconfig; do \
1207                 [ -f "$${defconfig}" ] || continue; \
1208                 if $${first}; then \
1209                         if [ "$(2)" ]; then \
1210                                 printf 'External configs in "$(call qstrip,$(2))":\n'; \
1211                         else \
1212                                 printf "Built-in configs:\n"; \
1213                         fi; \
1214                         first=false; \
1215                 fi; \
1216                 defconfig="$${defconfig##*/}"; \
1217                 printf "  %-35s - Build for %s\n" "$${defconfig}" "$${defconfig%_defconfig}"; \
1218         done; \
1219         $${first} || printf "\n"
1220 endef
1221
1222 # We iterate over BR2_EXTERNAL_NAMES rather than BR2_EXTERNAL_DIRS,
1223 # because we want to display the name of the br2-external tree.
1224 .PHONY: list-defconfigs
1225 list-defconfigs:
1226         $(call list-defconfigs,$(TOPDIR))
1227         $(foreach name,$(BR2_EXTERNAL_NAMES),\
1228                 $(call list-defconfigs,$(BR2_EXTERNAL_$(name)_PATH),\
1229                         $(BR2_EXTERNAL_$(name)_DESC))$(sep))
1230
1231 release: OUT = buildroot-$(BR2_VERSION)
1232
1233 # Create release tarballs. We need to fiddle a bit to add the generated
1234 # documentation to the git output
1235 release:
1236         git archive --format=tar --prefix=$(OUT)/ HEAD > $(OUT).tar
1237         $(MAKE) O=$(OUT) manual-html manual-text manual-pdf
1238         $(MAKE) O=$(OUT) distclean
1239         tar rf $(OUT).tar $(OUT)
1240         gzip -9 -c < $(OUT).tar > $(OUT).tar.gz
1241         xz -9 -c < $(OUT).tar > $(OUT).tar.xz
1242         rm -rf $(OUT) $(OUT).tar
1243
1244 print-version:
1245         @echo $(BR2_VERSION_FULL)
1246
1247 check-package:
1248         $(Q)./utils/check-package `git ls-tree -r --name-only HEAD` \
1249                 --ignore-list=$(TOPDIR)/.checkpackageignore
1250
1251 .PHONY: .checkpackageignore
1252 .checkpackageignore:
1253         $(Q)./utils/check-package --failed-only `git ls-tree -r --name-only HEAD` \
1254                 > .checkpackageignore
1255
1256 include docs/manual/manual.mk
1257 -include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(sort $(wildcard $(dir)/docs/*/*.mk)))
1258
1259 .PHONY: $(noconfig_targets)
1260
1261 # .WAIT was introduced in make 4.4. For older make, define it as phony.
1262 .PHONY: .WAIT
1263
1264 endif #umask / $(CURDIR) / $(O)
This page took 0.101395 seconds and 4 git commands to generate.