summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2019-06-30 20:58:40 -0400
committerMasahiro Yamada <yamada.masahiro@socionext.com>2019-07-08 10:13:57 -0400
commitd6fc9fcbaa655cff2d2be05e16867d1918f78b85 (patch)
tree963ee9a8fa175e10b832aa6a5d724ae5acb1f5bd /Makefile
parent1a927fd347ebb3c02046150ee489d4fe4e6b9e81 (diff)
kbuild: compile-test exported headers to ensure they are self-contained
Multiple people have suggested compile-testing UAPI headers to ensure they can be really included from user-space. "make headers_check" is obviously not enough to catch bugs, and we often leak unresolved references to user-space. Use the new header-test-y syntax to implement it. Please note exported headers are compile-tested with a completely different set of compiler flags. The header search path is set to $(objtree)/usr/include since exported headers should not include unexported ones. We use -std=gnu89 for the kernel space since the kernel code highly depends on GNU extensions. On the other hand, UAPI headers should be written in more standardized C, so they are compiled with -std=c90. This will emit errors if C++ style comments, the keyword 'inline', etc. are used. Please use C style comments (/* ... */), '__inline__', etc. in UAPI headers. There is additional compiler requirement to enable this test because many of UAPI headers include <stdlib.h>, <sys/ioctl.h>, <sys/time.h>, etc. directly or indirectly. You cannot use kernel.org pre-built toolchains [1] since they lack <stdlib.h>. I reused CONFIG_CC_CAN_LINK to check the system header availability. The intention is slightly different, but a compiler that can link userspace programs provide system headers. For now, a lot of headers need to be excluded because they cannot be compiled standalone, but this is a good start point. [1] https://mirrors.edge.kernel.org/pub/tools/crosstool/index.html Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile2
1 files changed, 1 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index eb850190b951..fca827bc3f77 100644
--- a/Makefile
+++ b/Makefile
@@ -1378,7 +1378,7 @@ CLEAN_DIRS += $(MODVERDIR) include/ksym
1378CLEAN_FILES += modules.builtin.modinfo 1378CLEAN_FILES += modules.builtin.modinfo
1379 1379
1380# Directories & files removed with 'make mrproper' 1380# Directories & files removed with 'make mrproper'
1381MRPROPER_DIRS += include/config usr/include include/generated \ 1381MRPROPER_DIRS += include/config include/generated \
1382 arch/$(SRCARCH)/include/generated .tmp_objdiff 1382 arch/$(SRCARCH)/include/generated .tmp_objdiff
1383MRPROPER_FILES += .config .config.old .version \ 1383MRPROPER_FILES += .config .config.old .version \
1384 Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ 1384 Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \