X-Git-Url: http://rtime.felk.cvut.cz/gitweb/coffee/buildroot.git/blobdiff_plain/2de968f03a76c3feb5c7693cfc05a6342fcc12ae..a9bb361435532d00bbcff6fed97618b68441b9cc:/Makefile diff --git a/Makefile b/Makefile index 7cab6fa7ff..5fc435a225 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # # Copyright (C) 1999-2005 by Erik Andersen # Copyright (C) 2006-2014 by the Buildroot developers -# Copyright (C) 2014-2017 by the Buildroot developers +# Copyright (C) 2014-2018 by the Buildroot developers # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -87,9 +87,9 @@ all: .PHONY: all # Set and export the version string -export BR2_VERSION := 2017.08-git +export BR2_VERSION := 2018.05-rc1 # Actual time the release is cut (for reproducible builds) -BR2_VERSION_EPOCH = 1496267000 +BR2_VERSION_EPOCH = 1525899000 # Save running make version since it's clobbered by the make package RUNNING_MAKE_VERSION := $(MAKE_VERSION) @@ -128,7 +128,7 @@ export BR2_VERSION_FULL := $(BR2_VERSION)$(shell $(TOPDIR)/support/scripts/setlo # List of targets and target patterns for which .config doesn't need to be read in noconfig_targets := menuconfig nconfig gconfig xconfig config oldconfig randconfig \ - defconfig %_defconfig allyesconfig allnoconfig silentoldconfig release \ + defconfig %_defconfig allyesconfig allnoconfig alldefconfig silentoldconfig release \ randpackageconfig allyespackageconfig allnopackageconfig \ print-version olddefconfig distclean manual manual-% @@ -141,7 +141,7 @@ noconfig_targets := menuconfig nconfig gconfig xconfig config oldconfig randconf # We're building in two situations: when MAKECMDGOALS is empty # (default target is to build), or when MAKECMDGOALS contains # something else than one of the nobuild_targets. -nobuild_targets := source %-source source-check \ +nobuild_targets := source %-source \ legal-info %-legal-info external-deps _external-deps \ clean distclean help show-targets graph-depends \ %-graph-depends %-show-depends %-show-version \ @@ -215,7 +215,10 @@ BR_GRAPH_OUT := $(or $(BR2_GRAPH_OUT),pdf) BUILD_DIR := $(BASE_DIR)/build BINARIES_DIR := $(BASE_DIR)/images -TARGET_DIR := $(BASE_DIR)/target +# The target directory is common to all packages, +# but there is one that is specific to each filesystem. +BASE_TARGET_DIR := $(BASE_DIR)/target +TARGET_DIR = $(if $(ROOTFS),$(ROOTFS_$(ROOTFS)_TARGET_DIR),$(BASE_TARGET_DIR)) # initial definition so that 'make clean' works for most users, even without # .config. HOST_DIR will be overwritten later when .config is included. HOST_DIR := $(BASE_DIR)/host @@ -231,15 +234,6 @@ LEGAL_MANIFEST_CSV_HOST = $(LEGAL_INFO_DIR)/host-manifest.csv LEGAL_WARNINGS = $(LEGAL_INFO_DIR)/.warnings LEGAL_REPORT = $(LEGAL_INFO_DIR)/README -################################################################################ -# -# staging and target directories do NOT list these as -# dependencies anywhere else -# -################################################################################ -$(BUILD_DIR) $(TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST): - @mkdir -p $@ - BR2_CONFIG = $(CONFIG_DIR)/.config # Pull in the user's configuration file @@ -253,9 +247,6 @@ export TZ = UTC export LANG = C export LC_ALL = C export GZIP = -n -BR2_VERSION_GIT_EPOCH = $(shell GIT_DIR=$(TOPDIR)/.git $(GIT) log -1 --format=%at) -export SOURCE_DATE_EPOCH = $(if $(wildcard $(TOPDIR)/.git),$(BR2_VERSION_GIT_EPOCH),$(BR2_VERSION_EPOCH)) -DEPENDENCIES_HOST_PREREQ += host-fakedate endif # To put more focus on warnings, be less verbose as default @@ -363,6 +354,22 @@ ifneq ($(firstword $(HOSTCC_VERSION)),4) HOSTCC_VERSION := $(firstword $(HOSTCC_VERSION)) endif +ifeq ($(BR2_NEEDS_HOST_UTF8_LOCALE),y) +# First, we try to use the user's configured locale (as that's the +# language they'd expect messages to be displayed), then we favour +# a non language-specific locale like C.UTF-8 if one is available, +# so we sort with the C locale to get it at the top. +# This is guaranteed to not be empty, because of the check in +# support/dependencies/dependencies.sh +HOST_UTF8_LOCALE := $(shell \ + ( echo $${LC_ALL:-$${LC_MESSAGES:-$${LANG}}}; \ + locale -a 2>/dev/null | LC_ALL=C sort \ + ) \ + | grep -i -E 'utf-?8$$' \ + | head -n 1) +HOST_UTF8_LOCALE_ENV := LC_ALL=$(HOST_UTF8_LOCALE) +endif + # Make sure pkg-config doesn't look outside the buildroot tree HOST_PKG_CONFIG_PATH := $(PKG_CONFIG_PATH) unexport PKG_CONFIG_PATH @@ -422,7 +429,6 @@ KERNEL_ARCH := $(shell echo "$(ARCH)" | sed -e "s/-.*//" \ -e s/arceb/arc/ \ -e s/arm.*/arm/ -e s/sa110/arm/ \ -e s/aarch64.*/arm64/ \ - -e s/bfin/blackfin/ \ -e s/or1k/openrisc/ \ -e s/parisc64/parisc/ \ -e s/powerpc64.*/powerpc/ \ @@ -439,12 +445,18 @@ TAR_OPTIONS = $(call qstrip,$(BR2_TAR_OPTIONS)) -xf # packages compiled for the host go here HOST_DIR := $(call qstrip,$(BR2_HOST_DIR)) +ifneq ($(HOST_DIR),$(BASE_DIR)/host) +HOST_DIR_SYMLINK = $(BASE_DIR)/host +$(HOST_DIR_SYMLINK): $(BASE_DIR) + ln -snf $(HOST_DIR) $(BASE_DIR)/host +endif + # Quotes are needed for spaces and all in the original PATH content. BR_PATH = "$(HOST_DIR)/bin:$(HOST_DIR)/sbin:$(PATH)" # Location of a file giving a big fat warning that output/target # should not be used as the root filesystem. -TARGET_DIR_WARNING_FILE = $(TARGET_DIR)/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM +TARGET_DIR_WARNING_FILE = $(BASE_TARGET_DIR)/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM ifeq ($(BR2_CCACHE),y) CCACHE := $(HOST_DIR)/bin/ccache @@ -483,11 +495,19 @@ include system/system.mk include package/Makefile.in # arch/arch.mk.* must be after package/Makefile.in because it may need to # complement variables defined therein, like BR_NO_CHECK_HASH_FOR. --include $(wildcard arch/arch.mk.*) +-include $(sort $(wildcard arch/arch.mk.*)) include support/dependencies/dependencies.mk -include toolchain/*.mk -include toolchain/*/*.mk +include $(sort $(wildcard toolchain/*.mk)) +include $(sort $(wildcard toolchain/*/*.mk)) + +ifeq ($(BR2_REPRODUCIBLE),y) +# If SOURCE_DATE_EPOCH has not been set then use the commit date, or the last +# release date if the source tree is not within a Git repository. +# See: https://reproducible-builds.org/specs/source-date-epoch/ +BR2_VERSION_GIT_EPOCH := $(shell $(GIT) log -1 --format=%at 2> /dev/null) +export SOURCE_DATE_EPOCH ?= $(or $(BR2_VERSION_GIT_EPOCH),$(BR2_VERSION_EPOCH)) +endif # Include the package override file if one has been provided in the # configuration. @@ -541,8 +561,8 @@ $(foreach pkg,$(call UPPERCASE,$(PACKAGES)),\ endif .PHONY: dirs -dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \ - $(HOST_DIR) $(HOST_DIR)/usr $(BINARIES_DIR) +dirs: $(BUILD_DIR) $(STAGING_DIR) $(BASE_TARGET_DIR) \ + $(HOST_DIR) $(HOST_DIR_SYMLINK) $(BINARIES_DIR) $(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_CONFIG) $(MAKE1) $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTCXX="$(HOSTCXX_NOCCACHE)" silentoldconfig @@ -559,12 +579,9 @@ sdk: world $(TOPDIR)/support/scripts/fix-rpath host $(TOPDIR)/support/scripts/fix-rpath staging $(INSTALL) -m 755 $(TOPDIR)/support/misc/relocate-sdk.sh $(HOST_DIR)/relocate-sdk.sh + mkdir -p $(HOST_DIR)/share/buildroot echo $(HOST_DIR) > $(HOST_DIR)/share/buildroot/sdk-location -# Compatibility symlink in case a post-build script still uses $(HOST_DIR)/usr -$(HOST_DIR)/usr: $(HOST_DIR) - @ln -snf . $@ - # Populating the staging with the base directories is handled by the skeleton package $(STAGING_DIR): @mkdir -p $(STAGING_DIR) @@ -667,9 +684,16 @@ endif $(TARGETS_ROOTFS): target-finalize +# Avoid the rootfs name leaking down the dependency chain +target-finalize: ROOTFS= + .PHONY: target-finalize target-finalize: $(PACKAGES) @$(call MESSAGE,"Finalizing target directory") + # Check files that are touched by more than one package + ./support/scripts/check-uniq-files -t target $(BUILD_DIR)/packages-file-list.txt + ./support/scripts/check-uniq-files -t staging $(BUILD_DIR)/packages-file-list-staging.txt + ./support/scripts/check-uniq-files -t host $(BUILD_DIR)/packages-file-list-host.txt $(foreach hook,$(TARGET_FINALIZE_HOOKS),$($(hook))$(sep)) rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \ $(TARGET_DIR)/usr/lib/pkgconfig $(TARGET_DIR)/usr/share/pkgconfig \ @@ -716,7 +740,8 @@ endif echo "ID=buildroot"; \ echo "VERSION_ID=$(BR2_VERSION)"; \ echo "PRETTY_NAME=\"Buildroot $(BR2_VERSION)\"" \ - ) > $(TARGET_DIR)/etc/os-release + ) > $(TARGET_DIR)/usr/lib/os-release + ln -sf ../usr/lib/os-release $(TARGET_DIR)/etc @$(call MESSAGE,"Sanitizing RPATH in target tree") $(TOPDIR)/support/scripts/fix-rpath target @@ -731,8 +756,11 @@ endif $(call MESSAGE,"Executing post-build script $(s)"); \ $(EXTRA_ENV) $(s) $(TARGET_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep)) + touch $(TARGET_DIR)/usr + .PHONY: target-post-image target-post-image: $(TARGETS_ROOTFS) target-finalize + @rm -f $(ROOTFS_COMMON_TAR) @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_IMAGE_SCRIPT)), \ $(call MESSAGE,"Executing post-image script $(s)"); \ $(EXTRA_ENV) $(s) $(BINARIES_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep)) @@ -745,10 +773,6 @@ _external-deps: $(foreach p,$(PACKAGES),$(p)-all-external-deps) external-deps: @$(MAKE1) -Bs $(EXTRAMAKEARGS) _external-deps | sort -u -# check if download URLs are outdated -.PHONY: source-check -source-check: $(foreach p,$(PACKAGES),$(p)-all-source-check) - .PHONY: legal-info-clean legal-info-clean: @rm -fr $(LEGAL_INFO_DIR) @@ -780,7 +804,7 @@ legal-info: dirs legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p .PHONY: show-targets show-targets: - @echo $(PACKAGES) $(TARGETS_ROOTFS) + @echo $(sort $(PACKAGES)) $(sort $(TARGETS_ROOTFS)) .PHONY: show-build-order show-build-order: $(patsubst %,%-show-build-order,$(PACKAGES)) @@ -886,50 +910,20 @@ config: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig # no values are set for the legacy options so a subsequent oldconfig # will query them. Therefore, run an additional olddefconfig. -oldconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - @$(COMMON_CONFIG_ENV) $< --oldconfig $(CONFIG_CONFIG_IN) - -randconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --randconfig $(CONFIG_CONFIG_IN) +randconfig allyesconfig alldefconfig allnoconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig + @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --$@ $(CONFIG_CONFIG_IN) @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null -allyesconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --allyesconfig $(CONFIG_CONFIG_IN) - @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null - -allnoconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --allnoconfig $(CONFIG_CONFIG_IN) - @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null - -randpackageconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg - @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \ - KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \ - $< --randconfig $(CONFIG_CONFIG_IN) - @rm -f $(CONFIG_DIR)/.config.nopkg - @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null - -allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg - @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \ - KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \ - $< --allyesconfig $(CONFIG_CONFIG_IN) - @rm -f $(CONFIG_DIR)/.config.nopkg - @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null - -allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig +randpackageconfig allyespackageconfig allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \ KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \ - $< --allnoconfig $(CONFIG_CONFIG_IN) + $< --$(subst package,,$@) $(CONFIG_CONFIG_IN) @rm -f $(CONFIG_DIR)/.config.nopkg @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null -silentoldconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - $(COMMON_CONFIG_ENV) $< --silentoldconfig $(CONFIG_CONFIG_IN) - -olddefconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig - $(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) +oldconfig silentoldconfig olddefconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig + @$(COMMON_CONFIG_ENV) $< --$@ $(CONFIG_CONFIG_IN) defconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN) @@ -956,6 +950,11 @@ savedefconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig # ################################################################################ +# staging and target directories do NOT list these as +# dependencies anywhere else +$(BUILD_DIR) $(BASE_TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST): + @mkdir -p $@ + # outputmakefile generates a Makefile in the output directory, if using a # separate output directory. This allows convenient use of make in the # output directory. @@ -989,7 +988,7 @@ printvars: .PHONY: clean clean: - rm -rf $(TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) \ + rm -rf $(BASE_TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) $(HOST_DIR_SYMLINK) \ $(BUILD_DIR) $(BASE_DIR)/staging \ $(LEGAL_INFO_DIR) $(GRAPHS_DIR) @@ -1026,6 +1025,7 @@ help: @echo ' savedefconfig - Save current config to BR2_DEFCONFIG (minimal config)' @echo ' allyesconfig - New config where all options are accepted with yes' @echo ' allnoconfig - New config where all options are answered with no' + @echo ' alldefconfig - New config where all options are set to default' @echo ' randpackageconfig - New config with random answer to package options' @echo ' allyespackageconfig - New config where pkg options are accepted with yes' @echo ' allnopackageconfig - New config where package options are answered with no' @@ -1040,6 +1040,10 @@ help: @echo ' -build - Build up to the build step' @echo ' -show-depends - List packages on which depends' @echo ' -show-rdepends - List packages which have as a dependency' + @echo ' -show-recursive-depends' + @echo ' - Recursively list packages on which depends' + @echo ' -show-recursive-rdepends' + @echo ' - Recursively list packages which have as a dependency' @echo ' -graph-depends - Generate a graph of '\''s dependencies' @echo ' -graph-rdepends - Generate a graph of '\''s reverse dependencies' @echo ' -dirclean - Remove build directory' @@ -1064,7 +1068,6 @@ help: @echo @echo 'Miscellaneous:' @echo ' source - download all sources needed for offline-build' - @echo ' source-check - check selected packages for valid download URLs' @echo ' external-deps - list external packages used' @echo ' legal-info - generate info about license compliance' @echo ' printvars - dump all the internal variables' @@ -1129,7 +1132,7 @@ print-version: ./support/testing/run-tests -l 2>&1 | sed -r -e '/^test_run \((.*)\).*/!d; s//\1: *runtime_test/' | LC_ALL=C sort >> $@ include docs/manual/manual.mk --include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(dir)/docs/*/*.mk) +-include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(sort $(wildcard $(dir)/docs/*/*.mk))) .PHONY: $(noconfig_targets)