Commit 10b63956 authored by David Howells's avatar David Howells

UAPI: Plumb the UAPI Kbuilds into the user header installation and checking

Plumb the UAPI Kbuilds into the user header installation and checking system.
As the headers are split the entries will be transferred across from the old
Kbuild files to the UAPI Kbuild files.

The changes made in this commit are:

 (1) Exported generated files (of which there are currently four) are moved to
     uapi/ directories under the appropriate generated/ directory, thus we
     get:

	include/generated/uapi/linux/version.h
	arch/x86/include/generated/uapi/asm/unistd_32.h
	arch/x86/include/generated/uapi/asm/unistd_64.h
	arch/x86/include/generated/uapi/asm/unistd_x32.h

     These paths were added to the build as -I flags in a previous patch.

 (2) scripts/Makefile.headersinst is now given the UAPI path to install from
     rather than the old path.

     It then determines the old path from that and includes that Kbuild also
     if it exists, thus permitting the headers to exist in either directory
     during the changeover.

     I also renamed the "install" variable to "installdir" as it refers to a
     directory not the install program.

 (3) scripts/headers_install.pl is altered to take a list of source file paths
     instead of just their names so that the makefile can tell it exactly
     where to find each file.

     For the moment, files can be obtained from one of four places for each
     output directory:

	.../include/uapi/foo/
	.../include/generated/uapi/foo/
	.../include/foo/
	.../include/generated/foo/

     The non-UAPI paths will be dropped later.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: default avatarDave Jones <davej@redhat.com>
parent ec28b7f2
...@@ -447,7 +447,7 @@ asm-generic: ...@@ -447,7 +447,7 @@ asm-generic:
# Detect when mixed targets is specified, and make a second invocation # Detect when mixed targets is specified, and make a second invocation
# of make so .config is not included in this case either (for *config). # of make so .config is not included in this case either (for *config).
version_h := include/generated/linux/version.h version_h := include/generated/uapi/linux/version.h
no-dot-config-targets := clean mrproper distclean \ no-dot-config-targets := clean mrproper distclean \
cscope gtags TAGS tags help %docs check% coccicheck \ cscope gtags TAGS tags help %docs check% coccicheck \
...@@ -908,10 +908,10 @@ headers_install_all: ...@@ -908,10 +908,10 @@ headers_install_all:
PHONY += headers_install PHONY += headers_install
headers_install: __headers headers_install: __headers
$(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/asm/Kbuild),, \ $(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/uapi/asm/Kbuild),, \
$(error Headers not exportable for the $(SRCARCH) architecture)) $(error Headers not exportable for the $(SRCARCH) architecture))
$(Q)$(MAKE) $(hdr-inst)=include $(Q)$(MAKE) $(hdr-inst)=include/uapi
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst) $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst)
PHONY += headers_check_all PHONY += headers_check_all
headers_check_all: headers_install_all headers_check_all: headers_install_all
...@@ -919,8 +919,8 @@ headers_check_all: headers_install_all ...@@ -919,8 +919,8 @@ headers_check_all: headers_install_all
PHONY += headers_check PHONY += headers_check
headers_check: headers_install headers_check: headers_install
$(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1 $(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst) HDRCHECK=1 $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) HDRCHECK=1
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Modules # Modules
......
...@@ -22,7 +22,3 @@ header-y += sigcontext32.h ...@@ -22,7 +22,3 @@ header-y += sigcontext32.h
header-y += ucontext.h header-y += ucontext.h
header-y += vm86.h header-y += vm86.h
header-y += vsyscall.h header-y += vsyscall.h
genhdr-y += unistd_32.h
genhdr-y += unistd_64.h
genhdr-y += unistd_x32.h
out := $(obj)/../include/generated/asm out := $(obj)/../include/generated/asm
uapi := $(obj)/../include/generated/asm uapi := $(obj)/../include/generated/uapi/asm
# Create output directory if not already present # Create output directory if not already present
_dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') \ _dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') \
......
...@@ -20,8 +20,6 @@ header-y += netfilter_ipv6/ ...@@ -20,8 +20,6 @@ header-y += netfilter_ipv6/
header-y += usb/ header-y += usb/
header-y += wimax/ header-y += wimax/
genhdr-y += version.h
ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/a.out.h \ ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/a.out.h \
$(srctree)/include/asm-$(SRCARCH)/a.out.h \ $(srctree)/include/asm-$(SRCARCH)/a.out.h \
$(INSTALL_HDR_PATH)/include/asm-*/a.out.h),) $(INSTALL_HDR_PATH)/include/asm-*/a.out.h),)
......
...@@ -20,3 +20,5 @@ header-y += netfilter_ipv4/ ...@@ -20,3 +20,5 @@ header-y += netfilter_ipv4/
header-y += netfilter_ipv6/ header-y += netfilter_ipv6/
header-y += usb/ header-y += usb/
header-y += wimax/ header-y += wimax/
genhdr-y += version.h
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
# ========================================================================== # ==========================================================================
# called may set destination dir (when installing to asm/) # called may set destination dir (when installing to asm/)
_dst := $(if $(dst),$(dst),$(obj)) _dst := $(or $(destination-y),$(dst),$(obj))
# generated header directory # generated header directory
gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj))) gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj)))
...@@ -16,47 +16,64 @@ gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj))) ...@@ -16,47 +16,64 @@ gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj)))
kbuild-file := $(srctree)/$(obj)/Kbuild kbuild-file := $(srctree)/$(obj)/Kbuild
include $(kbuild-file) include $(kbuild-file)
_dst := $(if $(destination-y),$(destination-y),$(_dst)) old-kbuild-file := $(srctree)/$(subst uapi/,,$(obj))/Kbuild
ifneq ($(wildcard $(old-kbuild-file)),)
include $(old-kbuild-file)
endif
include scripts/Kbuild.include include scripts/Kbuild.include
install := $(INSTALL_HDR_PATH)/$(_dst) installdir := $(INSTALL_HDR_PATH)/$(subst uapi/,,$(_dst))
header-y := $(sort $(header-y)) header-y := $(sort $(header-y))
subdirs := $(patsubst %/,%,$(filter %/, $(header-y))) subdirs := $(patsubst %/,%,$(filter %/, $(header-y)))
header-y := $(filter-out %/, $(header-y)) header-y := $(filter-out %/, $(header-y))
# files used to track state of install/check # files used to track state of install/check
install-file := $(install)/.install install-file := $(installdir)/.install
check-file := $(install)/.check check-file := $(installdir)/.check
# generic-y list all files an architecture uses from asm-generic # generic-y list all files an architecture uses from asm-generic
# Use this to build a list of headers which require a wrapper # Use this to build a list of headers which require a wrapper
wrapper-files := $(filter $(header-y), $(generic-y)) wrapper-files := $(filter $(header-y), $(generic-y))
srcdir := $(srctree)/$(obj)
gendir := $(objtree)/$(gen)
oldsrcdir := $(srctree)/$(subst /uapi,,$(obj))
# all headers files for this dir # all headers files for this dir
header-y := $(filter-out $(generic-y), $(header-y)) header-y := $(filter-out $(generic-y), $(header-y))
all-files := $(header-y) $(genhdr-y) $(wrapper-files) all-files := $(header-y) $(genhdr-y) $(wrapper-files)
input-files := $(addprefix $(srctree)/$(obj)/,$(header-y)) \ output-files := $(addprefix $(installdir)/, $(all-files))
$(addprefix $(objtree)/$(gen)/,$(genhdr-y))
output-files := $(addprefix $(install)/, $(all-files)) input-files := $(foreach hdr, $(header-y), \
$(or \
$(wildcard $(srcdir)/$(hdr)), \
$(wildcard $(oldsrcdir)/$(hdr)), \
$(error Missing UAPI file $(srcdir)/$(hdr)) \
)) \
$(foreach hdr, $(genhdr-y), \
$(or \
$(wildcard $(gendir)/$(hdr)), \
$(error Missing generated UAPI file $(gendir)/$(hdr)) \
))
# Work out what needs to be removed # Work out what needs to be removed
oldheaders := $(patsubst $(install)/%,%,$(wildcard $(install)/*.h)) oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h))
unwanted := $(filter-out $(all-files),$(oldheaders)) unwanted := $(filter-out $(all-files),$(oldheaders))
# Prefix unwanted with full paths to $(INSTALL_HDR_PATH) # Prefix unwanted with full paths to $(INSTALL_HDR_PATH)
unwanted-file := $(addprefix $(install)/, $(unwanted)) unwanted-file := $(addprefix $(installdir)/, $(unwanted))
printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@)) printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
file$(if $(word 2, $(all-files)),s)) file$(if $(word 2, $(all-files)),s))
cmd_install = \ cmd_install = \
$(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \ $(PERL) $< $(installdir) $(SRCARCH) $(input-files); \
$(PERL) $< $(objtree)/$(gen) $(install) $(SRCARCH) $(genhdr-y); \
for F in $(wrapper-files); do \ for F in $(wrapper-files); do \
echo "\#include <asm-generic/$$F>" > $(install)/$$F; \ echo "\#include <asm-generic/$$F>" > $(installdir)/$$F; \
done; \ done; \
touch $@ touch $@
...@@ -67,7 +84,7 @@ quiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files) ...@@ -67,7 +84,7 @@ quiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files)
# Headers list can be pretty long, xargs helps to avoid # Headers list can be pretty long, xargs helps to avoid
# the "Argument list too long" error. # the "Argument list too long" error.
cmd_check = for f in $(all-files); do \ cmd_check = for f in $(all-files); do \
echo "$(install)/$${f}"; done \ echo "$(installdir)/$${f}"; done \
| xargs \ | xargs \
$(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH); \ $(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH); \
touch $@ touch $@
......
...@@ -4,8 +4,7 @@ ...@@ -4,8 +4,7 @@
# user space and copy the files to their destination. # user space and copy the files to their destination.
# #
# Usage: headers_install.pl readdir installdir arch [files...] # Usage: headers_install.pl readdir installdir arch [files...]
# readdir: dir to open files # installdir: dir to install the files to
# installdir: dir to install the files
# arch: current architecture # arch: current architecture
# arch is used to force a reinstallation when the arch # arch is used to force a reinstallation when the arch
# changes because kbuild then detect a command line change. # changes because kbuild then detect a command line change.
...@@ -18,15 +17,18 @@ ...@@ -18,15 +17,18 @@
use strict; use strict;
my ($readdir, $installdir, $arch, @files) = @ARGV; my ($installdir, $arch, @files) = @ARGV;
my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__"; my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__";
foreach my $file (@files) { foreach my $filename (@files) {
my $file = $filename;
$file =~ s!^.*/!!;
my $tmpfile = "$installdir/$file.tmp"; my $tmpfile = "$installdir/$file.tmp";
open(my $in, '<', "$readdir/$file") open(my $in, '<', $filename)
or die "$readdir/$file: $!\n"; or die "$filename: $!\n";
open(my $out, '>', $tmpfile) open(my $out, '>', $tmpfile)
or die "$tmpfile: $!\n"; or die "$tmpfile: $!\n";
while (my $line = <$in>) { while (my $line = <$in>) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment