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