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