Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/memory-model/scripts/parseargs.sh
29266 views
1
#!/bin/sh
2
# SPDX-License-Identifier: GPL-2.0+
3
#
4
# Parse arguments common to the various scripts.
5
#
6
# . scripts/parseargs.sh
7
#
8
# Include into other Linux kernel tools/memory-model scripts.
9
#
10
# Copyright IBM Corporation, 2018
11
#
12
# Author: Paul E. McKenney <[email protected]>
13
14
T=/tmp/parseargs.sh.$$
15
mkdir $T
16
17
# Initialize one parameter: initparam name default
18
initparam () {
19
echo if test -z '"$'$1'"' > $T/s
20
echo then >> $T/s
21
echo $1='"'$2'"' >> $T/s
22
echo export $1 >> $T/s
23
echo fi >> $T/s
24
echo $1_DEF='$'$1 >> $T/s
25
. $T/s
26
}
27
28
initparam LKMM_DESTDIR "."
29
initparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg"
30
initparam LKMM_HW_MAP_FILE ""
31
initparam LKMM_JOBS `getconf _NPROCESSORS_ONLN`
32
initparam LKMM_PROCS "3"
33
initparam LKMM_TIMEOUT "1m"
34
35
scriptname=$0
36
37
usagehelp () {
38
echo "Usage $scriptname [ arguments ]"
39
echo " --destdir path (place for .litmus.out, default by .litmus)"
40
echo " --herdopts -conf linux-kernel.cfg ..."
41
echo " --hw AArch64"
42
echo " --jobs N (number of jobs, default one per CPU)"
43
echo " --procs N (litmus tests with at most this many processes)"
44
echo " --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')"
45
echo "Defaults: --destdir '$LKMM_DESTDIR_DEF' --herdopts '$LKMM_HERD_OPTIONS_DEF' --hw '$LKMM_HW_MAP_FILE' --jobs '$LKMM_JOBS_DEF' --procs '$LKMM_PROCS_DEF' --timeout '$LKMM_TIMEOUT_DEF'"
46
exit 1
47
}
48
49
usage () {
50
usagehelp 1>&2
51
}
52
53
# checkarg --argname argtype $# arg mustmatch cannotmatch
54
checkarg () {
55
if test $3 -le 1
56
then
57
echo $1 needs argument $2 matching \"$5\"
58
usage
59
fi
60
if echo "$4" | grep -q -e "$5"
61
then
62
:
63
else
64
echo $1 $2 \"$4\" must match \"$5\"
65
usage
66
fi
67
if echo "$4" | grep -q -e "$6"
68
then
69
echo $1 $2 \"$4\" must not match \"$6\"
70
usage
71
fi
72
}
73
74
while test $# -gt 0
75
do
76
case "$1" in
77
--destdir)
78
checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--'
79
LKMM_DESTDIR="$2"
80
mkdir $LKMM_DESTDIR > /dev/null 2>&1
81
if ! test -e "$LKMM_DESTDIR"
82
then
83
echo "Cannot create directory --destdir '$LKMM_DESTDIR'"
84
usage
85
fi
86
if test -d "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR"
87
then
88
:
89
else
90
echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files"
91
usage
92
fi
93
shift
94
;;
95
--herdopts|--herdopt)
96
checkarg --destdir "(herd7 options)" "$#" "$2" '.*' '^--'
97
LKMM_HERD_OPTIONS="$2"
98
shift
99
;;
100
--hw)
101
checkarg --hw "(.map file architecture name)" "$#" "$2" '^[A-Za-z0-9_-]\+' '^--'
102
LKMM_HW_MAP_FILE="$2"
103
shift
104
;;
105
-j[1-9]*)
106
njobs="`echo $1 | sed -e 's/^-j//'`"
107
trailchars="`echo $njobs | sed -e 's/[0-9]\+\(.*\)$/\1/'`"
108
if test -n "$trailchars"
109
then
110
echo $1 trailing characters "'$trailchars'"
111
usagehelp
112
fi
113
LKMM_JOBS="`echo $njobs | sed -e 's/^\([0-9]\+\).*$/\1/'`"
114
;;
115
--jobs|--job|-j)
116
checkarg --jobs "(number)" "$#" "$2" '^[1-9][0-9]*$' '^--'
117
LKMM_JOBS="$2"
118
shift
119
;;
120
--procs|--proc)
121
checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--'
122
LKMM_PROCS="$2"
123
shift
124
;;
125
--timeout)
126
checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--'
127
LKMM_TIMEOUT="$2"
128
shift
129
;;
130
--)
131
shift
132
break
133
;;
134
*)
135
echo Unknown argument $1
136
usage
137
;;
138
esac
139
shift
140
done
141
if test -z "$LKMM_TIMEOUT"
142
then
143
LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD
144
else
145
LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD
146
fi
147
rm -rf $T
148
149