kbuild: add CONFIG_HEADERS_INSTALL and loosen the dependency of samples
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 4 Jun 2019 10:13:59 +0000 (19:13 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sat, 15 Jun 2019 10:57:01 +0000 (19:57 +0900)
Commit 5318321d367c ("samples: disable CONFIG_SAMPLES for UML") used
a big hammer to fix the build errors under the samples/ directory.
Only some samples actually include uapi headers from usr/include.

Introduce CONFIG_HEADERS_INSTALL since 'depends on HEADERS_INSTALL' is
clearer than 'depends on !UML'. If this option is enabled, uapi headers
are installed before starting directory descending.

I added 'depends on HEADERS_INSTALL' to per-sample CONFIG options.
This allows UML to compile some samples.

$ make ARCH=um allmodconfig samples/
  [ snip ]
  CC [M]  samples/configfs/configfs_sample.o
  CC [M]  samples/kfifo/bytestream-example.o
  CC [M]  samples/kfifo/dma-example.o
  CC [M]  samples/kfifo/inttype-example.o
  CC [M]  samples/kfifo/record-example.o
  CC [M]  samples/kobject/kobject-example.o
  CC [M]  samples/kobject/kset-example.o
  CC [M]  samples/trace_events/trace-events-sample.o
  CC [M]  samples/trace_printk/trace-printk.o
  AR      samples/vfio-mdev/built-in.a
  AR      samples/built-in.a

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
12 files changed:
Makefile
arch/arc/configs/tb10x_defconfig
arch/nds32/configs/defconfig
arch/parisc/configs/a500_defconfig
arch/parisc/configs/b180_defconfig
arch/parisc/configs/c3000_defconfig
arch/parisc/configs/default_defconfig
arch/powerpc/configs/ppc6xx_defconfig
arch/s390/configs/debug_defconfig
lib/Kconfig.debug
samples/Kconfig
samples/Makefile

index 4bc9c708bcdd285ec78d57031e4c40c61c0aa23b..f3fd2a5499705c1f0ab9e059c76eddc893597923 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1053,9 +1053,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) ;
@@ -1199,6 +1196,10 @@ headers_check: headers_install
        $(Q)$(MAKE) $(hdr-inst)=include/uapi dst=include HDRCHECK=1
        $(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi dst=include HDRCHECK=1
 
+ifdef CONFIG_HEADERS_INSTALL
+prepare: headers_install
+endif
+
 ifdef CONFIG_HEADERS_CHECK
 all: headers_check
 endif
@@ -1744,7 +1745,6 @@ build-dir = $(patsubst %/,%,$(dir $(build-target)))
 PHONY += /
 /: ./
 
-samples/: headers_install
 %/: prepare FORCE
        $(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir)
 
index 5b5119d2b5d5e51709b5f3450c90a943f9d63b63..dc739bd093e31956782f8b808e60f1f64102b0cb 100644 (file)
@@ -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
index 65ce9259081bdda89b2a783140bd4f7a8d24dd02..40313a63507570b6088ebce45719b04134186fd7 100644 (file)
@@ -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
index a8859496b0b95e902937ccde774579a1a6b60120..3335734bfaddb7bc791ea35722994ee094527e4a 100644 (file)
@@ -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
index 0cae9664bf67fc32f7aa7266f695c077656653fe..07fde5bd697446db4f24c13d4e93a0defea92463 100644 (file)
@@ -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
index 6c29b841735cb4be22e9e62520e77314c46267f2..64d45a8b6ca09298c2accc285e938e74986ab179 100644 (file)
@@ -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
index 6a91cc2623e85d385edad2c11eb9080a56294549..5b877ca34ebf4ba715072566bfb4f6e474ff66c9 100644 (file)
@@ -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
index 7c6baf6df139aaa1764e8e2c24d947e47312d762..463aa3e530848c7d04d1ea7735abb78b8ba5edb2 100644 (file)
@@ -1124,6 +1124,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
index b0920b35f87b8b5a64a983921393d1d21ff75ba3..994e03fad4246a8ddf014df2d3ee742b92139d52 100644 (file)
@@ -586,6 +586,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
index 7cdcb962358cadeb383c2d7fb489f5c22a252e8a..6a6ea4219d1e6a49f6efad19062d9e7d48caf784 100644 (file)
@@ -305,14 +305,23 @@ config DEBUG_FS
 
          If unsure, say N.
 
+config HEADERS_INSTALL
+       bool "Install uapi headers to usr/include"
+       depends on !UML
+       help
+         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 !UML
+       depends on HEADERS_INSTALL
        help
-         This option will extract the user-visible kernel headers when
-         building the 'all' target, 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 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
index d63cc8a3e0df2bcc77790bcfc08e642ac690a414..71b5e833dd9e716d902dc7bc56fb65ade73c7347 100644 (file)
@@ -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
index debf8925f06f4539722f269529c32714ec2c5394..7d6e4ca28d696ac539f1e690eee8d36c8635f917 100644 (file)
@@ -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