Kbuild updates for v5.3
- remove headers_{install,check}_all targets - remove unreasonable 'depends on !UML' from CONFIG_SAMPLES - re-implement 'make headers_install' more cleanly - add new header-test-y syntax to compile-test headers - compile-test exported headers to ensure they are compilable in user-space - compile-test headers under include/ to ensure they are self-contained - remove -Waggregate-return, -Wno-uninitialized, -Wno-unused-value flags - add -Werror=unknown-warning-option for Clang - add 128-bit built-in types support to genksyms - fix missed rebuild of modules.builtin - propagate 'No space left on device' error in fixdep to Make - allow Clang to use its integrated assembler - improve some coccinelle scripts - add a new flag KBUILD_ABS_SRCTREE to request Kbuild to use absolute path for $(srctree). - do not ignore errors when compression utility is missing - misc cleanups -----BEGIN PGP SIGNATURE----- iQJSBAABCgA8FiEEbmPs18K1szRHjPqEPYsBB53g2wYFAl0oxNkeHHlhbWFkYS5t YXNhaGlyb0Bzb2Npb25leHQuY29tAAoJED2LAQed4NsGnhcP/AuM8s+3SYFiLitJ ISbznLFP2Xatq0SPXp5+moez/AMTK6Mm1biPcdo20d+TjVEh4+9F2nq12Ii9U8/D tds9A6G8+Bb28r9GMIVQPdFohijW6ijtDziS31iQnIWyPsP/yx6PKfLAD9F4ca1x 7/4btmu+BOMjtN0NrMWSNz5MM47xUzoWIALL40SV4PzGVXLCQZ2PBNPeSRIk22Jt ynDNPuNsmDWcFfwAE+sLSDrhCHZlwM8rg8rf6jmYdc4LcN4cj0oho5+K1TRyC9mn fO3PT25juFejthxQulxEfyGggnyLM6BNTgPDGcCHSP4nD7mlXA9GcpZICtJOgGGu SlDadMZ0GRMK5zcZ0MF0GQboeyViwsbXgrRcYuXt6cUFWX4P/1SeAQ5Mf4u1EKqf hEbwFXV/g81ht0lFS8gyWkvdpoNPtxGHNPusLjp65C4rc0/48/s+7EE/u8JTPl1g dQTeIOds6XUOkJgqhEfuq+8gfngbjKc9bYhs+ACbkCzBltQdnb6m5aLgk0ODxe8I WbGn0+cQcS9VVwre7E5DnFSVWVOHAG5taiUwj0KDcHB0Jxw9Gvorq9WU1ppHHYH2 XQIFBx7XHdn28d+plS8R23vAPgDgrGdvE5RYK5tNQLhTJ6BbjlZ1n/Tmxzu62scK deG3aCOB13Om7OTzTUh9+C3TC9ZQ =E2Rz -----END PGP SIGNATURE----- Merge tag 'kbuild-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild Pull Kbuild updates from Masahiro Yamada: - remove headers_{install,check}_all targets - remove unreasonable 'depends on !UML' from CONFIG_SAMPLES - re-implement 'make headers_install' more cleanly - add new header-test-y syntax to compile-test headers - compile-test exported headers to ensure they are compilable in user-space - compile-test headers under include/ to ensure they are self-contained - remove -Waggregate-return, -Wno-uninitialized, -Wno-unused-value flags - add -Werror=unknown-warning-option for Clang - add 128-bit built-in types support to genksyms - fix missed rebuild of modules.builtin - propagate 'No space left on device' error in fixdep to Make - allow Clang to use its integrated assembler - improve some coccinelle scripts - add a new flag KBUILD_ABS_SRCTREE to request Kbuild to use absolute path for $(srctree). - do not ignore errors when compression utility is missing - misc cleanups * tag 'kbuild-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (49 commits) kbuild: use -- separater intead of $(filter-out ...) for cc-cross-prefix kbuild: Inform user to pass ARCH= for make mrproper kbuild: fix compression errors getting ignored kbuild: add a flag to force absolute path for srctree kbuild: replace KBUILD_SRCTREE with boolean building_out_of_srctree kbuild: remove src and obj from the top Makefile scripts/tags.sh: remove unused environment variables from comments scripts/tags.sh: drop SUBARCH support for ARM kbuild: compile-test kernel headers to ensure they are self-contained kheaders: include only headers into kheaders_data.tar.xz kheaders: remove meaningless -R option of 'ls' kbuild: support header-test-pattern-y kbuild: do not create wrappers for header-test-y kbuild: compile-test exported headers to ensure they are self-contained init/Kconfig: add CONFIG_CC_CAN_LINK kallsyms: exclude kasan local symbols on s390 kbuild: add more hints about SUBDIRS replacement coccinelle: api/stream_open: treat all wait_.*() calls as blocking coccinelle: put_device: Add a cast to an expression for an assignment coccinelle: put_device: Adjust a message construction ...
This commit is contained in:
commit
39ceda5ce1
|
@ -40,12 +40,5 @@ INSTALL_HDR_PATH indicates where to install the headers. It defaults to
|
|||
An 'include' directory is automatically created inside INSTALL_HDR_PATH and
|
||||
headers are installed in 'INSTALL_HDR_PATH/include'.
|
||||
|
||||
The command "make headers_install_all" exports headers for all architectures
|
||||
simultaneously. (This is mostly of interest to distribution maintainers,
|
||||
who create an architecture-independent tarball from the resulting include
|
||||
directory.) You also can use HDR_ARCH_LIST to specify list of architectures.
|
||||
Remember to provide the appropriate linux/asm directory via "mv" or "ln -s"
|
||||
before building a C library with headers exported this way.
|
||||
|
||||
The kernel header export infrastructure is maintained by David Woodhouse
|
||||
<dwmw2@infradead.org>.
|
||||
|
|
|
@ -200,6 +200,15 @@ The output directory is often set using "O=..." on the commandline.
|
|||
|
||||
The value can be overridden in which case the default value is ignored.
|
||||
|
||||
KBUILD_ABS_SRCTREE
|
||||
--------------------------------------------------
|
||||
Kbuild uses a relative path to point to the tree when possible. For instance,
|
||||
when building in the source tree, the source tree path is '.'
|
||||
|
||||
Setting this flag requests Kbuild to use absolute path to the source tree.
|
||||
There are some useful cases to do so, like when generating tag files with
|
||||
absolute path entries etc.
|
||||
|
||||
KBUILD_SIGN_PIN
|
||||
---------------
|
||||
This variable allows a passphrase or PIN to be passed to the sign-file
|
||||
|
|
|
@ -999,11 +999,7 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
------------------------------------
|
||||
|
||||
The archheaders: rule is used to generate header files that
|
||||
may be installed into user space by "make header_install" or
|
||||
"make headers_install_all". In order to support
|
||||
"make headers_install_all", this target has to be able to run
|
||||
on an unconfigured tree, or a tree configured for another
|
||||
architecture.
|
||||
may be installed into user space by "make header_install".
|
||||
|
||||
It is run before "make archprepare" when run on the
|
||||
architecture itself.
|
||||
|
@ -1140,6 +1136,22 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
In this example, extra-y is used to list object files that
|
||||
shall be built, but shall not be linked as part of built-in.a.
|
||||
|
||||
header-test-y
|
||||
|
||||
header-test-y specifies headers (*.h) in the current directory that
|
||||
should be compile tested to ensure they are self-contained,
|
||||
i.e. compilable as standalone units. If CONFIG_HEADER_TEST is enabled,
|
||||
this builds them as part of extra-y.
|
||||
|
||||
header-test-pattern-y
|
||||
|
||||
This works as a weaker version of header-test-y, and accepts wildcard
|
||||
patterns. The typical usage is:
|
||||
|
||||
header-test-pattern-y += *.h
|
||||
|
||||
This specifies all the files that matches to '*.h' in the current
|
||||
directory, but the files in 'header-test-' are excluded.
|
||||
|
||||
6.7 Commands useful for building a boot image
|
||||
---------------------------------------------
|
||||
|
|
117
Makefile
117
Makefile
|
@ -212,6 +212,13 @@ endif
|
|||
ifdef SUBDIRS
|
||||
$(warning ================= WARNING ================)
|
||||
$(warning 'SUBDIRS' will be removed after Linux 5.3)
|
||||
$(warning )
|
||||
$(warning If you are building an individual subdirectory)
|
||||
$(warning in the kernel tree, you can do like this:)
|
||||
$(warning $$ make path/to/dir/you/want/to/build/)
|
||||
$(warning (Do not forget the trailing slash))
|
||||
$(warning )
|
||||
$(warning If you are building an external module,)
|
||||
$(warning Please use 'M=' or 'KBUILD_EXTMOD' instead)
|
||||
$(warning ==========================================)
|
||||
KBUILD_EXTMOD ?= $(SUBDIRS)
|
||||
|
@ -221,9 +228,12 @@ ifeq ("$(origin M)", "command line")
|
|||
KBUILD_EXTMOD := $(M)
|
||||
endif
|
||||
|
||||
export KBUILD_CHECKSRC KBUILD_EXTMOD
|
||||
|
||||
ifeq ($(abs_srctree),$(abs_objtree))
|
||||
# building in the source tree
|
||||
srctree := .
|
||||
building_out_of_srctree :=
|
||||
else
|
||||
ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
|
||||
# building in a subdirectory of the source tree
|
||||
|
@ -231,22 +241,17 @@ else
|
|||
else
|
||||
srctree := $(abs_srctree)
|
||||
endif
|
||||
|
||||
# TODO:
|
||||
# KBUILD_SRC is only used to distinguish in-tree/out-of-tree build.
|
||||
# Replace it with $(srctree) or something.
|
||||
KBUILD_SRC := $(abs_srctree)
|
||||
building_out_of_srctree := 1
|
||||
endif
|
||||
|
||||
export KBUILD_CHECKSRC KBUILD_EXTMOD KBUILD_SRC
|
||||
ifneq ($(KBUILD_ABS_SRCTREE),)
|
||||
srctree := $(abs_srctree)
|
||||
endif
|
||||
|
||||
objtree := .
|
||||
src := $(srctree)
|
||||
obj := $(objtree)
|
||||
|
||||
VPATH := $(srctree)
|
||||
|
||||
export srctree objtree VPATH
|
||||
export building_out_of_srctree srctree objtree VPATH
|
||||
|
||||
# To make sure we do not include .config for any of the *config targets
|
||||
# catch them early, and hand them over to scripts/kconfig/Makefile
|
||||
|
@ -262,7 +267,7 @@ old_version_h := include/linux/version.h
|
|||
clean-targets := %clean mrproper cleandocs
|
||||
no-dot-config-targets := $(clean-targets) \
|
||||
cscope gtags TAGS tags help% %docs check% coccicheck \
|
||||
$(version_h) headers_% archheaders archscripts \
|
||||
$(version_h) headers headers_% archheaders archscripts \
|
||||
%asm-generic kernelversion %src-pkg
|
||||
no-sync-config-targets := $(no-dot-config-targets) install %install \
|
||||
kernelrelease
|
||||
|
@ -449,7 +454,7 @@ USERINCLUDE := \
|
|||
LINUXINCLUDE := \
|
||||
-I$(srctree)/arch/$(SRCARCH)/include \
|
||||
-I$(objtree)/arch/$(SRCARCH)/include/generated \
|
||||
$(if $(filter .,$(srctree)),,-I$(srctree)/include) \
|
||||
$(if $(building_out_of_srctree),-I$(srctree)/include) \
|
||||
-I$(objtree)/include \
|
||||
$(USERINCLUDE)
|
||||
|
||||
|
@ -510,7 +515,7 @@ PHONY += outputmakefile
|
|||
# At the same time when output Makefile generated, generate .gitignore to
|
||||
# ignore whole output directory
|
||||
outputmakefile:
|
||||
ifneq ($(srctree),.)
|
||||
ifdef building_out_of_srctree
|
||||
$(Q)ln -fsn $(srctree) source
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
|
||||
$(Q)test -e .gitignore || \
|
||||
|
@ -527,7 +532,10 @@ endif
|
|||
ifneq ($(GCC_TOOLCHAIN),)
|
||||
CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN)
|
||||
endif
|
||||
ifeq ($(shell $(AS) --version 2>&1 | head -n 1 | grep clang),)
|
||||
CLANG_FLAGS += -no-integrated-as
|
||||
endif
|
||||
CLANG_FLAGS += -Werror=unknown-warning-option
|
||||
KBUILD_CFLAGS += $(CLANG_FLAGS)
|
||||
KBUILD_AFLAGS += $(CLANG_FLAGS)
|
||||
export CLANG_FLAGS
|
||||
|
@ -608,6 +616,7 @@ ifeq ($(KBUILD_EXTMOD),)
|
|||
init-y := init/
|
||||
drivers-y := drivers/ sound/
|
||||
drivers-$(CONFIG_SAMPLES) += samples/
|
||||
drivers-$(CONFIG_KERNEL_HEADER_TEST) += include/
|
||||
net-y := net/
|
||||
libs-y := lib/
|
||||
core-y := usr/
|
||||
|
@ -1053,9 +1062,6 @@ vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
|
|||
|
||||
targets := vmlinux
|
||||
|
||||
# Some samples need headers_install.
|
||||
samples: headers_install
|
||||
|
||||
# The actual objects are generated when descending,
|
||||
# make sure no implicit rule kicks in
|
||||
$(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
|
||||
|
@ -1096,12 +1102,12 @@ PHONY += prepare archprepare prepare1 prepare3
|
|||
# and if so do:
|
||||
# 1) Check that make has not been executed in the kernel src $(srctree)
|
||||
prepare3: include/config/kernel.release
|
||||
ifneq ($(srctree),.)
|
||||
ifdef building_out_of_srctree
|
||||
@$(kecho) ' Using $(srctree) as source for kernel'
|
||||
$(Q)if [ -f $(srctree)/.config -o \
|
||||
-d $(srctree)/include/config -o \
|
||||
-d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
|
||||
echo >&2 " $(srctree) is not clean, please run 'make mrproper'"; \
|
||||
echo >&2 " $(srctree) is not clean, please run 'make ARCH=$(ARCH) mrproper'"; \
|
||||
echo >&2 " in the '$(srctree)' directory.";\
|
||||
/bin/false; \
|
||||
fi;
|
||||
|
@ -1181,39 +1187,44 @@ headerdep:
|
|||
#Default location for installed headers
|
||||
export INSTALL_HDR_PATH = $(objtree)/usr
|
||||
|
||||
# If we do an all arch process set dst to include/arch-$(SRCARCH)
|
||||
hdr-dst = $(if $(KBUILD_HEADERS), dst=include/arch-$(SRCARCH), dst=include)
|
||||
quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
|
||||
cmd_headers_install = \
|
||||
mkdir -p $(INSTALL_HDR_PATH); \
|
||||
rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
|
||||
usr/include $(INSTALL_HDR_PATH)
|
||||
|
||||
PHONY += headers_install
|
||||
headers_install: headers
|
||||
$(call cmd,headers_install)
|
||||
|
||||
PHONY += archheaders archscripts
|
||||
|
||||
PHONY += __headers
|
||||
__headers: $(version_h) scripts_basic uapi-asm-generic archheaders archscripts
|
||||
$(Q)$(MAKE) $(build)=scripts build_unifdef
|
||||
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
|
||||
|
||||
PHONY += headers_install_all
|
||||
headers_install_all:
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/headers.sh install
|
||||
|
||||
PHONY += headers_install
|
||||
headers_install: __headers
|
||||
PHONY += headers
|
||||
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
|
||||
$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
|
||||
$(error Headers not exportable for the $(SRCARCH) architecture))
|
||||
$(Q)$(MAKE) $(hdr-inst)=include/uapi dst=include
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi $(hdr-dst)
|
||||
|
||||
PHONY += headers_check_all
|
||||
headers_check_all: headers_install_all
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/headers.sh check
|
||||
$(Q)$(MAKE) $(hdr-inst)=include/uapi
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
|
||||
|
||||
PHONY += headers_check
|
||||
headers_check: headers_install
|
||||
$(Q)$(MAKE) $(hdr-inst)=include/uapi dst=include HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi $(hdr-dst) HDRCHECK=1
|
||||
headers_check: headers
|
||||
$(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi HDRCHECK=1
|
||||
|
||||
ifdef CONFIG_HEADERS_INSTALL
|
||||
prepare: headers
|
||||
endif
|
||||
|
||||
ifdef CONFIG_HEADERS_CHECK
|
||||
all: headers_check
|
||||
endif
|
||||
|
||||
PHONY += scripts_unifdef
|
||||
scripts_unifdef: scripts_basic
|
||||
$(Q)$(MAKE) $(build)=scripts scripts/unifdef
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Kernel selftest
|
||||
|
||||
|
@ -1283,18 +1294,24 @@ all: modules
|
|||
# using awk while concatenating to the final file.
|
||||
|
||||
PHONY += modules
|
||||
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
|
||||
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
|
||||
modules: $(if $(KBUILD_BUILTIN),vmlinux) modules.order modules.builtin
|
||||
@$(kecho) ' Building modules, stage 2.';
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh
|
||||
|
||||
modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
|
||||
$(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin
|
||||
modules.order: $(vmlinux-dirs)
|
||||
$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(vmlinux-dirs)) > $@
|
||||
|
||||
%/modules.builtin: include/config/auto.conf include/config/tristate.conf
|
||||
$(Q)$(MAKE) $(modbuiltin)=$*
|
||||
modbuiltin-dirs := $(addprefix _modbuiltin_, $(vmlinux-dirs))
|
||||
|
||||
modules.builtin: $(modbuiltin-dirs)
|
||||
$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(vmlinux-dirs)) > $@
|
||||
|
||||
PHONY += $(modbuiltin-dirs)
|
||||
# tristate.conf is not included from this Makefile. Add it as a prerequisite
|
||||
# here to make it self-healing in case somebody accidentally removes it.
|
||||
$(modbuiltin-dirs): include/config/tristate.conf
|
||||
$(Q)$(MAKE) $(modbuiltin)=$(patsubst _modbuiltin_%,%,$@)
|
||||
|
||||
# Target to prepare building external modules
|
||||
PHONY += modules_prepare
|
||||
|
@ -1360,7 +1377,7 @@ CLEAN_DIRS += $(MODVERDIR) include/ksym
|
|||
CLEAN_FILES += modules.builtin.modinfo
|
||||
|
||||
# Directories & files removed with 'make mrproper'
|
||||
MRPROPER_DIRS += include/config usr/include include/generated \
|
||||
MRPROPER_DIRS += include/config include/generated \
|
||||
arch/$(SRCARCH)/include/generated .tmp_objdiff
|
||||
MRPROPER_FILES += .config .config.old .version \
|
||||
Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
|
||||
|
@ -1551,7 +1568,7 @@ $(DOC_TARGETS): scripts_basic FORCE
|
|||
# ---------------------------------------------------------------------------
|
||||
|
||||
PHONY += scripts_gdb
|
||||
scripts_gdb: prepare
|
||||
scripts_gdb: prepare0
|
||||
$(Q)$(MAKE) $(build)=scripts/gdb
|
||||
$(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
|
||||
|
||||
|
@ -1698,7 +1715,7 @@ CHECKSTACK_ARCH := $(ARCH)
|
|||
endif
|
||||
checkstack:
|
||||
$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
|
||||
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
||||
$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
||||
|
||||
kernelrelease:
|
||||
@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
||||
|
@ -1717,11 +1734,11 @@ endif
|
|||
|
||||
tools/: FORCE
|
||||
$(Q)mkdir -p $(objtree)/tools
|
||||
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(src)/tools/
|
||||
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/
|
||||
|
||||
tools/%: FORCE
|
||||
$(Q)mkdir -p $(objtree)/tools
|
||||
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(src)/tools/ $*
|
||||
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*
|
||||
|
||||
# Single targets
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -1755,8 +1772,6 @@ build-dir = $(patsubst %/,%,$(dir $(build-target)))
|
|||
PHONY += /
|
||||
/: ./
|
||||
|
||||
# Make sure the latest headers are built for Documentation
|
||||
Documentation/ samples/: headers_install
|
||||
%/: prepare FORCE
|
||||
$(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir)
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ ifdef CONFIG_ARC_CURR_IN_REG
|
|||
# any kernel headers, and missing the r25 global register
|
||||
# Can't do unconditionally because of recursive include issues
|
||||
# due to <linux/thread_info.h>
|
||||
LINUXINCLUDE += -include ${src}/arch/arc/include/asm/current.h
|
||||
LINUXINCLUDE += -include $(srctree)/arch/arc/include/asm/current.h
|
||||
endif
|
||||
|
||||
cflags-y += -fsection-anchors
|
||||
|
|
|
@ -94,6 +94,7 @@ CONFIG_CONFIGFS_FS=y
|
|||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_STRIP_ASM_SYMS=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
|
|
|
@ -92,6 +92,7 @@ CONFIG_DEBUG_INFO=y
|
|||
CONFIG_DEBUG_INFO_DWARF4=y
|
||||
CONFIG_GDB_SCRIPTS=y
|
||||
CONFIG_READABLE_ASM=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
|
|
|
@ -120,8 +120,8 @@ PALO := $(shell if (which palo 2>&1); then : ; \
|
|||
elif [ -x /sbin/palo ]; then echo /sbin/palo; \
|
||||
fi)
|
||||
|
||||
PALOCONF := $(shell if [ -f $(src)/palo.conf ]; then echo $(src)/palo.conf; \
|
||||
else echo $(obj)/palo.conf; \
|
||||
PALOCONF := $(shell if [ -f $(srctree)/palo.conf ]; then echo $(srctree)/palo.conf; \
|
||||
else echo $(objtree)/palo.conf; \
|
||||
fi)
|
||||
|
||||
palo lifimage: vmlinuz
|
||||
|
@ -131,8 +131,8 @@ palo lifimage: vmlinuz
|
|||
false; \
|
||||
fi
|
||||
@if test ! -f "$(PALOCONF)"; then \
|
||||
cp $(src)/arch/parisc/defpalo.conf $(obj)/palo.conf; \
|
||||
echo 'A generic palo config file ($(obj)/palo.conf) has been created for you.'; \
|
||||
cp $(srctree)/arch/parisc/defpalo.conf $(objtree)/palo.conf; \
|
||||
echo 'A generic palo config file ($(objree)/palo.conf) has been created for you.'; \
|
||||
echo 'You should check it and re-run "make palo".'; \
|
||||
echo 'WARNING: the "lifimage" file is now placed in this directory by default!'; \
|
||||
false; \
|
||||
|
@ -162,10 +162,10 @@ vmlinuz: vmlinux
|
|||
endif
|
||||
|
||||
install:
|
||||
$(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
|
||||
$(CONFIG_SHELL) $(srctree)/arch/parisc/install.sh \
|
||||
$(KERNELRELEASE) vmlinux System.map "$(INSTALL_PATH)"
|
||||
zinstall:
|
||||
$(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
|
||||
$(CONFIG_SHELL) $(srctree)/arch/parisc/install.sh \
|
||||
$(KERNELRELEASE) vmlinuz System.map "$(INSTALL_PATH)"
|
||||
|
||||
CLEAN_FILES += lifimage
|
||||
|
|
|
@ -166,6 +166,7 @@ CONFIG_NLS_ISO8859_1=m
|
|||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
|
|
|
@ -90,6 +90,7 @@ CONFIG_NLS_ASCII=m
|
|||
CONFIG_NLS_ISO8859_1=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
|
|
|
@ -139,6 +139,7 @@ CONFIG_NLS_ISO8859_1=m
|
|||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
|
|
|
@ -183,6 +183,7 @@ CONFIG_NLS_KOI8_R=m
|
|||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
|
|
|
@ -1123,6 +1123,7 @@ CONFIG_NLS_KOI8_R=m
|
|||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_UNUSED_SYMBOLS=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
|
|
|
@ -588,6 +588,7 @@ CONFIG_GDB_SCRIPTS=y
|
|||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_READABLE_ASM=y
|
||||
CONFIG_UNUSED_SYMBOLS=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
|
|
|
@ -73,7 +73,7 @@ KBUILD_AFLAGS += $(ARCH_INCLUDE)
|
|||
USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -I%,,$(KBUILD_CFLAGS))) \
|
||||
$(ARCH_INCLUDE) $(MODE_INCLUDE) $(filter -I%,$(CFLAGS)) \
|
||||
-D_FILE_OFFSET_BITS=64 -idirafter $(srctree)/include \
|
||||
-idirafter $(obj)/include -D__KERNEL__ -D__UM_HOST__
|
||||
-idirafter $(objtree)/include -D__KERNEL__ -D__UM_HOST__
|
||||
|
||||
#This will adjust *FLAGS accordingly to the platform.
|
||||
include $(ARCH_DIR)/Makefile-os-$(OS)
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
header_test_*.c
|
|
@ -2,7 +2,7 @@
|
|||
# Copyright © 2019 Intel Corporation
|
||||
|
||||
# Test the headers are compilable as standalone units
|
||||
header_test := \
|
||||
header-test-$(CONFIG_DRM_I915_WERROR) := \
|
||||
i915_active_types.h \
|
||||
i915_gem_context_types.h \
|
||||
i915_priolist_types.h \
|
||||
|
@ -35,13 +35,3 @@ header_test := \
|
|||
intel_sprite.h \
|
||||
intel_tv.h \
|
||||
intel_workarounds_types.h
|
||||
|
||||
quiet_cmd_header_test = HDRTEST $@
|
||||
cmd_header_test = echo "\#include \"$(<F)\"" > $@
|
||||
|
||||
header_test_%.c: %.h
|
||||
$(call cmd,header_test)
|
||||
|
||||
i915-$(CONFIG_DRM_I915_WERROR) += $(foreach h,$(header_test),$(patsubst %.h,header_test_%.o,$(h)))
|
||||
|
||||
clean-files += $(foreach h,$(header_test),$(patsubst %.h,header_test_%.c,$(h)))
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,14 +1,14 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
ifeq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/a.out.h),)
|
||||
no-export-headers += a.out.h
|
||||
no-export-headers += linux/a.out.h
|
||||
endif
|
||||
|
||||
ifeq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/kvm.h),)
|
||||
no-export-headers += kvm.h
|
||||
no-export-headers += linux/kvm.h
|
||||
endif
|
||||
|
||||
ifeq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/kvm_para.h),)
|
||||
ifeq ($(wildcard $(objtree)/arch/$(SRCARCH)/include/generated/uapi/asm/kvm_para.h),)
|
||||
no-export-headers += kvm_para.h
|
||||
no-export-headers += linux/kvm_para.h
|
||||
endif
|
||||
endif
|
33
init/Kconfig
33
init/Kconfig
|
@ -24,6 +24,9 @@ config CLANG_VERSION
|
|||
int
|
||||
default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
|
||||
|
||||
config CC_CAN_LINK
|
||||
def_bool $(success,$(srctree)/scripts/cc-can-link.sh $(CC))
|
||||
|
||||
config CC_HAS_ASM_GOTO
|
||||
def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC))
|
||||
|
||||
|
@ -96,6 +99,36 @@ config COMPILE_TEST
|
|||
here. If you are a user/distributor, say N here to exclude useless
|
||||
drivers to be distributed.
|
||||
|
||||
config HEADER_TEST
|
||||
bool "Compile test headers that should be standalone compilable"
|
||||
help
|
||||
Compile test headers listed in header-test-y target to ensure they are
|
||||
self-contained, i.e. compilable as standalone units.
|
||||
|
||||
If you are a developer or tester and want to ensure the requested
|
||||
headers are self-contained, say Y here. Otherwise, choose N.
|
||||
|
||||
config KERNEL_HEADER_TEST
|
||||
bool "Compile test kernel headers"
|
||||
depends on HEADER_TEST
|
||||
help
|
||||
Headers in include/ are used to build external moduls.
|
||||
Compile test them to ensure they are self-contained, i.e.
|
||||
compilable as standalone units.
|
||||
|
||||
If you are a developer or tester and want to ensure the headers
|
||||
in include/ are self-contained, say Y here. Otherwise, choose N.
|
||||
|
||||
config UAPI_HEADER_TEST
|
||||
bool "Compile test UAPI headers"
|
||||
depends on HEADER_TEST && HEADERS_INSTALL && CC_CAN_LINK
|
||||
help
|
||||
Compile test headers exported to user-space to ensure they are
|
||||
self-contained, i.e. compilable as standalone units.
|
||||
|
||||
If you are a developer or tester and want to ensure the exported
|
||||
headers are self-contained, say Y here. Otherwise, choose N.
|
||||
|
||||
config LOCALVERSION
|
||||
string "Local version - append to kernel release"
|
||||
help
|
||||
|
|
|
@ -4,24 +4,12 @@
|
|||
# This script generates an archive consisting of kernel headers
|
||||
# for CONFIG_IKHEADERS.
|
||||
set -e
|
||||
spath="$(dirname "$(readlink -f "$0")")"
|
||||
kroot="$spath/.."
|
||||
sfile="$(readlink -f "$0")"
|
||||
outdir="$(pwd)"
|
||||
tarfile=$1
|
||||
cpio_dir=$outdir/$tarfile.tmp
|
||||
|
||||
# Script filename relative to the kernel source root
|
||||
# We add it to the archive because it is small and any changes
|
||||
# to this script will also cause a rebuild of the archive.
|
||||
sfile="$(realpath --relative-to $kroot "$(readlink -f "$0")")"
|
||||
|
||||
src_file_list="
|
||||
include/
|
||||
arch/$SRCARCH/include/
|
||||
$sfile
|
||||
"
|
||||
|
||||
obj_file_list="
|
||||
dir_list="
|
||||
include/
|
||||
arch/$SRCARCH/include/
|
||||
"
|
||||
|
@ -33,33 +21,29 @@ arch/$SRCARCH/include/
|
|||
# Uncomment it for debugging.
|
||||
# if [ ! -f /tmp/iter ]; then iter=1; echo 1 > /tmp/iter;
|
||||
# else iter=$(($(cat /tmp/iter) + 1)); echo $iter > /tmp/iter; fi
|
||||
# find $src_file_list -type f | xargs ls -lR > /tmp/src-ls-$iter
|
||||
# find $obj_file_list -type f | xargs ls -lR > /tmp/obj-ls-$iter
|
||||
# find $src_file_list -name "*.h" | xargs ls -l > /tmp/src-ls-$iter
|
||||
# find $obj_file_list -name "*.h" | xargs ls -l > /tmp/obj-ls-$iter
|
||||
|
||||
# include/generated/compile.h is ignored because it is touched even when none
|
||||
# of the source files changed. This causes pointless regeneration, so let us
|
||||
# ignore them for md5 calculation.
|
||||
pushd $kroot > /dev/null
|
||||
src_files_md5="$(find $src_file_list -type f |
|
||||
pushd $srctree > /dev/null
|
||||
src_files_md5="$(find $dir_list -name "*.h" |
|
||||
grep -v "include/generated/compile.h" |
|
||||
grep -v "include/generated/autoconf.h" |
|
||||
grep -v "include/config/auto.conf" |
|
||||
grep -v "include/config/auto.conf.cmd" |
|
||||
grep -v "include/config/tristate.conf" |
|
||||
xargs ls -lR | md5sum | cut -d ' ' -f1)"
|
||||
xargs ls -l | md5sum | cut -d ' ' -f1)"
|
||||
popd > /dev/null
|
||||
obj_files_md5="$(find $obj_file_list -type f |
|
||||
obj_files_md5="$(find $dir_list -name "*.h" |
|
||||
grep -v "include/generated/compile.h" |
|
||||
grep -v "include/generated/autoconf.h" |
|
||||
grep -v "include/config/auto.conf" |
|
||||
grep -v "include/config/auto.conf.cmd" |
|
||||
grep -v "include/config/tristate.conf" |
|
||||
xargs ls -lR | md5sum | cut -d ' ' -f1)"
|
||||
|
||||
xargs ls -l | md5sum | cut -d ' ' -f1)"
|
||||
# Any changes to this script will also cause a rebuild of the archive.
|
||||
this_file_md5="$(ls -l $sfile | md5sum | cut -d ' ' -f1)"
|
||||
if [ -f $tarfile ]; then tarfile_md5="$(md5sum $tarfile | cut -d ' ' -f1)"; fi
|
||||
if [ -f kernel/kheaders.md5 ] &&
|
||||
[ "$(cat kernel/kheaders.md5|head -1)" == "$src_files_md5" ] &&
|
||||
[ "$(cat kernel/kheaders.md5|head -2|tail -1)" == "$obj_files_md5" ] &&
|
||||
[ "$(cat kernel/kheaders.md5|head -3|tail -1)" == "$this_file_md5" ] &&
|
||||
[ "$(cat kernel/kheaders.md5|tail -1)" == "$tarfile_md5" ]; then
|
||||
exit
|
||||
fi
|
||||
|
@ -71,16 +55,16 @@ fi
|
|||
rm -rf $cpio_dir
|
||||
mkdir $cpio_dir
|
||||
|
||||
pushd $kroot > /dev/null
|
||||
for f in $src_file_list;
|
||||
do find "$f" ! -name "*.cmd" ! -name ".*";
|
||||
pushd $srctree > /dev/null
|
||||
for f in $dir_list;
|
||||
do find "$f" -name "*.h";
|
||||
done | cpio --quiet -pd $cpio_dir
|
||||
popd > /dev/null
|
||||
|
||||
# The second CPIO can complain if files already exist which can
|
||||
# happen with out of tree builds. Just silence CPIO for now.
|
||||
for f in $obj_file_list;
|
||||
do find "$f" ! -name "*.cmd" ! -name ".*";
|
||||
for f in $dir_list;
|
||||
do find "$f" -name "*.h";
|
||||
done | cpio --quiet -pd $cpio_dir >/dev/null 2>&1
|
||||
|
||||
# Remove comments except SDPX lines
|
||||
|
@ -91,6 +75,7 @@ tar -Jcf $tarfile -C $cpio_dir/ . > /dev/null
|
|||
|
||||
echo "$src_files_md5" > kernel/kheaders.md5
|
||||
echo "$obj_files_md5" >> kernel/kheaders.md5
|
||||
echo "$this_file_md5" >> kernel/kheaders.md5
|
||||
echo "$(md5sum $tarfile | cut -d ' ' -f1)" >> kernel/kheaders.md5
|
||||
|
||||
rm -rf $cpio_dir
|
||||
|
|
|
@ -305,19 +305,26 @@ config DEBUG_FS
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config HEADERS_CHECK
|
||||
bool "Run 'make headers_check' when building vmlinux"
|
||||
config HEADERS_INSTALL
|
||||
bool "Install uapi headers to usr/include"
|
||||
depends on !UML
|
||||
help
|
||||
This option will extract the user-visible kernel headers whenever
|
||||
building the kernel, and will run basic sanity checks on them to
|
||||
ensure that exported files do not attempt to include files which
|
||||
were not exported, etc.
|
||||
This option will install uapi headers (headers exported to user-space)
|
||||
into the usr/include directory for use during the kernel build.
|
||||
This is unneeded for building the kernel itself, but needed for some
|
||||
user-space program samples. It is also needed by some features such
|
||||
as uapi header sanity checks.
|
||||
|
||||
config HEADERS_CHECK
|
||||
bool "Run sanity checks on uapi headers when building 'all'"
|
||||
depends on HEADERS_INSTALL
|
||||
help
|
||||
This option will run basic sanity checks on uapi headers when
|
||||
building the 'all' target, for example, ensure that they do not
|
||||
attempt to include files which were not exported, etc.
|
||||
|
||||
If you're making modifications to header files which are
|
||||
relevant for userspace, say 'Y', and check the headers
|
||||
exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in
|
||||
your build tree), to make sure they're suitable.
|
||||
relevant for userspace, say 'Y'.
|
||||
|
||||
config OPTIMIZE_INLINING
|
||||
bool "Allow compiler to uninline functions marked 'inline'"
|
||||
|
|
|
@ -12,9 +12,6 @@ raid6_pq-$(CONFIG_S390) += s390vx8.o recov_s390xc.o
|
|||
|
||||
hostprogs-y += mktables
|
||||
|
||||
quiet_cmd_unroll = UNROLL $@
|
||||
cmd_unroll = $(AWK) -f$(srctree)/$(src)/unroll.awk -vN=$(UNROLL) < $< > $@
|
||||
|
||||
ifeq ($(CONFIG_ALTIVEC),y)
|
||||
altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
|
||||
|
||||
|
@ -26,7 +23,6 @@ CFLAGS_REMOVE_altivec1.o += -msoft-float
|
|||
CFLAGS_REMOVE_altivec2.o += -msoft-float
|
||||
CFLAGS_REMOVE_altivec4.o += -msoft-float
|
||||
CFLAGS_REMOVE_altivec8.o += -msoft-float
|
||||
CFLAGS_REMOVE_altivec8.o += -msoft-float
|
||||
CFLAGS_REMOVE_vpermxor1.o += -msoft-float
|
||||
CFLAGS_REMOVE_vpermxor2.o += -msoft-float
|
||||
CFLAGS_REMOVE_vpermxor4.o += -msoft-float
|
||||
|
@ -51,111 +47,39 @@ CFLAGS_REMOVE_neon8.o += -mgeneral-regs-only
|
|||
endif
|
||||
endif
|
||||
|
||||
targets += int1.c
|
||||
$(obj)/int1.c: UNROLL := 1
|
||||
$(obj)/int1.c: $(src)/int.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
quiet_cmd_unroll = UNROLL $@
|
||||
cmd_unroll = $(AWK) -f$(srctree)/$(src)/unroll.awk -vN=$* < $< > $@
|
||||
|
||||
targets += int2.c
|
||||
$(obj)/int2.c: UNROLL := 2
|
||||
$(obj)/int2.c: $(src)/int.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
targets += int4.c
|
||||
$(obj)/int4.c: UNROLL := 4
|
||||
$(obj)/int4.c: $(src)/int.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
targets += int8.c
|
||||
$(obj)/int8.c: UNROLL := 8
|
||||
$(obj)/int8.c: $(src)/int.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
targets += int16.c
|
||||
$(obj)/int16.c: UNROLL := 16
|
||||
$(obj)/int16.c: $(src)/int.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
targets += int32.c
|
||||
$(obj)/int32.c: UNROLL := 32
|
||||
$(obj)/int32.c: $(src)/int.uc $(src)/unroll.awk FORCE
|
||||
targets += int1.c int2.c int4.c int8.c int16.c int32.c
|
||||
$(obj)/int%.c: $(src)/int.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_altivec1.o += $(altivec_flags)
|
||||
targets += altivec1.c
|
||||
$(obj)/altivec1.c: UNROLL := 1
|
||||
$(obj)/altivec1.c: $(src)/altivec.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_altivec2.o += $(altivec_flags)
|
||||
targets += altivec2.c
|
||||
$(obj)/altivec2.c: UNROLL := 2
|
||||
$(obj)/altivec2.c: $(src)/altivec.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_altivec4.o += $(altivec_flags)
|
||||
targets += altivec4.c
|
||||
$(obj)/altivec4.c: UNROLL := 4
|
||||
$(obj)/altivec4.c: $(src)/altivec.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_altivec8.o += $(altivec_flags)
|
||||
targets += altivec8.c
|
||||
$(obj)/altivec8.c: UNROLL := 8
|
||||
$(obj)/altivec8.c: $(src)/altivec.uc $(src)/unroll.awk FORCE
|
||||
targets += altivec1.c altivec2.c altivec4.c altivec8.c
|
||||
$(obj)/altivec%.c: $(src)/altivec.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_vpermxor1.o += $(altivec_flags)
|
||||
targets += vpermxor1.c
|
||||
$(obj)/vpermxor1.c: UNROLL := 1
|
||||
$(obj)/vpermxor1.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_vpermxor2.o += $(altivec_flags)
|
||||
targets += vpermxor2.c
|
||||
$(obj)/vpermxor2.c: UNROLL := 2
|
||||
$(obj)/vpermxor2.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_vpermxor4.o += $(altivec_flags)
|
||||
targets += vpermxor4.c
|
||||
$(obj)/vpermxor4.c: UNROLL := 4
|
||||
$(obj)/vpermxor4.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_vpermxor8.o += $(altivec_flags)
|
||||
targets += vpermxor8.c
|
||||
$(obj)/vpermxor8.c: UNROLL := 8
|
||||
$(obj)/vpermxor8.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
|
||||
targets += vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
|
||||
$(obj)/vpermxor%.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_neon1.o += $(NEON_FLAGS)
|
||||
targets += neon1.c
|
||||
$(obj)/neon1.c: UNROLL := 1
|
||||
$(obj)/neon1.c: $(src)/neon.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_neon2.o += $(NEON_FLAGS)
|
||||
targets += neon2.c
|
||||
$(obj)/neon2.c: UNROLL := 2
|
||||
$(obj)/neon2.c: $(src)/neon.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_neon4.o += $(NEON_FLAGS)
|
||||
targets += neon4.c
|
||||
$(obj)/neon4.c: UNROLL := 4
|
||||
$(obj)/neon4.c: $(src)/neon.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
CFLAGS_neon8.o += $(NEON_FLAGS)
|
||||
targets += neon8.c
|
||||
$(obj)/neon8.c: UNROLL := 8
|
||||
$(obj)/neon8.c: $(src)/neon.uc $(src)/unroll.awk FORCE
|
||||
targets += neon1.c neon2.c neon4.c neon8.c
|
||||
$(obj)/neon%.c: $(src)/neon.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
targets += s390vx8.c
|
||||
$(obj)/s390vx8.c: UNROLL := 8
|
||||
$(obj)/s390vx8.c: $(src)/s390vx.uc $(src)/unroll.awk FORCE
|
||||
$(obj)/s390vx%.c: $(src)/s390vx.uc $(src)/unroll.awk FORCE
|
||||
$(call if_changed,unroll)
|
||||
|
||||
quiet_cmd_mktable = TABLE $@
|
||||
|
|
|
@ -9,7 +9,7 @@ menuconfig BPFILTER
|
|||
if BPFILTER
|
||||
config BPFILTER_UMH
|
||||
tristate "bpfilter kernel module with user mode helper"
|
||||
depends on $(success,$(srctree)/scripts/cc-can-link.sh $(CC))
|
||||
depends on CC_CAN_LINK
|
||||
default m
|
||||
help
|
||||
This builds bpfilter kernel module with embedded user mode helper
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
menuconfig SAMPLES
|
||||
bool "Sample kernel code"
|
||||
depends on !UML
|
||||
help
|
||||
You can build and test sample kernel code here.
|
||||
|
||||
|
@ -95,16 +94,24 @@ config SAMPLE_CONFIGFS
|
|||
|
||||
config SAMPLE_CONNECTOR
|
||||
tristate "Build connector sample -- loadable modules only"
|
||||
depends on CONNECTOR && m
|
||||
depends on CONNECTOR && HEADERS_INSTALL && m
|
||||
help
|
||||
When enabled, this builds both a sample kernel module for
|
||||
the connector interface and a user space tool to communicate
|
||||
with it.
|
||||
See also Documentation/connector/connector.txt
|
||||
|
||||
config SAMPLE_HIDRAW
|
||||
bool "hidraw sample"
|
||||
depends on HEADERS_INSTALL
|
||||
|
||||
config SAMPLE_PIDFD
|
||||
bool "pidfd sample"
|
||||
depends on HEADERS_INSTALL
|
||||
|
||||
config SAMPLE_SECCOMP
|
||||
bool "Build seccomp sample code"
|
||||
depends on SECCOMP_FILTER
|
||||
depends on SECCOMP_FILTER && HEADERS_INSTALL
|
||||
help
|
||||
Build samples of seccomp filters using various methods of
|
||||
BPF filter construction.
|
||||
|
@ -156,6 +163,7 @@ config SAMPLE_ANDROID_BINDERFS
|
|||
|
||||
config SAMPLE_VFS
|
||||
bool "Build example programs that use new VFS system calls"
|
||||
depends on HEADERS_INSTALL
|
||||
help
|
||||
Build example userspace programs that use new VFS system calls such
|
||||
as mount API and statx(). Note that this is restricted to the x86
|
||||
|
|
|
@ -4,14 +4,14 @@
|
|||
obj-$(CONFIG_SAMPLE_ANDROID_BINDERFS) += binderfs/
|
||||
obj-$(CONFIG_SAMPLE_CONFIGFS) += configfs/
|
||||
obj-$(CONFIG_SAMPLE_CONNECTOR) += connector/
|
||||
subdir-y += hidraw
|
||||
subdir-$(CONFIG_SAMPLE_HIDRAW) += hidraw
|
||||
obj-$(CONFIG_SAMPLE_HW_BREAKPOINT) += hw_breakpoint/
|
||||
obj-$(CONFIG_SAMPLE_KDB) += kdb/
|
||||
obj-$(CONFIG_SAMPLE_KFIFO) += kfifo/
|
||||
obj-$(CONFIG_SAMPLE_KOBJECT) += kobject/
|
||||
obj-$(CONFIG_SAMPLE_KPROBES) += kprobes/
|
||||
obj-$(CONFIG_SAMPLE_LIVEPATCH) += livepatch/
|
||||
subdir-y += pidfd
|
||||
subdir-$(CONFIG_SAMPLE_PIDFD) += pidfd
|
||||
obj-$(CONFIG_SAMPLE_QMI_CLIENT) += qmi/
|
||||
obj-$(CONFIG_SAMPLE_RPMSG_CLIENT) += rpmsg/
|
||||
subdir-$(CONFIG_SAMPLE_SECCOMP) += seccomp
|
||||
|
|
|
@ -79,8 +79,8 @@ endef
|
|||
# would try to directly execute the shell builtin 'command'. This workaround
|
||||
# should be kept for a long time since this issue was fixed only after the
|
||||
# GNU Make 4.2.1 release.
|
||||
cc-cross-prefix = $(firstword $(foreach c, $(filter-out -%, $(1)), \
|
||||
$(if $(shell command -v $(c)gcc 2>/dev/null), $(c))))
|
||||
cc-cross-prefix = $(firstword $(foreach c, $(1), \
|
||||
$(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c))))
|
||||
|
||||
# output directory for tests below
|
||||
TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
|
||||
|
@ -187,12 +187,6 @@ dtbinst := -f $(srctree)/scripts/Makefile.dtbinst obj
|
|||
# $(Q)$(MAKE) $(clean)=dir
|
||||
clean := -f $(srctree)/scripts/Makefile.clean obj
|
||||
|
||||
###
|
||||
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.headersinst obj=
|
||||
# Usage:
|
||||
# $(Q)$(MAKE) $(hdr-inst)=dir
|
||||
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
|
||||
|
||||
# echo command.
|
||||
# Short version is used, if $(quiet) equals `quiet_', otherwise full one.
|
||||
echo-cmd = $(if $($(quiet)cmd_$(1)),\
|
||||
|
@ -213,12 +207,12 @@ objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o)))
|
|||
# See Documentation/kbuild/makefiles.rst for more info
|
||||
|
||||
ifneq ($(KBUILD_NOCMDDEP),1)
|
||||
# Check if both arguments are the same including their order. Result is empty
|
||||
# Check if both commands are the same including their order. Result is empty
|
||||
# string if equal. User may override this check using make KBUILD_NOCMDDEP=1
|
||||
arg-check = $(filter-out $(subst $(space),$(space_escape),$(strip $(cmd_$@))), \
|
||||
cmd-check = $(filter-out $(subst $(space),$(space_escape),$(strip $(cmd_$@))), \
|
||||
$(subst $(space),$(space_escape),$(strip $(cmd_$1))))
|
||||
else
|
||||
arg-check = $(if $(strip $(cmd_$@)),,1)
|
||||
cmd-check = $(if $(strip $(cmd_$@)),,1)
|
||||
endif
|
||||
|
||||
# Replace >$< with >$$< to preserve $ when reloading the .cmd file
|
||||
|
@ -231,15 +225,15 @@ make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1))))
|
|||
|
||||
# Find any prerequisites that is newer than target or that does not exist.
|
||||
# PHONY targets skipped in both cases.
|
||||
any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
|
||||
any-prereq = $(filter-out $(PHONY),$?)$(filter-out $(PHONY) $(wildcard $^),$^)
|
||||
|
||||
# Execute command if command has changed or prerequisite(s) are updated.
|
||||
if_changed = $(if $(strip $(any-prereq) $(arg-check)), \
|
||||
if_changed = $(if $(any-prereq)$(cmd-check), \
|
||||
$(cmd); \
|
||||
printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
|
||||
|
||||
# Execute the command and also postprocess generated .d dependencies file.
|
||||
if_changed_dep = $(if $(strip $(any-prereq) $(arg-check)),$(cmd_and_fixdep),@:)
|
||||
if_changed_dep = $(if $(any-prereq)$(cmd-check),$(cmd_and_fixdep),@:)
|
||||
|
||||
cmd_and_fixdep = \
|
||||
$(cmd); \
|
||||
|
@ -249,7 +243,7 @@ cmd_and_fixdep = \
|
|||
# Usage: $(call if_changed_rule,foo)
|
||||
# Will check if $(cmd_foo) or any of the prerequisites changed,
|
||||
# and if so will execute $(rule_foo).
|
||||
if_changed_rule = $(if $(strip $(any-prereq) $(arg-check)),$(rule_$(1)),@:)
|
||||
if_changed_rule = $(if $(any-prereq)$(cmd-check),$(rule_$(1)),@:)
|
||||
|
||||
###
|
||||
# why - tell why a target got built
|
||||
|
@ -274,8 +268,8 @@ ifeq ($(KBUILD_VERBOSE),2)
|
|||
why = \
|
||||
$(if $(filter $@, $(PHONY)),- due to target is PHONY, \
|
||||
$(if $(wildcard $@), \
|
||||
$(if $(strip $(any-prereq)),- due to: $(any-prereq), \
|
||||
$(if $(arg-check), \
|
||||
$(if $(any-prereq),- due to: $(any-prereq), \
|
||||
$(if $(cmd-check), \
|
||||
$(if $(cmd_$@),- due to command line change, \
|
||||
$(if $(filter $@, $(targets)), \
|
||||
- due to missing .cmd file, \
|
||||
|
|
|
@ -31,11 +31,6 @@ always := $(hostprogs-y) $(hostprogs-m)
|
|||
# The following hostprogs-y programs are only build on demand
|
||||
hostprogs-y += unifdef
|
||||
|
||||
# These targets are used internally to avoid "is up to date" messages
|
||||
PHONY += build_unifdef
|
||||
build_unifdef: $(obj)/unifdef
|
||||
@:
|
||||
|
||||
subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
|
||||
subdir-$(CONFIG_MODVERSIONS) += genksyms
|
||||
subdir-$(CONFIG_SECURITY_SELINUX) += selinux
|
||||
|
|
|
@ -294,6 +294,15 @@ quiet_cmd_cc_lst_c = MKLST $@
|
|||
$(obj)/%.lst: $(src)/%.c FORCE
|
||||
$(call if_changed_dep,cc_lst_c)
|
||||
|
||||
# header test (header-test-y target)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
quiet_cmd_cc_s_h = CC $@
|
||||
cmd_cc_s_h = $(CC) $(c_flags) -S -o $@ -x c /dev/null -include $<
|
||||
|
||||
$(obj)/%.h.s: $(src)/%.h FORCE
|
||||
$(call if_changed_dep,cc_s_h)
|
||||
|
||||
# Compile assembler sources (.S)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
@ -504,7 +513,7 @@ existing-targets := $(wildcard $(sort $(targets)))
|
|||
|
||||
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
|
||||
|
||||
ifneq ($(srctree),.)
|
||||
ifdef building_out_of_srctree
|
||||
# Create directories for object files if they do not exist
|
||||
obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets))))
|
||||
# If targets exist, their directories apparently exist. Skip mkdir.
|
||||
|
|
|
@ -34,7 +34,6 @@ warning-1 += $(call cc-option, -Wstringop-truncation)
|
|||
warning-1 += -Wno-missing-field-initializers
|
||||
warning-1 += -Wno-sign-compare
|
||||
|
||||
warning-2 := -Waggregate-return
|
||||
warning-2 += -Wcast-align
|
||||
warning-2 += -Wdisabled-optimization
|
||||
warning-2 += -Wnested-externs
|
||||
|
@ -68,10 +67,8 @@ else
|
|||
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
KBUILD_CFLAGS += -Wno-initializer-overrides
|
||||
KBUILD_CFLAGS += -Wno-unused-value
|
||||
KBUILD_CFLAGS += -Wno-format
|
||||
KBUILD_CFLAGS += -Wno-sign-compare
|
||||
KBUILD_CFLAGS += -Wno-format-zero-length
|
||||
KBUILD_CFLAGS += -Wno-uninitialized
|
||||
endif
|
||||
endif
|
||||
|
|
|
@ -14,109 +14,89 @@ __headers:
|
|||
|
||||
include scripts/Kbuild.include
|
||||
|
||||
srcdir := $(srctree)/$(obj)
|
||||
src := $(srctree)/$(obj)
|
||||
gen := $(objtree)/$(subst include/,include/generated/,$(obj))
|
||||
dst := usr/include
|
||||
|
||||
# When make is run under a fakechroot environment, the function
|
||||
# $(wildcard $(srcdir)/*/.) doesn't only return directories, but also regular
|
||||
# files. So, we are using a combination of sort/dir/wildcard which works
|
||||
# with fakechroot.
|
||||
subdirs := $(patsubst $(srcdir)/%/,%,\
|
||||
$(filter-out $(srcdir)/,\
|
||||
$(sort $(dir $(wildcard $(srcdir)/*/)))))
|
||||
-include $(src)/Kbuild
|
||||
|
||||
# Recursion
|
||||
__headers: $(subdirs)
|
||||
# $(filter %/, ...) is a workaround for GNU Make <= 4.2.1, where
|
||||
# $(wildcard $(src)/*/) contains not only directories but also regular files.
|
||||
src-subdirs := $(patsubst $(src)/%/,%,$(filter %/, $(wildcard $(src)/*/)))
|
||||
gen-subdirs := $(patsubst $(gen)/%/,%,$(filter %/, $(wildcard $(gen)/*/)))
|
||||
all-subdirs := $(sort $(src-subdirs) $(gen-subdirs))
|
||||
|
||||
PHONY += $(subdirs)
|
||||
$(subdirs):
|
||||
$(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(dst)/$@
|
||||
src-headers := $(if $(src-subdirs), $(shell cd $(src) && find $(src-subdirs) -name '*.h'))
|
||||
src-headers := $(filter-out $(no-export-headers), $(src-headers))
|
||||
gen-headers := $(if $(gen-subdirs), $(shell cd $(gen) && find $(gen-subdirs) -name '*.h'))
|
||||
gen-headers := $(filter-out $(no-export-headers), $(gen-headers))
|
||||
|
||||
# Skip header install/check for include/uapi and arch/$(SRCARCH)/include/uapi.
|
||||
# We have only sub-directories there.
|
||||
skip-inst := $(if $(filter %/uapi,$(obj)),1)
|
||||
# If the same header is exported from source and generated directories,
|
||||
# the former takes precedence, but this should be warned.
|
||||
duplicated := $(filter $(gen-headers), $(src-headers))
|
||||
$(if $(duplicated), $(warning duplicated header export: $(duplicated)))
|
||||
|
||||
ifeq ($(skip-inst),)
|
||||
gen-headers := $(filter-out $(duplicated), $(gen-headers))
|
||||
|
||||
# Kbuild file is optional
|
||||
kbuild-file := $(srctree)/$(obj)/Kbuild
|
||||
-include $(kbuild-file)
|
||||
|
||||
installdir := $(INSTALL_HDR_PATH)/$(dst)
|
||||
gendir := $(objtree)/$(subst include/,include/generated/,$(obj))
|
||||
header-files := $(notdir $(wildcard $(srcdir)/*.h))
|
||||
header-files := $(filter-out $(no-export-headers), $(header-files))
|
||||
genhdr-files := $(notdir $(wildcard $(gendir)/*.h))
|
||||
genhdr-files := $(filter-out $(header-files), $(genhdr-files))
|
||||
|
||||
# files used to track state of install/check
|
||||
install-file := $(installdir)/.install
|
||||
check-file := $(installdir)/.check
|
||||
|
||||
# all headers files for this dir
|
||||
all-files := $(header-files) $(genhdr-files)
|
||||
output-files := $(addprefix $(installdir)/, $(all-files))
|
||||
# Add dst path prefix
|
||||
all-subdirs := $(addprefix $(dst)/, $(all-subdirs))
|
||||
src-headers := $(addprefix $(dst)/, $(src-headers))
|
||||
gen-headers := $(addprefix $(dst)/, $(gen-headers))
|
||||
all-headers := $(src-headers) $(gen-headers)
|
||||
|
||||
# Work out what needs to be removed
|
||||
oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h))
|
||||
unwanted := $(filter-out $(all-files),$(oldheaders))
|
||||
old-subdirs := $(wildcard $(all-subdirs))
|
||||
old-headers := $(if $(old-subdirs),$(shell find $(old-subdirs) -name '*.h'))
|
||||
unwanted := $(filter-out $(all-headers), $(old-headers))
|
||||
|
||||
# Prefix unwanted with full paths to $(INSTALL_HDR_PATH)
|
||||
unwanted-file := $(addprefix $(installdir)/, $(unwanted))
|
||||
# Create directories
|
||||
existing-dirs := $(sort $(dir $(old-headers)))
|
||||
wanted-dirs := $(sort $(dir $(all-headers)))
|
||||
new-dirs := $(filter-out $(existing-dirs), $(wanted-dirs))
|
||||
$(if $(new-dirs), $(shell mkdir -p $(new-dirs)))
|
||||
|
||||
printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
|
||||
|
||||
quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
|
||||
file$(if $(word 2, $(all-files)),s))
|
||||
cmd_install = \
|
||||
$(CONFIG_SHELL) $< $(installdir) $(srcdir) $(header-files); \
|
||||
$(CONFIG_SHELL) $< $(installdir) $(gendir) $(genhdr-files); \
|
||||
touch $@
|
||||
|
||||
quiet_cmd_remove = REMOVE $(unwanted)
|
||||
cmd_remove = rm -f $(unwanted-file)
|
||||
|
||||
quiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files)
|
||||
# Headers list can be pretty long, xargs helps to avoid
|
||||
# the "Argument list too long" error.
|
||||
cmd_check = for f in $(all-files); do \
|
||||
echo "$(installdir)/$${f}"; done \
|
||||
| xargs \
|
||||
$(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH); \
|
||||
touch $@
|
||||
# Rules
|
||||
|
||||
ifndef HDRCHECK
|
||||
# Rules for installing headers
|
||||
__headers: $(install-file)
|
||||
@:
|
||||
|
||||
targets += $(install-file)
|
||||
$(install-file): scripts/headers_install.sh \
|
||||
$(addprefix $(srcdir)/,$(header-files)) \
|
||||
$(addprefix $(gendir)/,$(genhdr-files)) FORCE
|
||||
$(if $(unwanted),$(call cmd,remove),)
|
||||
$(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
|
||||
quiet_cmd_install = HDRINST $@
|
||||
cmd_install = $(CONFIG_SHELL) $(srctree)/scripts/headers_install.sh $< $@
|
||||
|
||||
$(src-headers): $(dst)/%.h: $(src)/%.h $(srctree)/scripts/headers_install.sh FORCE
|
||||
$(call if_changed,install)
|
||||
|
||||
else
|
||||
__headers: $(check-file)
|
||||
$(gen-headers): $(dst)/%.h: $(gen)/%.h $(srctree)/scripts/headers_install.sh FORCE
|
||||
$(call if_changed,install)
|
||||
|
||||
quiet_cmd_remove = REMOVE $(unwanted)
|
||||
cmd_remove = rm -f $(unwanted)
|
||||
|
||||
__headers: $(all-headers)
|
||||
ifneq ($(unwanted),)
|
||||
$(call cmd,remove)
|
||||
endif
|
||||
@:
|
||||
|
||||
targets += $(check-file)
|
||||
$(check-file): scripts/headers_check.pl $(output-files) FORCE
|
||||
$(call if_changed,check)
|
||||
existing-headers := $(filter $(old-headers), $(all-headers))
|
||||
|
||||
-include $(foreach f,$(existing-headers),$(dir $(f)).$(notdir $(f)).cmd)
|
||||
|
||||
else
|
||||
|
||||
quiet_cmd_check = HDRCHK $<
|
||||
cmd_check = $(PERL) $(srctree)/scripts/headers_check.pl $(dst) $(SRCARCH) $<; touch $@
|
||||
|
||||
check-files := $(addsuffix .chk, $(all-headers))
|
||||
|
||||
$(check-files): $(dst)/%.chk : $(dst)/% $(srctree)/scripts/headers_check.pl
|
||||
$(call cmd,check)
|
||||
|
||||
__headers: $(check-files)
|
||||
@:
|
||||
|
||||
endif
|
||||
|
||||
cmd_files := $(wildcard \
|
||||
$(foreach f,$(sort $(targets)),$(dir $(f)).$(notdir $(f)).cmd))
|
||||
|
||||
ifneq ($(cmd_files),)
|
||||
include $(cmd_files)
|
||||
endif
|
||||
|
||||
endif # skip-inst
|
||||
|
||||
PHONY += FORCE
|
||||
FORCE: ;
|
||||
FORCE:
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
|
|
@ -69,7 +69,7 @@ _hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
|
|||
|
||||
# $(objtree)/$(obj) for including generated headers from checkin source files
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
ifneq ($(srctree),.)
|
||||
ifdef building_out_of_srctree
|
||||
_hostc_flags += -I $(objtree)/$(obj)
|
||||
_hostcxx_flags += -I $(objtree)/$(obj)
|
||||
endif
|
||||
|
|
|
@ -66,6 +66,20 @@ extra-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y))
|
|||
extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-))
|
||||
endif
|
||||
|
||||
# Test self-contained headers
|
||||
|
||||
# Wildcard searches in $(srctree)/$(src)/, but not in $(objtree)/$(obj)/.
|
||||
# Stale generated headers are often left over, so pattern matching should
|
||||
# be avoided. Please notice $(srctree)/$(src)/ and $(objtree)/$(obj) point
|
||||
# to the same location for in-tree building. So, header-test-pattern-y should
|
||||
# be used with care.
|
||||
header-test-y += $(filter-out $(header-test-), \
|
||||
$(patsubst $(srctree)/$(src)/%, %, \
|
||||
$(wildcard $(addprefix $(srctree)/$(src)/, \
|
||||
$(header-test-pattern-y)))))
|
||||
|
||||
extra-$(CONFIG_HEADER_TEST) += $(addsuffix .s, $(header-test-y))
|
||||
|
||||
# Add subdir path
|
||||
|
||||
extra-y := $(addprefix $(obj)/,$(extra-y))
|
||||
|
@ -140,7 +154,7 @@ endif
|
|||
# $(srctree)/$(src) for including checkin headers from generated source files
|
||||
# $(objtree)/$(obj) for including generated headers from checkin source files
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
ifneq ($(srctree),.)
|
||||
ifdef building_out_of_srctree
|
||||
_c_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
|
||||
_a_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
|
||||
_cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
|
||||
|
@ -331,19 +345,19 @@ printf "%08x\n" $$dec_size | \
|
|||
)
|
||||
|
||||
quiet_cmd_bzip2 = BZIP2 $@
|
||||
cmd_bzip2 = { cat $(real-prereqs) | bzip2 -9 && $(size_append); } > $@
|
||||
cmd_bzip2 = { cat $(real-prereqs) | bzip2 -9; $(size_append); } > $@
|
||||
|
||||
# Lzma
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
quiet_cmd_lzma = LZMA $@
|
||||
cmd_lzma = { cat $(real-prereqs) | lzma -9 && $(size_append); } > $@
|
||||
cmd_lzma = { cat $(real-prereqs) | lzma -9; $(size_append); } > $@
|
||||
|
||||
quiet_cmd_lzo = LZO $@
|
||||
cmd_lzo = { cat $(real-prereqs) | lzop -9 && $(size_append); } > $@
|
||||
cmd_lzo = { cat $(real-prereqs) | lzop -9; $(size_append); } > $@
|
||||
|
||||
quiet_cmd_lz4 = LZ4 $@
|
||||
cmd_lz4 = { cat $(real-prereqs) | lz4c -l -c1 stdin stdout && \
|
||||
cmd_lz4 = { cat $(real-prereqs) | lz4c -l -c1 stdin stdout; \
|
||||
$(size_append); } > $@
|
||||
|
||||
# U-Boot mkimage
|
||||
|
@ -386,7 +400,7 @@ quiet_cmd_uimage = UIMAGE $@
|
|||
# big dictionary would increase the memory usage too much in the multi-call
|
||||
# decompression mode. A BCJ filter isn't used either.
|
||||
quiet_cmd_xzkern = XZKERN $@
|
||||
cmd_xzkern = { cat $(real-prereqs) | sh $(srctree)/scripts/xz_wrap.sh && \
|
||||
cmd_xzkern = { cat $(real-prereqs) | sh $(srctree)/scripts/xz_wrap.sh; \
|
||||
$(size_append); } > $@
|
||||
|
||||
quiet_cmd_xzmisc = XZMISC $@
|
||||
|
|
|
@ -15,7 +15,7 @@ include include/config/tristate.conf
|
|||
|
||||
include scripts/Kbuild.include
|
||||
|
||||
ifneq ($(srctree),.)
|
||||
ifdef building_out_of_srctree
|
||||
# Create output directory if not already present
|
||||
_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
|
||||
endif
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
@ -109,6 +110,36 @@ static void usage(void)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* In the intended usage of this program, the stdout is redirected to .*.cmd
|
||||
* files. The return value of printf() and putchar() must be checked to catch
|
||||
* any error, e.g. "No space left on device".
|
||||
*/
|
||||
static void xprintf(const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
va_start(ap, format);
|
||||
ret = vprintf(format, ap);
|
||||
if (ret < 0) {
|
||||
perror("fixdep");
|
||||
exit(1);
|
||||
}
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
static void xputchar(int c)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = putchar(c);
|
||||
if (ret == EOF) {
|
||||
perror("fixdep");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Print out a dependency path from a symbol name
|
||||
*/
|
||||
|
@ -116,7 +147,7 @@ static void print_dep(const char *m, int slen, const char *dir)
|
|||
{
|
||||
int c, prev_c = '/', i;
|
||||
|
||||
printf(" $(wildcard %s/", dir);
|
||||
xprintf(" $(wildcard %s/", dir);
|
||||
for (i = 0; i < slen; i++) {
|
||||
c = m[i];
|
||||
if (c == '_')
|
||||
|
@ -124,10 +155,10 @@ static void print_dep(const char *m, int slen, const char *dir)
|
|||
else
|
||||
c = tolower(c);
|
||||
if (c != '/' || prev_c != '/')
|
||||
putchar(c);
|
||||
xputchar(c);
|
||||
prev_c = c;
|
||||
}
|
||||
printf(".h) \\\n");
|
||||
xprintf(".h) \\\n");
|
||||
}
|
||||
|
||||
struct item {
|
||||
|
@ -324,13 +355,13 @@ static void parse_dep_file(char *m, const char *target)
|
|||
*/
|
||||
if (!saw_any_target) {
|
||||
saw_any_target = 1;
|
||||
printf("source_%s := %s\n\n",
|
||||
target, m);
|
||||
printf("deps_%s := \\\n", target);
|
||||
xprintf("source_%s := %s\n\n",
|
||||
target, m);
|
||||
xprintf("deps_%s := \\\n", target);
|
||||
}
|
||||
is_first_dep = 0;
|
||||
} else {
|
||||
printf(" %s \\\n", m);
|
||||
xprintf(" %s \\\n", m);
|
||||
}
|
||||
|
||||
buf = read_file(m);
|
||||
|
@ -353,8 +384,8 @@ static void parse_dep_file(char *m, const char *target)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
printf("\n%s: $(deps_%s)\n\n", target, target);
|
||||
printf("$(deps_%s):\n", target);
|
||||
xprintf("\n%s: $(deps_%s)\n\n", target, target);
|
||||
xprintf("$(deps_%s):\n", target);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
|
@ -369,7 +400,7 @@ int main(int argc, char *argv[])
|
|||
target = argv[2];
|
||||
cmdline = argv[3];
|
||||
|
||||
printf("cmd_%s := %s\n\n", target, cmdline);
|
||||
xprintf("cmd_%s := %s\n\n", target, cmdline);
|
||||
|
||||
buf = read_file(depfile);
|
||||
parse_dep_file(buf, target);
|
||||
|
|
|
@ -77,7 +77,7 @@ p1 << r1.p1;
|
|||
p2 << r1.p2;
|
||||
@@
|
||||
|
||||
cocci.print_main("WARNING opportunity for kstrdep",p1)
|
||||
cocci.print_main("WARNING opportunity for kstrdup",p1)
|
||||
cocci.print_secs("strcpy",p2)
|
||||
|
||||
@script:python depends on org@
|
||||
|
@ -85,7 +85,7 @@ p1 << r2.p1;
|
|||
p2 << r2.p2;
|
||||
@@
|
||||
|
||||
cocci.print_main("WARNING opportunity for kstrdep",p1)
|
||||
cocci.print_main("WARNING opportunity for kstrdup",p1)
|
||||
cocci.print_secs("memcpy",p2)
|
||||
|
||||
@script:python depends on report@
|
||||
|
@ -93,7 +93,7 @@ p1 << r1.p1;
|
|||
p2 << r1.p2;
|
||||
@@
|
||||
|
||||
msg = "WARNING opportunity for kstrdep (strcpy on line %s)" % (p2[0].line)
|
||||
msg = "WARNING opportunity for kstrdup (strcpy on line %s)" % (p2[0].line)
|
||||
coccilib.report.print_report(p1[0], msg)
|
||||
|
||||
@script:python depends on report@
|
||||
|
@ -101,5 +101,5 @@ p1 << r2.p1;
|
|||
p2 << r2.p2;
|
||||
@@
|
||||
|
||||
msg = "WARNING opportunity for kstrdep (memcpy on line %s)" % (p2[0].line)
|
||||
msg = "WARNING opportunity for kstrdup (memcpy on line %s)" % (p2[0].line)
|
||||
coccilib.report.print_report(p1[0], msg)
|
||||
|
|
|
@ -35,11 +35,11 @@ type loff_t;
|
|||
// a function that blocks
|
||||
@ blocks @
|
||||
identifier block_f;
|
||||
identifier wait_event =~ "^wait_event_.*";
|
||||
identifier wait =~ "^wait_.*";
|
||||
@@
|
||||
block_f(...) {
|
||||
... when exists
|
||||
wait_event(...)
|
||||
wait(...)
|
||||
... when exists
|
||||
}
|
||||
|
||||
|
@ -49,12 +49,12 @@ identifier wait_event =~ "^wait_event_.*";
|
|||
// XXX currently reader_blocks supports only direct and 1-level indirect cases.
|
||||
@ reader_blocks_direct @
|
||||
identifier stream_reader.readstream;
|
||||
identifier wait_event =~ "^wait_event_.*";
|
||||
identifier wait =~ "^wait_.*";
|
||||
@@
|
||||
readstream(...)
|
||||
{
|
||||
... when exists
|
||||
wait_event(...)
|
||||
wait(...)
|
||||
... when exists
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ if (id == NULL || ...) { ... return ...; }
|
|||
when != of_dev_put(id)
|
||||
when != if (id) { ... put_device(&id->dev) ... }
|
||||
when != e1 = (T)id
|
||||
when != e1 = &id->dev
|
||||
when != e1 = (T)(&id->dev)
|
||||
when != e1 = get_device(&id->dev)
|
||||
when != e1 = (T1)platform_get_drvdata(id)
|
||||
(
|
||||
|
@ -42,11 +42,10 @@ p1 << search.p1;
|
|||
p2 << search.p2;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p2[0], "ERROR: missing put_device; "
|
||||
+ "call of_find_device_by_node on line "
|
||||
+ p1[0].line
|
||||
+ ", but without a corresponding object release "
|
||||
+ "within this function.")
|
||||
coccilib.report.print_report(p2[0],
|
||||
"ERROR: missing put_device; call of_find_device_by_node on line "
|
||||
+ p1[0].line
|
||||
+ ", but without a corresponding object release within this function.")
|
||||
|
||||
@script:python depends on org@
|
||||
p1 << search.p1;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
ifneq ($(srctree),.)
|
||||
ifdef building_out_of_srctree
|
||||
|
||||
symlinks := $(patsubst $(srctree)/$(src)/%,%,$(wildcard $(srctree)/$(src)/*.py))
|
||||
|
||||
|
|
|
@ -25,6 +25,10 @@ static struct resword {
|
|||
{ "__volatile__", VOLATILE_KEYW },
|
||||
{ "__builtin_va_list", VA_LIST_KEYW },
|
||||
|
||||
{ "__int128", BUILTIN_INT_KEYW },
|
||||
{ "__int128_t", BUILTIN_INT_KEYW },
|
||||
{ "__uint128_t", BUILTIN_INT_KEYW },
|
||||
|
||||
// According to rth, c99 defines "_Bool", __restrict", __restrict__", "restrict". KAO
|
||||
{ "_Bool", BOOL_KEYW },
|
||||
{ "_restrict", RESTRICT_KEYW },
|
||||
|
|
|
@ -76,6 +76,7 @@ static void record_compound(struct string_list **keyw,
|
|||
%token ATTRIBUTE_KEYW
|
||||
%token AUTO_KEYW
|
||||
%token BOOL_KEYW
|
||||
%token BUILTIN_INT_KEYW
|
||||
%token CHAR_KEYW
|
||||
%token CONST_KEYW
|
||||
%token DOUBLE_KEYW
|
||||
|
@ -263,6 +264,7 @@ simple_type_specifier:
|
|||
| VOID_KEYW
|
||||
| BOOL_KEYW
|
||||
| VA_LIST_KEYW
|
||||
| BUILTIN_INT_KEYW
|
||||
| TYPE { (*$1)->tag = SYM_TYPEDEF; $$ = $1; }
|
||||
;
|
||||
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Run headers_$1 command for all suitable architectures
|
||||
|
||||
# Stop on error
|
||||
set -e
|
||||
|
||||
do_command()
|
||||
{
|
||||
if [ -f ${srctree}/arch/$2/include/asm/Kbuild ]; then
|
||||
make ARCH=$2 KBUILD_HEADERS=$1 headers_$1
|
||||
else
|
||||
printf "Ignoring arch: %s\n" ${arch}
|
||||
fi
|
||||
}
|
||||
|
||||
archs=${HDR_ARCH_LIST:-$(ls ${srctree}/arch)}
|
||||
|
||||
for arch in ${archs}; do
|
||||
case ${arch} in
|
||||
um) # no userspace export
|
||||
;;
|
||||
*)
|
||||
if [ -d ${srctree}/arch/${arch} ]; then
|
||||
do_command $1 ${arch}
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
|
@ -1,47 +1,39 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
if [ $# -lt 2 ]
|
||||
if [ $# -ne 2 ]
|
||||
then
|
||||
echo "Usage: headers_install.sh OUTDIR SRCDIR [FILES...]"
|
||||
echo "Usage: headers_install.sh INFILE OUTFILE"
|
||||
echo
|
||||
echo "Prepares kernel header files for use by user space, by removing"
|
||||
echo "all compiler.h definitions and #includes, removing any"
|
||||
echo "#ifdef __KERNEL__ sections, and putting __underscores__ around"
|
||||
echo "asm/inline/volatile keywords."
|
||||
echo
|
||||
echo "OUTDIR: directory to write each userspace header FILE to."
|
||||
echo "SRCDIR: source directory where files are picked."
|
||||
echo "FILES: list of header files to operate on."
|
||||
echo "INFILE: header file to operate on"
|
||||
echo "OUTFILE: output file which the processed header is writen to"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Grab arguments
|
||||
INFILE=$1
|
||||
OUTFILE=$2
|
||||
TMPFILE=$OUTFILE.tmp
|
||||
|
||||
OUTDIR="$1"
|
||||
shift
|
||||
SRCDIR="$1"
|
||||
shift
|
||||
trap 'rm -f $OUTFILE $TMPFILE' EXIT
|
||||
|
||||
# Iterate through files listed on command line
|
||||
sed -E -e '
|
||||
s/([[:space:](])(__user|__force|__iomem)[[:space:]]/\1/g
|
||||
s/__attribute_const__([[:space:]]|$)/\1/g
|
||||
s@^#include <linux/compiler(|_types).h>@@
|
||||
s/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g
|
||||
s/(^|[[:space:](])(inline|asm|volatile)([[:space:](]|$)/\1__\2__\3/g
|
||||
s@#(ifndef|define|endif[[:space:]]*/[*])[[:space:]]*_UAPI@#\1 @
|
||||
' $INFILE > $TMPFILE || exit 1
|
||||
|
||||
FILE=
|
||||
trap 'rm -f "$OUTDIR/$FILE" "$OUTDIR/$FILE.sed"' EXIT
|
||||
for i in "$@"
|
||||
do
|
||||
FILE="$(basename "$i")"
|
||||
sed -E \
|
||||
-e 's/([[:space:](])(__user|__force|__iomem)[[:space:]]/\1/g' \
|
||||
-e 's/__attribute_const__([[:space:]]|$)/\1/g' \
|
||||
-e 's@^#include <linux/compiler(|_types).h>@@' \
|
||||
-e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
|
||||
-e 's/(^|[[:space:](])(inline|asm|volatile)([[:space:](]|$)/\1__\2__\3/g' \
|
||||
-e 's@#(ifndef|define|endif[[:space:]]*/[*])[[:space:]]*_UAPI@#\1 @' \
|
||||
"$SRCDIR/$i" > "$OUTDIR/$FILE.sed" || exit 1
|
||||
scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \
|
||||
> "$OUTDIR/$FILE"
|
||||
[ $? -gt 1 ] && exit 1
|
||||
rm -f "$OUTDIR/$FILE.sed"
|
||||
done
|
||||
scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ $TMPFILE > $OUTFILE
|
||||
[ $? -gt 1 ] && exit 1
|
||||
|
||||
rm -f $TMPFILE
|
||||
trap - EXIT
|
||||
|
|
|
@ -150,6 +150,9 @@ static int read_symbol(FILE *in, struct sym_entry *s)
|
|||
/* exclude debugging symbols */
|
||||
else if (stype == 'N' || stype == 'n')
|
||||
return -1;
|
||||
/* exclude s390 kasan local symbols */
|
||||
else if (!strncmp(sym, ".LASANPC", 8))
|
||||
return -1;
|
||||
|
||||
/* include the type field in the symbol name, so that it gets
|
||||
* compressed together */
|
||||
|
|
|
@ -130,7 +130,7 @@ if is_enabled CONFIG_MODULES; then
|
|||
fi
|
||||
|
||||
if [ "$ARCH" != "um" ]; then
|
||||
$MAKE -f $srctree/Makefile headers_check
|
||||
$MAKE -f $srctree/Makefile headers
|
||||
$MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr"
|
||||
fi
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ PROVIDES="$PROVIDES kernel-$KERNELRELEASE"
|
|||
__KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g")
|
||||
EXCLUDES="$RCS_TAR_IGNORE --exclude=.tmp_versions --exclude=*vmlinux* \
|
||||
--exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \
|
||||
--exclude=.config.old --exclude=.missing-syscalls.d"
|
||||
--exclude=.config.old --exclude=.missing-syscalls.d --exclude=*.s"
|
||||
|
||||
# We can label the here-doc lines for conditional output to the spec file
|
||||
#
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# mode may be any of: tags, TAGS, cscope
|
||||
#
|
||||
# Uses the following environment variables:
|
||||
# ARCH, SUBARCH, SRCARCH, srctree, src, obj
|
||||
# SUBARCH, SRCARCH, srctree
|
||||
|
||||
if [ "$KBUILD_VERBOSE" = "1" ]; then
|
||||
set -x
|
||||
|
@ -17,8 +17,7 @@ ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )"
|
|||
# tags and cscope files should also ignore MODVERSION *.mod.c files
|
||||
ignore="$ignore ( -name *.mod.c ) -prune -o"
|
||||
|
||||
# Do not use full path if we do not use O=.. builds
|
||||
# Use make O=. {tags|cscope}
|
||||
# Use make KBUILD_ABS_SRCTREE=1 {tags|cscope}
|
||||
# to force full paths for a non-O= build
|
||||
if [ "${srctree}" = "." -o -z "${srctree}" ]; then
|
||||
tree=
|
||||
|
@ -36,21 +35,19 @@ elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then
|
|||
ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ')
|
||||
fi
|
||||
|
||||
# find sources in arch/$ARCH
|
||||
# find sources in arch/$1
|
||||
find_arch_sources()
|
||||
{
|
||||
for i in $archincludedir; do
|
||||
prune="$prune -wholename $i -prune -o"
|
||||
done
|
||||
find ${tree}arch/$1 $ignore $subarchprune $prune -name "$2" \
|
||||
-not -type l -print;
|
||||
find ${tree}arch/$1 $ignore $prune -name "$2" -not -type l -print;
|
||||
}
|
||||
|
||||
# find sources in arch/$1/include
|
||||
find_arch_include_sources()
|
||||
{
|
||||
include=$(find ${tree}arch/$1/ $subarchprune \
|
||||
-name include -type d -print);
|
||||
include=$(find ${tree}arch/$1/ -name include -type d -print);
|
||||
if [ -n "$include" ]; then
|
||||
archincludedir="$archincludedir $include"
|
||||
find $include $ignore -name "$2" -not -type l -print;
|
||||
|
@ -306,36 +303,6 @@ if [ "${ARCH}" = "um" ]; then
|
|||
else
|
||||
archinclude=${SUBARCH}
|
||||
fi
|
||||
elif [ "${SRCARCH}" = "arm" -a "${SUBARCH}" != "" ]; then
|
||||
subarchdir=$(find ${tree}arch/$SRCARCH/ -name "mach-*" -type d -o \
|
||||
-name "plat-*" -type d);
|
||||
mach_suffix=$SUBARCH
|
||||
plat_suffix=$SUBARCH
|
||||
|
||||
# Special cases when $plat_suffix != $mach_suffix
|
||||
case $mach_suffix in
|
||||
"omap1" | "omap2")
|
||||
plat_suffix="omap"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ ! -d ${tree}arch/$SRCARCH/mach-$mach_suffix ]; then
|
||||
echo "Warning: arch/arm/mach-$mach_suffix/ not found." >&2
|
||||
echo " Fix your \$SUBARCH appropriately" >&2
|
||||
fi
|
||||
|
||||
for i in $subarchdir; do
|
||||
case "$i" in
|
||||
*"mach-"${mach_suffix})
|
||||
;;
|
||||
*"plat-"${plat_suffix})
|
||||
;;
|
||||
*)
|
||||
subarchprune="$subarchprune \
|
||||
-wholename $i -prune -o"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
remove_structs=
|
||||
|
|
|
@ -74,7 +74,7 @@ endif
|
|||
# Append kselftest to KBUILD_OUTPUT to avoid cluttering
|
||||
# KBUILD_OUTPUT with selftest objects and headers installed
|
||||
# by selftests Makefile or lib.mk.
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
ifdef building_out_of_srctree
|
||||
override LDFLAGS =
|
||||
endif
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ define RUN_TESTS
|
|||
endef
|
||||
|
||||
run_tests: all
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
ifdef building_out_of_srctree
|
||||
@if [ "X$(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)" != "X" ]; then
|
||||
@rsync -aq $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(OUTPUT)
|
||||
fi
|
||||
|
@ -125,7 +125,7 @@ clean:
|
|||
# When make O= with kselftest target from main level
|
||||
# the following aren't defined.
|
||||
#
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
ifdef building_out_of_srctree
|
||||
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
|
||||
COMPILE.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
|
||||
LINK.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
|
||||
|
|
|
@ -7,4 +7,3 @@ initramfs_data.cpio.gz
|
|||
initramfs_data.cpio.bz2
|
||||
initramfs_data.cpio.lzma
|
||||
initramfs_list
|
||||
include
|
||||
|
|
|
@ -56,3 +56,5 @@ $(deps_initramfs): klibcdirs
|
|||
$(obj)/$(datafile_y): $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
|
||||
$(Q)$(initramfs) -l $(ramfs-input) > $(obj)/$(datafile_d_y)
|
||||
$(call if_changed,initfs)
|
||||
|
||||
subdir-$(CONFIG_UAPI_HEADER_TEST) += include
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
*
|
||||
!.gitignore
|
||||
!Makefile
|
|
@ -0,0 +1,132 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
# Unlike the kernel space, exported headers are written in standard C.
|
||||
# - Forbid C++ style comments
|
||||
# - Use '__inline__', '__asm__' instead of 'inline', 'asm'
|
||||
#
|
||||
# -std=c90 (equivalent to -ansi) catches the violation of those.
|
||||
# We cannot go as far as adding -Wpedantic since it emits too many warnings.
|
||||
UAPI_CFLAGS := -std=c90 -Wall -Werror=implicit-function-declaration
|
||||
|
||||
override c_flags = $(UAPI_CFLAGS) -Wp,-MD,$(depfile) -I$(objtree)/usr/include
|
||||
|
||||
# The following are excluded for now because they fail to build.
|
||||
#
|
||||
# Do not add a new header to the blacklist without legitimate reason.
|
||||
# Please consider to fix the header first.
|
||||
#
|
||||
# Sorted alphabetically.
|
||||
header-test- += asm/ipcbuf.h
|
||||
header-test- += asm/msgbuf.h
|
||||
header-test- += asm/sembuf.h
|
||||
header-test- += asm/shmbuf.h
|
||||
header-test- += asm/signal.h
|
||||
header-test- += asm/ucontext.h
|
||||
header-test- += drm/vmwgfx_drm.h
|
||||
header-test- += linux/am437x-vpfe.h
|
||||
header-test- += linux/android/binder.h
|
||||
header-test- += linux/android/binderfs.h
|
||||
header-test-$(CONFIG_CPU_BIG_ENDIAN) += linux/byteorder/big_endian.h
|
||||
header-test-$(CONFIG_CPU_LITTLE_ENDIAN) += linux/byteorder/little_endian.h
|
||||
header-test- += linux/coda.h
|
||||
header-test- += linux/coda_psdev.h
|
||||
header-test- += linux/dvb/audio.h
|
||||
header-test- += linux/dvb/osd.h
|
||||
header-test- += linux/elfcore.h
|
||||
header-test- += linux/errqueue.h
|
||||
header-test- += linux/fsmap.h
|
||||
header-test- += linux/hdlc/ioctl.h
|
||||
header-test- += linux/ivtv.h
|
||||
header-test- += linux/jffs2.h
|
||||
header-test- += linux/kexec.h
|
||||
header-test- += linux/matroxfb.h
|
||||
header-test- += linux/netfilter_bridge/ebtables.h
|
||||
header-test- += linux/netfilter_ipv4/ipt_LOG.h
|
||||
header-test- += linux/netfilter_ipv6/ip6t_LOG.h
|
||||
header-test- += linux/nfc.h
|
||||
header-test- += linux/nilfs2_ondisk.h
|
||||
header-test- += linux/omap3isp.h
|
||||
header-test- += linux/omapfb.h
|
||||
header-test- += linux/patchkey.h
|
||||
header-test- += linux/phonet.h
|
||||
header-test- += linux/reiserfs_xattr.h
|
||||
header-test- += linux/scc.h
|
||||
header-test- += linux/sctp.h
|
||||
header-test- += linux/signal.h
|
||||
header-test- += linux/sysctl.h
|
||||
header-test- += linux/usb/audio.h
|
||||
header-test- += linux/v4l2-mediabus.h
|
||||
header-test- += linux/v4l2-subdev.h
|
||||
header-test- += linux/videodev2.h
|
||||
header-test- += linux/vm_sockets.h
|
||||
header-test- += misc/ocxl.h
|
||||
header-test- += mtd/mtd-abi.h
|
||||
header-test- += mtd/mtd-user.h
|
||||
header-test- += scsi/scsi_bsg_fc.h
|
||||
header-test- += scsi/scsi_netlink.h
|
||||
header-test- += scsi/scsi_netlink_fc.h
|
||||
header-test- += sound/asequencer.h
|
||||
header-test- += sound/asoc.h
|
||||
header-test- += sound/asound.h
|
||||
header-test- += sound/compress_offload.h
|
||||
header-test- += sound/emu10k1.h
|
||||
header-test- += sound/sfnt_info.h
|
||||
header-test- += sound/sof/eq.h
|
||||
header-test- += sound/sof/fw.h
|
||||
header-test- += sound/sof/header.h
|
||||
header-test- += sound/sof/manifest.h
|
||||
header-test- += sound/sof/trace.h
|
||||
header-test- += xen/evtchn.h
|
||||
header-test- += xen/gntdev.h
|
||||
header-test- += xen/privcmd.h
|
||||
|
||||
# More headers are broken in some architectures
|
||||
|
||||
ifeq ($(SRCARCH),arc)
|
||||
header-test- += linux/bpf_perf_event.h
|
||||
endif
|
||||
|
||||
ifeq ($(SRCARCH),ia64)
|
||||
header-test- += asm/setup.h
|
||||
header-test- += asm/sigcontext.h
|
||||
header-test- += asm/perfmon.h
|
||||
header-test- += asm/perfmon_default_smpl.h
|
||||
header-test- += linux/if_bonding.h
|
||||
endif
|
||||
|
||||
ifeq ($(SRCARCH),mips)
|
||||
header-test- += asm/stat.h
|
||||
endif
|
||||
|
||||
ifeq ($(SRCARCH),powerpc)
|
||||
header-test- += asm/stat.h
|
||||
header-test- += linux/bpf_perf_event.h
|
||||
endif
|
||||
|
||||
ifeq ($(SRCARCH),riscv)
|
||||
header-test- += linux/bpf_perf_event.h
|
||||
endif
|
||||
|
||||
ifeq ($(SRCARCH),s390)
|
||||
header-test- += asm/runtime_instr.h
|
||||
header-test- += asm/zcrypt.h
|
||||
endif
|
||||
|
||||
ifeq ($(SRCARCH),sparc)
|
||||
header-test- += asm/stat.h
|
||||
header-test- += asm/uctx.h
|
||||
header-test- += asm/fbio.h
|
||||
header-test- += asm/openpromio.h
|
||||
endif
|
||||
|
||||
# asm-generic/*.h is used by asm/*.h, and should not be included directly
|
||||
header-test- += asm-generic/%
|
||||
|
||||
# The rest are compile-tested
|
||||
header-test-y += $(filter-out $(header-test-), \
|
||||
$(patsubst $(obj)/%,%, $(wildcard \
|
||||
$(addprefix $(obj)/, *.h */*.h */*/*.h */*/*/*.h))))
|
||||
|
||||
# For GNU Make <= 4.2.1, $(wildcard $(obj)/*/) matches to not only directories
|
||||
# but also regular files. Use $(filter %/, ...) just in case.
|
||||
clean-dirs += $(patsubst $(obj)/%/,%,$(filter %/, $(wildcard $(obj)/*/)))
|
Loading…
Reference in New Issue