2016-01-27 05:50:18 +03:00
#!/bin/sh
# Script to create/update include/generated/autoksyms.h and dependency files
#
# Copyright: (C) 2016 Linaro Limited
# Created by: Nicolas Pitre, January 2016
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
# Create/update the include/generated/autoksyms.h file from the list
# of all module's needed symbols as recorded on the third line of
# .tmp_versions/*.mod files.
#
# For each symbol being added or removed, the corresponding dependency
# file's timestamp is updated to force a rebuild of the affected source
# file. All arguments passed to this script are assumed to be a command
# to be exec'd to trigger a rebuild of those files.
set -e
cur_ksyms_file = "include/generated/autoksyms.h"
new_ksyms_file = "include/generated/autoksyms.h.tmpnew"
info( ) {
if [ " $quiet " != "silent_" ] ; then
printf " %-7s %s\n" " $1 " " $2 "
fi
}
info "CHK" " $cur_ksyms_file "
# Use "make V=1" to debug this script.
case " $KBUILD_VERBOSE " in
*1*)
set -x
; ;
esac
# We need access to CONFIG_ symbols
case " ${ KCONFIG_CONFIG } " in
*/*)
. " ${ KCONFIG_CONFIG } "
; ;
*)
# Force using a file from the current directory
. " ./ ${ KCONFIG_CONFIG } "
esac
# In case it doesn't exist yet...
if [ -e " $cur_ksyms_file " ] ; then touch " $cur_ksyms_file " ; fi
# Generate a new ksym list file with symbols needed by the current
# set of modules.
cat > " $new_ksyms_file " << EOT
/*
* Automatically generated file; DO NOT EDIT.
*/
EOT
2016-04-29 00:33:38 +03:00
sed -ns -e '3{s/ /\n/g;/^$/!p;}' " $MODVERDIR " /*.mod | sort -u |
2016-01-27 05:50:18 +03:00
while read sym; do
if [ -n " $CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX " ] ; then
sym = " ${ sym #_ } "
fi
echo " #define __KSYM_ ${ sym } 1 "
done >> " $new_ksyms_file "
# Special case for modversions (see modpost.c)
if [ -n " $CONFIG_MODVERSIONS " ] ; then
echo "#define __KSYM_module_layout 1" >> " $new_ksyms_file "
fi
# Extract changes between old and new list and touch corresponding
# dependency files.
changed = $(
count = 0
sort " $cur_ksyms_file " " $new_ksyms_file " | uniq -u |
sed -n 's/^#define __KSYM_\(.*\) 1/\1/p' | tr "A-Z_" "a-z/" |
while read sympath; do
if [ -z " $sympath " ] ; then continue ; fi
depfile = " include/config/ksym/ ${ sympath } .h "
mkdir -p " $( dirname " $depfile " ) "
touch " $depfile "
echo $(( count += 1 ))
done | tail -1 )
changed = ${ changed :- 0 }
if [ $changed -gt 0 ] ; then
# Replace the old list with tne new one
old = $( grep -c "^#define __KSYM_" " $cur_ksyms_file " || true )
new = $( grep -c "^#define __KSYM_" " $new_ksyms_file " || true )
info "KSYMS" " symbols: before= $old , after= $new , changed= $changed "
info "UPD" " $cur_ksyms_file "
mv -f " $new_ksyms_file " " $cur_ksyms_file "
# Then trigger a rebuild of affected source files
exec $@
else
rm -f " $new_ksyms_file "
fi