xref: /OK3568_Linux_fs/buildroot/package/linux-headers/linux-headers.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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