]>
Commit | Line | Data |
---|---|---|
23121ca2 | 1 | #!/bin/sh |
d2912cb1 | 2 | # SPDX-License-Identifier: GPL-2.0-only |
23121ca2 NP |
3 | |
4 | # Script to create/update include/generated/autoksyms.h and dependency files | |
5 | # | |
6 | # Copyright: (C) 2016 Linaro Limited | |
7 | # Created by: Nicolas Pitre, January 2016 | |
8 | # | |
23121ca2 NP |
9 | |
10 | # Create/update the include/generated/autoksyms.h file from the list | |
60ae1b19 | 11 | # of all module's needed symbols as recorded on the second line of *.mod files. |
23121ca2 NP |
12 | # |
13 | # For each symbol being added or removed, the corresponding dependency | |
14 | # file's timestamp is updated to force a rebuild of the affected source | |
15 | # file. All arguments passed to this script are assumed to be a command | |
16 | # to be exec'd to trigger a rebuild of those files. | |
17 | ||
18 | set -e | |
19 | ||
20 | cur_ksyms_file="include/generated/autoksyms.h" | |
21 | new_ksyms_file="include/generated/autoksyms.h.tmpnew" | |
22 | ||
23 | info() { | |
24 | if [ "$quiet" != "silent_" ]; then | |
25 | printf " %-7s %s\n" "$1" "$2" | |
26 | fi | |
27 | } | |
28 | ||
29 | info "CHK" "$cur_ksyms_file" | |
30 | ||
31 | # Use "make V=1" to debug this script. | |
32 | case "$KBUILD_VERBOSE" in | |
33 | *1*) | |
34 | set -x | |
35 | ;; | |
36 | esac | |
37 | ||
38 | # We need access to CONFIG_ symbols | |
94cf8acc | 39 | . include/config/auto.conf |
23121ca2 | 40 | |
23121ca2 NP |
41 | # Generate a new ksym list file with symbols needed by the current |
42 | # set of modules. | |
43 | cat > "$new_ksyms_file" << EOT | |
44 | /* | |
45 | * Automatically generated file; DO NOT EDIT. | |
46 | */ | |
47 | ||
48 | EOT | |
b7dca6dd | 49 | sed 's/ko$/mod/' modules.order | |
60ae1b19 | 50 | xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- | |
b7dca6dd MY |
51 | sort -u | |
52 | sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$new_ksyms_file" | |
23121ca2 NP |
53 | |
54 | # Special case for modversions (see modpost.c) | |
55 | if [ -n "$CONFIG_MODVERSIONS" ]; then | |
56 | echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file" | |
57 | fi | |
58 | ||
59 | # Extract changes between old and new list and touch corresponding | |
60 | # dependency files. | |
61 | changed=$( | |
62 | count=0 | |
63 | sort "$cur_ksyms_file" "$new_ksyms_file" | uniq -u | | |
64 | sed -n 's/^#define __KSYM_\(.*\) 1/\1/p' | tr "A-Z_" "a-z/" | | |
65 | while read sympath; do | |
66 | if [ -z "$sympath" ]; then continue; fi | |
fbfa9be9 | 67 | depfile="include/ksym/${sympath}.h" |
23121ca2 NP |
68 | mkdir -p "$(dirname "$depfile")" |
69 | touch "$depfile" | |
825d4875 NP |
70 | # Filesystems with coarse time precision may create timestamps |
71 | # equal to the one from a file that was very recently built and that | |
72 | # needs to be rebuild. Let's guard against that by making sure our | |
73 | # dep files are always newer than the first file we created here. | |
74 | while [ ! "$depfile" -nt "$new_ksyms_file" ]; do | |
75 | touch "$depfile" | |
76 | done | |
23121ca2 NP |
77 | echo $((count += 1)) |
78 | done | tail -1 ) | |
79 | changed=${changed:-0} | |
80 | ||
81 | if [ $changed -gt 0 ]; then | |
82 | # Replace the old list with tne new one | |
83 | old=$(grep -c "^#define __KSYM_" "$cur_ksyms_file" || true) | |
84 | new=$(grep -c "^#define __KSYM_" "$new_ksyms_file" || true) | |
85 | info "KSYMS" "symbols: before=$old, after=$new, changed=$changed" | |
86 | info "UPD" "$cur_ksyms_file" | |
87 | mv -f "$new_ksyms_file" "$cur_ksyms_file" | |
88 | # Then trigger a rebuild of affected source files | |
89 | exec $@ | |
90 | else | |
91 | rm -f "$new_ksyms_file" | |
92 | fi |