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