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