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