1################################################################################ 2# 3# linux-headers 4# 5################################################################################ 6 7# This package is used to provide Linux kernel headers for the 8# internal toolchain backend. 9 10ifeq ($(BR2_PACKAGE_LINUX_HEADERS_AUTO_VERSION),y) 11# Get real Linux headers version from Makefile's VERSION and PATCHLEVEL 12LINUX_HEADERS_VERSION_REAL = \ 13 `grep -o "[0-9]*" -m 2 $(LINUX_HEADERS_DIR)/Makefile|paste -sd.` 14endif 15 16# Set variables depending on whether we are using headers from a kernel 17# build or a standalone header package. 18ifeq ($(BR2_KERNEL_HEADERS_AS_KERNEL),y) 19LINUX_HEADERS_CUSTOM_TARBALL = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_TARBALL)) 20LINUX_HEADERS_CUSTOM_LOCAL = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_LOCAL)) 21LINUX_HEADERS_CUSTOM_GIT = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_GIT)) 22LINUX_HEADERS_CUSTOM_HG = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_HG)) 23LINUX_HEADERS_CUSTOM_SVN = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_SVN)) 24LINUX_HEADERS_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION)) 25LINUX_HEADERS_CUSTOM_TARBALL_LOCATION = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION)) 26LINUX_HEADERS_CUSTOM_LOCAL_LOCATION = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_LOCAL_LOCATION)) 27LINUX_HEADERS_REPO_URL = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL)) 28LINUX_HEADERS_CIP = $(BR2_LINUX_KERNEL_LATEST_CIP_VERSION)$(BR2_LINUX_KERNEL_LATEST_CIP_RT_VERSION) 29ifneq ($(LINUX_HEADERS_OVERRIDE_SRCDIR),) 30$(error LINUX_HEADERS_OVERRIDE_SRCDIR must not be set when BR2_KERNEL_HEADERS_AS_KERNEL=y) 31endif 32LINUX_HEADERS_OVERRIDE_SRCDIR = $(LINUX_OVERRIDE_SRCDIR) 33else # ! BR2_KERNEL_HEADERS_AS_KERNEL 34LINUX_HEADERS_CUSTOM_TARBALL = $(call qstrip,$(BR2_KERNEL_HEADERS_CUSTOM_TARBALL)) 35LINUX_HEADERS_CUSTOM_LOCAL = $(call qstrip,$(BR2_KERNEL_HEADERS_CUSTOM_LOCAL)) 36LINUX_HEADERS_CUSTOM_GIT = $(call qstrip,$(BR2_KERNEL_HEADERS_CUSTOM_GIT)) 37LINUX_HEADERS_CUSTOM_HG = 38LINUX_HEADERS_CUSTOM_SVN = 39LINUX_HEADERS_VERSION = $(call qstrip,$(BR2_DEFAULT_KERNEL_HEADERS)) 40LINUX_HEADERS_CUSTOM_TARBALL_LOCATION = $(call qstrip,$(BR2_KERNEL_HEADERS_CUSTOM_TARBALL_LOCATION)) 41LINUX_HEADERS_CUSTOM_LOCAL_LOCATION = $(call qstrip,$(BR2_KERNEL_HEADERS_CUSTOM_LOCAL_LOCATION)) 42LINUX_HEADERS_REPO_URL = $(call qstrip,$(BR2_KERNEL_HEADERS_CUSTOM_REPO_URL)) 43LINUX_HEADERS_CIP = 44endif # BR2_KERNEL_HEADERS_AS_KERNEL 45 46ifeq ($(BR2_KERNEL_HEADERS_VERSION)$(BR_BUILDING),yy) 47ifeq ($(LINUX_HEADERS_VERSION),) 48$(error No kernel headers version set, check your BR2_DEFAULT_KERNEL_VERSION setting) 49endif 50endif 51 52# Compute LINUX_HEADERS_SOURCE and LINUX_HEADERS_SITE from the configuration 53ifeq ($(LINUX_HEADERS_CUSTOM_TARBALL),y) 54ifeq ($(BR_BUILDING),y) 55ifeq ($(LINUX_HEADERS_CUSTOM_TARBALL_LOCATION),) 56$(error No kernel headers tarball location set, check your BR2_KERNEL_HEADERS_CUSTOM_TARBALL_LOCATION setting) 57endif 58endif 59LINUX_HEADERS_SOURCE = $(notdir $(LINUX_HEADERS_CUSTOM_TARBALL_LOCATION)) 60LINUX_HEADERS_SITE = $(patsubst %/,%,$(dir $(LINUX_HEADERS_CUSTOM_TARBALL_LOCATION))) 61else ifeq ($(LINUX_HEADERS_CUSTOM_LOCAL),y) 62LINUX_HEADERS_SITE = $(LINUX_HEADERS_CUSTOM_LOCAL_LOCATION) 63LINUX_HEADERS_SITE_METHOD = local 64else ifeq ($(LINUX_HEADERS_CUSTOM_GIT),y) 65LINUX_HEADERS_SOURCE = linux-$(LINUX_HEADERS_VERSION)$(BR_FMT_VERSION_git).tar.gz 66LINUX_HEADERS_SITE = $(LINUX_HEADERS_REPO_URL) 67LINUX_HEADERS_SITE_METHOD = git 68else ifeq ($(LINUX_HEADERS_CUSTOM_HG),y) 69LINUX_HEADERS_SOURCE = linux-$(LINUX_HEADERS_VERSION).tar.gz 70LINUX_HEADERS_SITE = $(LINUX_HEADERS_REPO_URL) 71LINUX_HEADERS_SITE_METHOD = hg 72else ifeq ($(LINUX_HEADERS_CUSTOM_SVN),y) 73LINUX_HEADERS_SOURCE = linux-$(LINUX_HEADERS_VERSION)$(BR_FMT_VERSION_svn).tar.gz 74LINUX_HEADERS_SITE = $(LINUX_HEADERS_REPO_URL) 75LINUX_HEADERS_SITE_METHOD = svn 76else ifeq ($(LINUX_HEADERS_CIP),y) 77LINUX_HEADERS_SOURCE = linux-cip-$(LINUX_HEADERS_VERSION).tar.gz 78LINUX_HEADERS_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/cip/linux-cip.git/snapshot 79else ifneq ($(findstring -rc,$(LINUX_HEADERS_VERSION)),) 80# Since 4.12-rc1, -rc kernels are generated from cgit. This also works for 81# older -rc kernels. 82LINUX_HEADERS_SOURCE = linux-$(LINUX_HEADERS_VERSION).tar.gz 83LINUX_HEADERS_SITE = https://git.kernel.org/torvalds/t 84else 85LINUX_HEADERS_SOURCE = linux-$(LINUX_HEADERS_VERSION).tar.xz 86ifeq ($(findstring x2.6.,x$(LINUX_HEADERS_VERSION)),x2.6.) 87LINUX_HEADERS_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v2.6 88else 89LINUX_HEADERS_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v$(firstword $(subst ., ,$(LINUX_HEADERS_VERSION))).x 90endif # x2.6 91endif # LINUX_HEADERS_CUSTOM_TARBALL 92 93# Apply any necessary patches if we are using the headers from a kernel 94# build. 95ifeq ($(BR2_KERNEL_HEADERS_AS_KERNEL),y) 96LINUX_HEADERS_PATCHES = $(call qstrip,$(BR2_LINUX_KERNEL_PATCH)) \ 97 $(wildcard $(addsuffix /linux,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR)))) 98 99# We rely on the generic package infrastructure to download and apply 100# remote patches (downloaded from ftp, http or https). For local 101# patches, we can't rely on that infrastructure, because there might 102# be directories in the patch list (unlike for other packages). 103LINUX_HEADERS_PATCH = $(filter ftp://% http://% https://%,$(LINUX_HEADERS_PATCHES)) 104 105define LINUX_HEADERS_APPLY_LOCAL_PATCHES 106 for p in $(filter-out ftp://% http://% https://%,$(LINUX_HEADERS_PATCHES)) ; do \ 107 if test -d $$p ; then \ 108 $(APPLY_PATCHES) $(@D) $$p \*.patch || exit 1 ; \ 109 else \ 110 $(APPLY_PATCHES) $(@D) `dirname $$p` `basename $$p` || exit 1; \ 111 fi \ 112 done 113endef 114 115LINUX_HEADERS_POST_PATCH_HOOKS += LINUX_HEADERS_APPLY_LOCAL_PATCHES 116endif # BR2_KERNEL_HEADERS_AS_KERNEL 117 118# Skip hash checking for custom kernel headers. 119ifeq ($(BR2_KERNEL_HEADERS_VERSION)$(BR2_KERNEL_HEADERS_CUSTOM_TARBALL)$(BR2_KERNEL_HEADERS_CUSTOM_GIT)$(BR2_KERNEL_HEADERS_CUSTOM_LOCAL),y) 120BR_NO_CHECK_HASH_FOR += $(LINUX_HEADERS_SOURCE) 121endif 122 123# linux-headers really is the same as the linux package 124LINUX_HEADERS_DL_SUBDIR = linux 125 126LINUX_HEADERS_LICENSE = GPL-2.0 127ifeq ($(BR2_KERNEL_HEADERS_LATEST),y) 128LINUX_HEADERS_LICENSE_FILES = \ 129 COPYING \ 130 LICENSES/preferred/GPL-2.0 \ 131 LICENSES/exceptions/Linux-syscall-note 132endif 133LINUX_HEADERS_CPE_ID_VENDOR = linux 134LINUX_HEADERS_CPE_ID_PRODUCT = linux_kernel 135 136LINUX_HEADERS_INSTALL_STAGING = YES 137 138# linux-headers is part of the toolchain so disable the toolchain dependency 139LINUX_HEADERS_ADD_TOOLCHAIN_DEPENDENCY = NO 140 141# For some architectures (eg. Arc, Cris, Hexagon, ia64, parisc, 142# score and xtensa), the Linux buildsystem tries to call the 143# cross-compiler, although it is not needed at all. 144# This results in seemingly errors like: 145# [...]/scripts/gcc-version.sh: line 26: arc-linux-uclibc-gcc: command not found 146# Those can be safely ignored. 147 148# This step is required to have a separate linux headers location for 149# uClibc building. This way uClibc doesn't modify linux headers on installation 150# of "its" headers 151define LINUX_HEADERS_CONFIGURE_CMDS 152 (cd $(@D); \ 153 $(TARGET_MAKE_ENV) $(MAKE) \ 154 ARCH=$(KERNEL_ARCH) \ 155 HOSTCC="$(HOSTCC)" \ 156 HOSTCFLAGS="$(HOSTCFLAGS)" \ 157 HOSTCXX="$(HOSTCXX)" \ 158 INSTALL_HDR_PATH=$(@D)/usr \ 159 headers_install) 160endef 161 162define LINUX_HEADERS_INSTALL_STAGING_CMDS 163 (cd $(@D); \ 164 $(TARGET_MAKE_ENV) $(MAKE) \ 165 ARCH=$(KERNEL_ARCH) \ 166 HOSTCC="$(HOSTCC)" \ 167 HOSTCFLAGS="$(HOSTCFLAGS)" \ 168 HOSTCXX="$(HOSTCXX)" \ 169 INSTALL_HDR_PATH=$(STAGING_DIR)/usr \ 170 headers_install) 171endef 172 173ifneq ($(BR2_PACKAGE_LINUX_HEADERS_AUTO_VERSION),y) 174ifeq ($(BR2_KERNEL_HEADERS_VERSION)$(BR2_KERNEL_HEADERS_AS_KERNEL)$(BR2_KERNEL_HEADERS_CUSTOM_TARBALL)$(BR2_KERNEL_HEADERS_CUSTOM_GIT)$(BR2_KERNEL_HEADERS_CUSTOM_LOCAL),y) 175# In this case, we must always do a 'loose' test, because they are all 176# custom versions which may be later than what we know right now. 177define LINUX_HEADERS_CHECK_VERSION 178 $(call check_kernel_headers_version,\ 179 $(BUILD_DIR),\ 180 $(STAGING_DIR),\ 181 $(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)),\ 182 loose) 183endef 184LINUX_HEADERS_POST_INSTALL_STAGING_HOOKS += LINUX_HEADERS_CHECK_VERSION 185endif 186endif 187 188$(eval $(generic-package)) 189