One of the most remarkable improvements in this cycle is, Kbuild is
 now able to cache the result of shell commands.  Some variables are
 expensive to compute, for example, $(call cc-option,...) invokes the
 compiler.  It is not efficient to redo this computation every time,
 even when we are not actually building anything.  Kbuild creates a
 hidden file ".cache.mk" that contains invoked shell commands and
 their results.  The speed-up should be noticeable.
 
 Summary:
 
 - Fix arch build issues (hexagon, sh)
 
 - Clean up various Makefiles and scripts
 
 - Fix wrong usage of {CFLAGS,LDFLAGS}_MODULE in arch Makefiles
 
 - Cache variables that are expensive to compute
 
 - Improve cc-ldopton and ld-option for Clang
 
 - Optimize output directory creation
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJaDxaLAAoJED2LAQed4NsGIHQP/isMxxaIxIAWU56+ZcII74k7
 639VgrKi9n5y25d1dBRTQg+vReHE6E2JbkCqpVOu11t7m0LT7yUK8v3WwyLf1qTN
 GxnqZ/WMQU5/AYVqIWo8jN4FGHpivHJ6qbeiNJM9qN4RAkzG0sZUq746VaFZYmIR
 Lu0Gf4m4qjifkkhXsQdWT5i7yNTidPqaL6GNb+FcFkEHlVre8jma0kJlgfHxru84
 WmETpjQXvHAZ/R61vY6ekAWpqFhw3ecJY96A9npnx+SQVQdSNAdpaU0SK29jB0ON
 /SAfpHg9oa/gD0LFOKV6zkjnAkd4TEjrJEiHHhz5gjT/SbS3T1llBIGZ1oV4X7Y0
 Vlh9KWlm1FJJI4SIzc9qUaQMp6JtLfEfHKJCc45xVaN3fNrDnR8jl80x5+95ELga
 dCkZgnq5u82MtTysCbHBESwDYQaVPyIrh7In+mduglaCqhqj9KoDjoLoiGfCg7SA
 3tPflYVd629w5l5GrazJ40jWn1+ggMtgMOVooJNJ+dINCP+GxsUpH84Ww2Pdic+/
 qLdud6TeqxrZDGzWXqKNLu8alM8NGgSr101l9gIf1oqSyy63duBpMrxGDoIJS3FU
 rFDoFFUhlfkAXNbQHtVGNzKtcpCjURh992j9Fa1+NfMwSce5IHkMwTvPmNSRowi8
 0llLjXhD/bxK6FpdvlV8
 =zIdO
 -----END PGP SIGNATURE-----
Merge tag 'kbuild-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
Pull Kbuild updates from Masahiro Yamada:
 "One of the most remarkable improvements in this cycle is, Kbuild is
  now able to cache the result of shell commands. Some variables are
  expensive to compute, for example, $(call cc-option,...) invokes the
  compiler. It is not efficient to redo this computation every time,
  even when we are not actually building anything. Kbuild creates a
  hidden file ".cache.mk" that contains invoked shell commands and their
  results. The speed-up should be noticeable.
  Summary:
   - Fix arch build issues (hexagon, sh)
   - Clean up various Makefiles and scripts
   - Fix wrong usage of {CFLAGS,LDFLAGS}_MODULE in arch Makefiles
   - Cache variables that are expensive to compute
   - Improve cc-ldopton and ld-option for Clang
   - Optimize output directory creation"
* tag 'kbuild-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (30 commits)
  kbuild: move coccicheck help from scripts/Makefile.help to top Makefile
  sh: decompressor: add shipped files to .gitignore
  frv: .gitignore: ignore vmlinux.lds
  selinux: remove unnecessary assignment to subdir-
  kbuild: specify FORCE in Makefile.headersinst as .PHONY target
  kbuild: remove redundant mkdir from ./Kbuild
  kbuild: optimize object directory creation for incremental build
  kbuild: create object directories simpler and faster
  kbuild: filter-out PHONY targets from "targets"
  kbuild: remove redundant $(wildcard ...) for cmd_files calculation
  kbuild: create directory for make cache only when necessary
  sh: select KBUILD_DEFCONFIG depending on ARCH
  kbuild: fix linker feature test macros when cross compiling with Clang
  kbuild: shrink .cache.mk when it exceeds 1000 lines
  kbuild: do not call cc-option before KBUILD_CFLAGS initialization
  kbuild: Cache a few more calls to the compiler
  kbuild: Add a cache for generated variables
  kbuild: add forward declaration of default target to Makefile.asm-generic
  kbuild: remove KBUILD_SUBDIR_ASFLAGS and KBUILD_SUBDIR_CCFLAGS
  hexagon/kbuild: replace CFLAGS_MODULE with KBUILD_CFLAGS_MODULE
  ...
		
	
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| # SPDX-License-Identifier: GPL-2.0
 | |
| 
 | |
| TARGET=$1
 | |
| ARCH=$2
 | |
| SMP=$3
 | |
| PREEMPT=$4
 | |
| CC=$5
 | |
| 
 | |
| vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
 | |
| 
 | |
| # If compile.h exists already and we don't own autoconf.h
 | |
| # (i.e. we're not the same user who did make *config), don't
 | |
| # modify compile.h
 | |
| # So "sudo make install" won't change the "compiled by <user>"
 | |
| # do "compiled by root"
 | |
| 
 | |
| if [ -r $TARGET -a ! -O include/generated/autoconf.h ]; then
 | |
|   vecho "  SKIPPED $TARGET"
 | |
|   exit 0
 | |
| fi
 | |
| 
 | |
| # Do not expand names
 | |
| set -f
 | |
| 
 | |
| # Fix the language to get consistent output
 | |
| LC_ALL=C
 | |
| export LC_ALL
 | |
| 
 | |
| if [ -z "$KBUILD_BUILD_VERSION" ]; then
 | |
| 	VERSION=$(cat .version 2>/dev/null || echo 1)
 | |
| else
 | |
| 	VERSION=$KBUILD_BUILD_VERSION
 | |
| fi
 | |
| 
 | |
| if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
 | |
| 	TIMESTAMP=`date`
 | |
| else
 | |
| 	TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
 | |
| fi
 | |
| if test -z "$KBUILD_BUILD_USER"; then
 | |
| 	LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
 | |
| else
 | |
| 	LINUX_COMPILE_BY=$KBUILD_BUILD_USER
 | |
| fi
 | |
| if test -z "$KBUILD_BUILD_HOST"; then
 | |
| 	LINUX_COMPILE_HOST=`hostname`
 | |
| else
 | |
| 	LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST
 | |
| fi
 | |
| 
 | |
| UTS_VERSION="#$VERSION"
 | |
| CONFIG_FLAGS=""
 | |
| if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
 | |
| if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
 | |
| UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
 | |
| 
 | |
| # Truncate to maximum length
 | |
| 
 | |
| UTS_LEN=64
 | |
| UTS_TRUNCATE="cut -b -$UTS_LEN"
 | |
| 
 | |
| # Generate a temporary compile.h
 | |
| 
 | |
| ( echo /\* This file is auto generated, version $VERSION \*/
 | |
|   if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi
 | |
| 
 | |
|   echo \#define UTS_MACHINE \"$ARCH\"
 | |
| 
 | |
|   echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
 | |
| 
 | |
|   echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
 | |
|   echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
 | |
| 
 | |
|   echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//'`\"
 | |
| ) > .tmpcompile
 | |
| 
 | |
| # Only replace the real compile.h if the new one is different,
 | |
| # in order to preserve the timestamp and avoid unnecessary
 | |
| # recompilations.
 | |
| # We don't consider the file changed if only the date/time changed.
 | |
| # A kernel config change will increase the generation number, thus
 | |
| # causing compile.h to be updated (including date/time) due to the
 | |
| # changed comment in the
 | |
| # first line.
 | |
| 
 | |
| if [ -r $TARGET ] && \
 | |
|       grep -v 'UTS_VERSION' $TARGET > .tmpver.1 && \
 | |
|       grep -v 'UTS_VERSION' .tmpcompile > .tmpver.2 && \
 | |
|       cmp -s .tmpver.1 .tmpver.2; then
 | |
|    rm -f .tmpcompile
 | |
| else
 | |
|    vecho "  UPD     $TARGET"
 | |
|    mv -f .tmpcompile $TARGET
 | |
| fi
 | |
| rm -f .tmpver.1 .tmpver.2
 |