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