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