Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild

Pull kbuild updates from Michal Marek:
- fix for make headers_install argv explosion with too long path
- scripts/setlocalversion does not call git update-index needlessly
- fix for the src.rpm produced by make rpm-pkg. The new make
image_name can be useful also for other packaging tools.
- scripts/mod/devicetable-offsets.o is not rebuilt during each make run
- make modules_install dependency fix
- scripts/sortextable portability fix
- fix for kbuild to generate the output directory for all object files
in subdirs.
- a couple of minor fixes

* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
kbuild: create directory for dir/file.o
tools/include: use stdint types for user-space byteshift headers
Makefile: Fix install error with make -j option
Fix a build warning in scripts/mod/file2alias.c
improve modalias building
scripts/mod: Spelling s/DEVICEVTABLE/DEVICETABLE/
kbuild: fix error when building from src rpm
scripts/setlocalversion on write-protected source tree
Makefile.lib: align DTB quiet_cmd
kbuild: fix make headers_install when path is too long

+73 -63
+6 -2
Makefile
··· 981 981 # boot a modules.dep even before / is mounted read-write. However the 982 982 # boot script depmod is the master version. 983 983 PHONY += _modinst_post 984 - _modinst_post: _modinst_ 984 + _modinst_post: include/config/kernel.release _modinst_ 985 985 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modinst 986 986 $(call cmd,depmod) 987 987 ··· 1116 1116 @echo ' gtags - Generate GNU GLOBAL index' 1117 1117 @echo ' kernelrelease - Output the release version string' 1118 1118 @echo ' kernelversion - Output the version stored in Makefile' 1119 + @echo ' image_name - Output the image name' 1119 1120 @echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \ 1120 1121 echo ' (default: $(INSTALL_HDR_PATH))'; \ 1121 1122 echo '' ··· 1311 1310 endif #ifeq ($(config-targets),1) 1312 1311 endif #ifeq ($(mixed-targets),1) 1313 1312 1314 - PHONY += checkstack kernelrelease kernelversion 1313 + PHONY += checkstack kernelrelease kernelversion image_name 1315 1314 1316 1315 # UML needs a little special treatment here. It wants to use the host 1317 1316 # toolchain, so needs $(SUBARCH) passed to checkstack.pl. Everyone ··· 1331 1330 1332 1331 kernelversion: 1333 1332 @echo $(KERNELVERSION) 1333 + 1334 + image_name: 1335 + @echo $(KBUILD_IMAGE) 1334 1336 1335 1337 # Clear a bunch of variables before executing the submake 1336 1338 tools/: FORCE
+14 -6
scripts/Makefile.headersinst
··· 47 47 all-files := $(header-y) $(genhdr-y) $(wrapper-files) 48 48 output-files := $(addprefix $(installdir)/, $(all-files)) 49 49 50 - input-files := $(foreach hdr, $(header-y), \ 50 + input-files1 := $(foreach hdr, $(header-y), \ 51 51 $(if $(wildcard $(srcdir)/$(hdr)), \ 52 - $(wildcard $(srcdir)/$(hdr)), \ 52 + $(wildcard $(srcdir)/$(hdr))) \ 53 + ) 54 + input-files1-name := $(notdir $(input-files1)) 55 + input-files2 := $(foreach hdr, $(header-y), \ 56 + $(if $(wildcard $(srcdir)/$(hdr)),, \ 53 57 $(if $(wildcard $(oldsrcdir)/$(hdr)), \ 54 58 $(wildcard $(oldsrcdir)/$(hdr)), \ 55 59 $(error Missing UAPI file $(srcdir)/$(hdr))) \ 56 - )) \ 57 - $(foreach hdr, $(genhdr-y), \ 60 + )) 61 + input-files2-name := $(notdir $(input-files2)) 62 + input-files3 := $(foreach hdr, $(genhdr-y), \ 58 63 $(if $(wildcard $(gendir)/$(hdr)), \ 59 64 $(wildcard $(gendir)/$(hdr)), \ 60 65 $(error Missing generated UAPI file $(gendir)/$(hdr)) \ 61 66 )) 67 + input-files3-name := $(notdir $(input-files3)) 62 68 63 69 # Work out what needs to be removed 64 70 oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h)) ··· 78 72 quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ 79 73 file$(if $(word 2, $(all-files)),s)) 80 74 cmd_install = \ 81 - $(CONFIG_SHELL) $< $(installdir) $(input-files); \ 75 + $(CONFIG_SHELL) $< $(installdir) $(srcdir) $(input-files1-name); \ 76 + $(CONFIG_SHELL) $< $(installdir) $(oldsrcdir) $(input-files2-name); \ 77 + $(CONFIG_SHELL) $< $(installdir) $(gendir) $(input-files3-name); \ 82 78 for F in $(wrapper-files); do \ 83 79 echo "\#include <asm-generic/$$F>" > $(installdir)/$$F; \ 84 80 done; \ ··· 106 98 @: 107 99 108 100 targets += $(install-file) 109 - $(install-file): scripts/headers_install.sh $(input-files) FORCE 101 + $(install-file): scripts/headers_install.sh $(input-files1) $(input-files2) $(input-files3) FORCE 110 102 $(if $(unwanted),$(call cmd,remove),) 111 103 $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@))) 112 104 $(call if_changed,install)
+2 -2
scripts/Makefile.lib
··· 63 63 subdir-obj-y := $(filter %/built-in.o, $(obj-y)) 64 64 65 65 # $(obj-dirs) is a list of directories that contain object files 66 - obj-dirs := $(dir $(multi-objs) $(subdir-obj-y)) 66 + obj-dirs := $(dir $(multi-objs) $(obj-y)) 67 67 68 68 # Replace multi-part objects by their individual parts, look at local dir only 69 69 real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m))) $(extra-y) ··· 244 244 # --------------------------------------------------------------------------- 245 245 246 246 # Generate an assembly file to wrap the output of the device tree compiler 247 - quiet_cmd_dt_S_dtb= DTB $@ 247 + quiet_cmd_dt_S_dtb= DTB $@ 248 248 cmd_dt_S_dtb= \ 249 249 ( \ 250 250 echo '\#include <asm-generic/vmlinux.lds.h>'; \
+5 -2
scripts/headers_install.sh
··· 2 2 3 3 if [ $# -lt 1 ] 4 4 then 5 - echo "Usage: headers_install.sh OUTDIR [FILES...] 5 + echo "Usage: headers_install.sh OUTDIR SRCDIR [FILES...] 6 6 echo 7 7 echo "Prepares kernel header files for use by user space, by removing" 8 8 echo "all compiler.h definitions and #includes, removing any" ··· 10 10 echo "asm/inline/volatile keywords." 11 11 echo 12 12 echo "OUTDIR: directory to write each userspace header FILE to." 13 + echo "SRCDIR: source directory where files are picked." 13 14 echo "FILES: list of header files to operate on." 14 15 15 16 exit 1 ··· 19 18 # Grab arguments 20 19 21 20 OUTDIR="$1" 21 + shift 22 + SRCDIR="$1" 22 23 shift 23 24 24 25 # Iterate through files listed on command line ··· 37 34 -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ 38 35 -e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \ 39 36 -e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \ 40 - "$i" > "$OUTDIR/$FILE.sed" || exit 1 37 + "$SRCDIR/$i" > "$OUTDIR/$FILE.sed" || exit 1 41 38 scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \ 42 39 > "$OUTDIR/$FILE" 43 40 [ $? -gt 1 ] && exit 1
+5 -10
scripts/mod/Makefile
··· 15 15 quiet_cmd_offsets = GEN $@ 16 16 define cmd_offsets 17 17 (set -e; \ 18 - echo "#ifndef __DEVICEVTABLE_OFFSETS_H__"; \ 19 - echo "#define __DEVICEVTABLE_OFFSETS_H__"; \ 18 + echo "#ifndef __DEVICETABLE_OFFSETS_H__"; \ 19 + echo "#define __DEVICETABLE_OFFSETS_H__"; \ 20 20 echo "/*"; \ 21 21 echo " * DO NOT MODIFY."; \ 22 22 echo " *"; \ ··· 29 29 echo "#endif" ) > $@ 30 30 endef 31 31 32 - # We use internal kbuild rules to avoid the "is up to date" message from make 33 - scripts/mod/devicetable-offsets.s: scripts/mod/devicetable-offsets.c FORCE 34 - $(Q)mkdir -p $(dir $@) 35 - $(call if_changed_dep,cc_s_c) 32 + $(obj)/$(devicetable-offsets-file): $(obj)/devicetable-offsets.s 33 + $(call if_changed,offsets) 36 34 37 - $(obj)/$(devicetable-offsets-file): scripts/mod/devicetable-offsets.s 38 - $(call cmd,offsets) 39 - 40 - targets += $(devicetable-offsets-file) 35 + targets += $(devicetable-offsets-file) devicetable-offsets.s 41 36 42 37 # dependencies on generated files need to be listed explicitly 43 38
+6 -4
scripts/mod/file2alias.c
··· 79 79 extern struct devtable *__start___devtable[], *__stop___devtable[]; 80 80 #endif /* __MACH__ */ 81 81 82 - #if __GNUC__ == 3 && __GNUC_MINOR__ < 3 83 - # define __used __attribute__((__unused__)) 84 - #else 85 - # define __used __attribute__((__used__)) 82 + #if !defined(__used) 83 + # if __GNUC__ == 3 && __GNUC_MINOR__ < 3 84 + # define __used __attribute__((__unused__)) 85 + # else 86 + # define __used __attribute__((__used__)) 87 + # endif 86 88 #endif 87 89 88 90 /* Define a variable f that holds the value of field f of struct devid
+1
scripts/package/mkspec
··· 74 74 fi 75 75 76 76 echo "%install" 77 + echo 'KBUILD_IMAGE=$(make image_name)' 77 78 echo "%ifarch ia64" 78 79 echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules' 79 80 echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
-3
scripts/setlocalversion
··· 71 71 printf -- '-svn%s' "`git svn find-rev $head`" 72 72 fi 73 73 74 - # Update index only on r/w media 75 - [ -w . ] && git update-index --refresh --unmerged > /dev/null 76 - 77 74 # Check for uncommitted changes 78 75 if git diff-index --name-only HEAD | grep -qv "^scripts/package"; then 79 76 printf '%s' -dirty
+17 -17
tools/include/tools/be_byteshift.h
··· 1 1 #ifndef _TOOLS_BE_BYTESHIFT_H 2 2 #define _TOOLS_BE_BYTESHIFT_H 3 3 4 - #include <linux/types.h> 4 + #include <stdint.h> 5 5 6 - static inline __u16 __get_unaligned_be16(const __u8 *p) 6 + static inline uint16_t __get_unaligned_be16(const uint8_t *p) 7 7 { 8 8 return p[0] << 8 | p[1]; 9 9 } 10 10 11 - static inline __u32 __get_unaligned_be32(const __u8 *p) 11 + static inline uint32_t __get_unaligned_be32(const uint8_t *p) 12 12 { 13 13 return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; 14 14 } 15 15 16 - static inline __u64 __get_unaligned_be64(const __u8 *p) 16 + static inline uint64_t __get_unaligned_be64(const uint8_t *p) 17 17 { 18 - return (__u64)__get_unaligned_be32(p) << 32 | 18 + return (uint64_t)__get_unaligned_be32(p) << 32 | 19 19 __get_unaligned_be32(p + 4); 20 20 } 21 21 22 - static inline void __put_unaligned_be16(__u16 val, __u8 *p) 22 + static inline void __put_unaligned_be16(uint16_t val, uint8_t *p) 23 23 { 24 24 *p++ = val >> 8; 25 25 *p++ = val; 26 26 } 27 27 28 - static inline void __put_unaligned_be32(__u32 val, __u8 *p) 28 + static inline void __put_unaligned_be32(uint32_t val, uint8_t *p) 29 29 { 30 30 __put_unaligned_be16(val >> 16, p); 31 31 __put_unaligned_be16(val, p + 2); 32 32 } 33 33 34 - static inline void __put_unaligned_be64(__u64 val, __u8 *p) 34 + static inline void __put_unaligned_be64(uint64_t val, uint8_t *p) 35 35 { 36 36 __put_unaligned_be32(val >> 32, p); 37 37 __put_unaligned_be32(val, p + 4); 38 38 } 39 39 40 - static inline __u16 get_unaligned_be16(const void *p) 40 + static inline uint16_t get_unaligned_be16(const void *p) 41 41 { 42 - return __get_unaligned_be16((const __u8 *)p); 42 + return __get_unaligned_be16((const uint8_t *)p); 43 43 } 44 44 45 - static inline __u32 get_unaligned_be32(const void *p) 45 + static inline uint32_t get_unaligned_be32(const void *p) 46 46 { 47 - return __get_unaligned_be32((const __u8 *)p); 47 + return __get_unaligned_be32((const uint8_t *)p); 48 48 } 49 49 50 - static inline __u64 get_unaligned_be64(const void *p) 50 + static inline uint64_t get_unaligned_be64(const void *p) 51 51 { 52 - return __get_unaligned_be64((const __u8 *)p); 52 + return __get_unaligned_be64((const uint8_t *)p); 53 53 } 54 54 55 - static inline void put_unaligned_be16(__u16 val, void *p) 55 + static inline void put_unaligned_be16(uint16_t val, void *p) 56 56 { 57 57 __put_unaligned_be16(val, p); 58 58 } 59 59 60 - static inline void put_unaligned_be32(__u32 val, void *p) 60 + static inline void put_unaligned_be32(uint32_t val, void *p) 61 61 { 62 62 __put_unaligned_be32(val, p); 63 63 } 64 64 65 - static inline void put_unaligned_be64(__u64 val, void *p) 65 + static inline void put_unaligned_be64(uint64_t val, void *p) 66 66 { 67 67 __put_unaligned_be64(val, p); 68 68 }
+17 -17
tools/include/tools/le_byteshift.h
··· 1 1 #ifndef _TOOLS_LE_BYTESHIFT_H 2 2 #define _TOOLS_LE_BYTESHIFT_H 3 3 4 - #include <linux/types.h> 4 + #include <stdint.h> 5 5 6 - static inline __u16 __get_unaligned_le16(const __u8 *p) 6 + static inline uint16_t __get_unaligned_le16(const uint8_t *p) 7 7 { 8 8 return p[0] | p[1] << 8; 9 9 } 10 10 11 - static inline __u32 __get_unaligned_le32(const __u8 *p) 11 + static inline uint32_t __get_unaligned_le32(const uint8_t *p) 12 12 { 13 13 return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; 14 14 } 15 15 16 - static inline __u64 __get_unaligned_le64(const __u8 *p) 16 + static inline uint64_t __get_unaligned_le64(const uint8_t *p) 17 17 { 18 - return (__u64)__get_unaligned_le32(p + 4) << 32 | 18 + return (uint64_t)__get_unaligned_le32(p + 4) << 32 | 19 19 __get_unaligned_le32(p); 20 20 } 21 21 22 - static inline void __put_unaligned_le16(__u16 val, __u8 *p) 22 + static inline void __put_unaligned_le16(uint16_t val, uint8_t *p) 23 23 { 24 24 *p++ = val; 25 25 *p++ = val >> 8; 26 26 } 27 27 28 - static inline void __put_unaligned_le32(__u32 val, __u8 *p) 28 + static inline void __put_unaligned_le32(uint32_t val, uint8_t *p) 29 29 { 30 30 __put_unaligned_le16(val >> 16, p + 2); 31 31 __put_unaligned_le16(val, p); 32 32 } 33 33 34 - static inline void __put_unaligned_le64(__u64 val, __u8 *p) 34 + static inline void __put_unaligned_le64(uint64_t val, uint8_t *p) 35 35 { 36 36 __put_unaligned_le32(val >> 32, p + 4); 37 37 __put_unaligned_le32(val, p); 38 38 } 39 39 40 - static inline __u16 get_unaligned_le16(const void *p) 40 + static inline uint16_t get_unaligned_le16(const void *p) 41 41 { 42 - return __get_unaligned_le16((const __u8 *)p); 42 + return __get_unaligned_le16((const uint8_t *)p); 43 43 } 44 44 45 - static inline __u32 get_unaligned_le32(const void *p) 45 + static inline uint32_t get_unaligned_le32(const void *p) 46 46 { 47 - return __get_unaligned_le32((const __u8 *)p); 47 + return __get_unaligned_le32((const uint8_t *)p); 48 48 } 49 49 50 - static inline __u64 get_unaligned_le64(const void *p) 50 + static inline uint64_t get_unaligned_le64(const void *p) 51 51 { 52 - return __get_unaligned_le64((const __u8 *)p); 52 + return __get_unaligned_le64((const uint8_t *)p); 53 53 } 54 54 55 - static inline void put_unaligned_le16(__u16 val, void *p) 55 + static inline void put_unaligned_le16(uint16_t val, void *p) 56 56 { 57 57 __put_unaligned_le16(val, p); 58 58 } 59 59 60 - static inline void put_unaligned_le32(__u32 val, void *p) 60 + static inline void put_unaligned_le32(uint32_t val, void *p) 61 61 { 62 62 __put_unaligned_le32(val, p); 63 63 } 64 64 65 - static inline void put_unaligned_le64(__u64 val, void *p) 65 + static inline void put_unaligned_le64(uint64_t val, void *p) 66 66 { 67 67 __put_unaligned_le64(val, p); 68 68 }