mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 17:23:36 +00:00
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: David Howells <dhowells@redhat.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Acked-by: Dave Jones <davej@redhat.com>
This commit is contained in:
parent
ec28b7f250
commit
10b63956fc
14
Makefile
14
Makefile
@ -447,7 +447,7 @@ asm-generic:
|
||||
# Detect when mixed targets is specified, and make a second invocation
|
||||
# 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 \
|
||||
cscope gtags TAGS tags help %docs check% coccicheck \
|
||||
@ -908,10 +908,10 @@ headers_install_all:
|
||||
|
||||
PHONY += headers_install
|
||||
headers_install: __headers
|
||||
$(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/asm/Kbuild),, \
|
||||
$(error Headers not exportable for the $(SRCARCH) architecture))
|
||||
$(Q)$(MAKE) $(hdr-inst)=include
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst)
|
||||
$(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/uapi/asm/Kbuild),, \
|
||||
$(error Headers not exportable for the $(SRCARCH) architecture))
|
||||
$(Q)$(MAKE) $(hdr-inst)=include/uapi
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst)
|
||||
|
||||
PHONY += headers_check_all
|
||||
headers_check_all: headers_install_all
|
||||
@ -919,8 +919,8 @@ headers_check_all: headers_install_all
|
||||
|
||||
PHONY += headers_check
|
||||
headers_check: headers_install
|
||||
$(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst) HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) HDRCHECK=1
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Modules
|
||||
|
@ -22,7 +22,3 @@ header-y += sigcontext32.h
|
||||
header-y += ucontext.h
|
||||
header-y += vm86.h
|
||||
header-y += vsyscall.h
|
||||
|
||||
genhdr-y += unistd_32.h
|
||||
genhdr-y += unistd_64.h
|
||||
genhdr-y += unistd_x32.h
|
||||
|
@ -1,5 +1,5 @@
|
||||
out := $(obj)/../include/generated/asm
|
||||
uapi := $(obj)/../include/generated/asm
|
||||
uapi := $(obj)/../include/generated/uapi/asm
|
||||
|
||||
# Create output directory if not already present
|
||||
_dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') \
|
||||
|
@ -20,8 +20,6 @@ header-y += netfilter_ipv6/
|
||||
header-y += usb/
|
||||
header-y += wimax/
|
||||
|
||||
genhdr-y += version.h
|
||||
|
||||
ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/a.out.h \
|
||||
$(srctree)/include/asm-$(SRCARCH)/a.out.h \
|
||||
$(INSTALL_HDR_PATH)/include/asm-*/a.out.h),)
|
||||
|
@ -20,3 +20,5 @@ header-y += netfilter_ipv4/
|
||||
header-y += netfilter_ipv6/
|
||||
header-y += usb/
|
||||
header-y += wimax/
|
||||
|
||||
genhdr-y += version.h
|
||||
|
@ -8,7 +8,7 @@
|
||||
# ==========================================================================
|
||||
|
||||
# called may set destination dir (when installing to asm/)
|
||||
_dst := $(if $(dst),$(dst),$(obj))
|
||||
_dst := $(or $(destination-y),$(dst),$(obj))
|
||||
|
||||
# generated header directory
|
||||
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
|
||||
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
|
||||
|
||||
install := $(INSTALL_HDR_PATH)/$(_dst)
|
||||
installdir := $(INSTALL_HDR_PATH)/$(subst uapi/,,$(_dst))
|
||||
|
||||
header-y := $(sort $(header-y))
|
||||
subdirs := $(patsubst %/,%,$(filter %/, $(header-y)))
|
||||
header-y := $(filter-out %/, $(header-y))
|
||||
|
||||
# files used to track state of install/check
|
||||
install-file := $(install)/.install
|
||||
check-file := $(install)/.check
|
||||
install-file := $(installdir)/.install
|
||||
check-file := $(installdir)/.check
|
||||
|
||||
# generic-y list all files an architecture uses from asm-generic
|
||||
# Use this to build a list of headers which require a wrapper
|
||||
wrapper-files := $(filter $(header-y), $(generic-y))
|
||||
|
||||
srcdir := $(srctree)/$(obj)
|
||||
gendir := $(objtree)/$(gen)
|
||||
|
||||
oldsrcdir := $(srctree)/$(subst /uapi,,$(obj))
|
||||
|
||||
# all headers files for this dir
|
||||
header-y := $(filter-out $(generic-y), $(header-y))
|
||||
all-files := $(header-y) $(genhdr-y) $(wrapper-files)
|
||||
input-files := $(addprefix $(srctree)/$(obj)/,$(header-y)) \
|
||||
$(addprefix $(objtree)/$(gen)/,$(genhdr-y))
|
||||
output-files := $(addprefix $(install)/, $(all-files))
|
||||
output-files := $(addprefix $(installdir)/, $(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
|
||||
oldheaders := $(patsubst $(install)/%,%,$(wildcard $(install)/*.h))
|
||||
oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h))
|
||||
unwanted := $(filter-out $(all-files),$(oldheaders))
|
||||
|
||||
# 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 $@))
|
||||
|
||||
quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
|
||||
file$(if $(word 2, $(all-files)),s))
|
||||
cmd_install = \
|
||||
$(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \
|
||||
$(PERL) $< $(objtree)/$(gen) $(install) $(SRCARCH) $(genhdr-y); \
|
||||
$(PERL) $< $(installdir) $(SRCARCH) $(input-files); \
|
||||
for F in $(wrapper-files); do \
|
||||
echo "\#include <asm-generic/$$F>" > $(install)/$$F; \
|
||||
echo "\#include <asm-generic/$$F>" > $(installdir)/$$F; \
|
||||
done; \
|
||||
touch $@
|
||||
|
||||
@ -67,7 +84,7 @@ 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 "$(install)/$${f}"; done \
|
||||
echo "$(installdir)/$${f}"; done \
|
||||
| xargs \
|
||||
$(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH); \
|
||||
touch $@
|
||||
|
@ -4,8 +4,7 @@
|
||||
# user space and copy the files to their destination.
|
||||
#
|
||||
# Usage: headers_install.pl readdir installdir arch [files...]
|
||||
# readdir: dir to open files
|
||||
# installdir: dir to install the files
|
||||
# installdir: dir to install the files to
|
||||
# arch: current architecture
|
||||
# arch is used to force a reinstallation when the arch
|
||||
# changes because kbuild then detect a command line change.
|
||||
@ -18,15 +17,18 @@
|
||||
|
||||
use strict;
|
||||
|
||||
my ($readdir, $installdir, $arch, @files) = @ARGV;
|
||||
my ($installdir, $arch, @files) = @ARGV;
|
||||
|
||||
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";
|
||||
|
||||
open(my $in, '<', "$readdir/$file")
|
||||
or die "$readdir/$file: $!\n";
|
||||
open(my $in, '<', $filename)
|
||||
or die "$filename: $!\n";
|
||||
open(my $out, '>', $tmpfile)
|
||||
or die "$tmpfile: $!\n";
|
||||
while (my $line = <$in>) {
|
||||
|
Loading…
Reference in New Issue
Block a user