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