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