linux-brain/usr/include/Makefile

120 lines
3.6 KiB
Makefile
Raw Normal View History

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>
2019-07-01 09:58:40 +09:00
# 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
MLK-24874-6: include: uapi: mxc_asrc: fix the UAPI_HEADER_TEST failure Enable CONFIG_UAPI_HEADER_TEST turns out the following build issues HDRTEST usr/include/linux/mxc_asrc.h In file included from <command-line>:32:0: ./usr/include/linux/mxc_asrc.h:125:2: error: unknown type name ‘snd_pcm_format_t’ snd_pcm_format_t input_format; ^~~~~~~~~~~~~~~~ ./usr/include/linux/mxc_asrc.h:126:2: error: unknown type name ‘snd_pcm_format_t’ snd_pcm_format_t output_format; ^~~~~~~~~~~~~~~~ ./usr/include/linux/mxc_asrc.h:134:2: error: unknown type name ‘uint64_t’ uint64_t supported_in_format; ^~~~~~~~ ./usr/include/linux/mxc_asrc.h:135:2: error: unknown type name ‘uint64_t’ uint64_t supported_out_format; But even add the missing/necessary header file, it finally failed too in the end: HDRTEST usr/include/linux/mxc_asrc.h In file included from ./usr/include/linux/mxc_asrc.h:23:0, from <command-line>:32: ./usr/include/sound/asound.h:459:18: error: field ‘trigger_tstamp’ has incomplete type struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */ ^~~~~~~~~~~~~~ ./usr/include/sound/asound.h:460:18: error: field ‘tstamp’ has incomplete type struct timespec tstamp; /* reference timestamp */ ^~~~~~ ./usr/include/sound/asound.h:469:18: error: field ‘audio_tstamp’ has incomplete type struct timespec audio_tstamp; /* sample counter, wall clock, PHC or on-demand sync'ed */ ^~~~~~~~~~~~ ./usr/include/sound/asound.h:470:18: error: field ‘driver_tstamp’ has incomplete type struct timespec driver_tstamp; /* useful in case reference system tstamp is reported with delay */ ^~~~~~~~~~~~~ ./usr/include/sound/asound.h:472:37: error: invalid application of ‘sizeof’ to incomplete type ‘struct timespec’ unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */ ^~~~~~ ./usr/include/sound/asound.h:479:18: error: field ‘tstamp’ has incomplete type struct timespec tstamp; /* Timestamp */ ^~~~~~ ./usr/include/sound/asound.h:481:18: error: field ‘audio_tstamp’ has incomplete type struct timespec audio_tstamp; /* from sample counter or wall clock */ ^~~~~~~~~~~~ ./usr/include/sound/asound.h:651:18: error: field ‘tstamp’ has incomplete type struct timespec tstamp; /* Timestamp */ ^~~~~~ ./usr/include/sound/asound.h:763:18: error: field ‘tstamp’ has incomplete type struct timespec tstamp; /* Timestamp - last update */ ^~~~~~ ./usr/include/sound/asound.h:813:18: error: field ‘tstamp’ has incomplete type struct timespec tstamp; ^~~~~~ ./usr/include/sound/asound.h:956:18: error: field ‘tstamp’ has incomplete type struct timespec tstamp; ^~~~~~ ./usr/include/sound/asound.h:957:36: error: invalid application of ‘sizeof’ to incomplete type ‘struct timespec’ unsigned char reserved[128-sizeof(struct timespec)]; This is kernel known issue, just like other fixes as the following, put mxc_asrc.h into the skip-list: 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 Signed-off-by: Jason Liu <jason.hui.liu@nxp.com> (cherry picked from commit 4018355af34d9b25ff7bd4d27960d72b8d304e30)
2020-10-09 13:20:52 +09:00
header-test- += linux/mxc_asrc.h
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>
2019-07-01 09:58:40 +09:00
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/elfcore.h
header-test- += linux/errqueue.h
header-test- += linux/fmd/%
header-test- += linux/fmd/integrations/%
header-test- += linux/fmd/Peripherals/%
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>
2019-07-01 09:58:40 +09:00
header-test- += linux/fsmap.h
header-test- += linux/hdlc/ioctl.h
header-test- += linux/ipu.h
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>
2019-07-01 09:58:40 +09:00
header-test- += linux/ivtv.h
header-test- += linux/kexec.h
header-test- += linux/matroxfb.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/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- += 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- += 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),sparc)
header-test- += asm/stat.h
header-test- += asm/uctx.h
header-test- += asm/fbio.h
endif
# asm-generic/*.h is used by asm/*.h, and should not be included directly
header-test- += asm-generic/%
extra-y := $(patsubst $(obj)/%.h,%.hdrtest, $(shell find $(obj) -name '*.h' 2>/dev/null))
quiet_cmd_hdrtest = HDRTEST $<
cmd_hdrtest = \
$(CC) $(c_flags) -S -o /dev/null -x c /dev/null \
$(if $(filter-out $(header-test-), $*.h), -include $<); \
$(PERL) $(srctree)/scripts/headers_check.pl $(obj) $(SRCARCH) $<; \
touch $@
$(obj)/%.hdrtest: $(obj)/%.h FORCE
$(call if_changed_dep,hdrtest)
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>
2019-07-01 09:58:40 +09:00
clean-files += $(filter-out Makefile, $(notdir $(wildcard $(obj)/*)))