Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: source/libvpx/build/make/rtcd.sh

Issue 232133009: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/build/make/rtcd.pl ('k') | source/libvpx/build/make/thumb.pm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/bin/sh
2 self=$0
3
4 usage() {
5 cat <<EOF >&2
6 Usage: $self [options] FILE
7
8 Reads the Run Time CPU Detections definitions from FILE and generates a
9 C header file on stdout.
10
11 Options:
12 --arch=ARCH Architecture to generate defs for (required)
13 --disable-EXT Disable support for EXT extensions
14 --require-EXT Require support for EXT extensions
15 --sym=SYMBOL Unique symbol to use for RTCD initialization function
16 --config=FILE File with CONFIG_FOO=yes lines to parse
17 EOF
18 exit 1
19 }
20
21 die() {
22 echo "$@" >&2
23 exit 1
24 }
25
26 die_argument_required() {
27 die "Option $opt requires argument"
28 }
29
30 for opt; do
31 optval="${opt#*=}"
32 case "$opt" in
33 --arch) die_argument_required;;
34 --arch=*) arch=${optval};;
35 --disable-*) eval "disable_${opt#--disable-}=true";;
36 --require-*) REQUIRES="${REQUIRES}${opt#--require-} ";;
37 --sym) die_argument_required;;
38 --sym=*) symbol=${optval};;
39 --config=*) config_file=${optval};;
40 -h|--help)
41 usage
42 ;;
43 -*)
44 die "Unrecognized option: ${opt%%=*}"
45 ;;
46 *)
47 defs_file="$defs_file $opt"
48 ;;
49 esac
50 shift
51 done
52 for f in $defs_file; do [ -f "$f" ] || usage; done
53 [ -n "$arch" ] || usage
54
55 # Import the configuration
56 [ -f "$config_file" ] && eval $(grep CONFIG_ "$config_file")
57
58 #
59 # Routines for the RTCD DSL to call
60 #
61 prototype() {
62 rtyp=""
63 case "$1" in
64 unsigned) rtyp="$1 "; shift;;
65 esac
66 rtyp="${rtyp}$1"
67 fn="$2"
68 args="$3"
69
70 eval "${2}_rtyp='$rtyp'"
71 eval "${2}_args='$3'"
72 ALL_FUNCS="$ALL_FUNCS $fn"
73 specialize $fn c
74 }
75
76 specialize() {
77 fn="$1"
78 shift
79 for opt in "$@"; do
80 eval "${fn}_${opt}=${fn}_${opt}"
81 done
82 }
83
84 require() {
85 for fn in $ALL_FUNCS; do
86 for opt in "$@"; do
87 ofn=$(eval "echo \$${fn}_${opt}")
88 [ -z "$ofn" ] && continue
89
90 # if we already have a default, then we can disable it, as we know
91 # we can do better.
92 best=$(eval "echo \$${fn}_default")
93 best_ofn=$(eval "echo \$${best}")
94 [ -n "$best" ] && [ "$best_ofn" != "$ofn" ] && eval "${best}_link=false"
95 eval "${fn}_default=${fn}_${opt}"
96 eval "${fn}_${opt}_link=true"
97 done
98 done
99 }
100
101 forward_decls() {
102 ALL_FORWARD_DECLS="$ALL_FORWARD_DECLS $1"
103 }
104
105 #
106 # Include the user's directives
107 #
108 for f in $defs_file; do
109 . $f
110 done
111
112 #
113 # Process the directives according to the command line
114 #
115 process_forward_decls() {
116 for fn in $ALL_FORWARD_DECLS; do
117 eval $fn
118 done
119 }
120
121 determine_indirection() {
122 [ "$CONFIG_RUNTIME_CPU_DETECT" = "yes" ] || require $ALL_ARCHS
123 for fn in $ALL_FUNCS; do
124 n=""
125 rtyp="$(eval "echo \$${fn}_rtyp")"
126 args="$(eval "echo \"\$${fn}_args\"")"
127 dfn="$(eval "echo \$${fn}_default")"
128 dfn=$(eval "echo \$${dfn}")
129 for opt in "$@"; do
130 ofn=$(eval "echo \$${fn}_${opt}")
131 [ -z "$ofn" ] && continue
132 link=$(eval "echo \$${fn}_${opt}_link")
133 [ "$link" = "false" ] && continue
134 n="${n}x"
135 done
136 if [ "$n" = "x" ]; then
137 eval "${fn}_indirect=false"
138 else
139 eval "${fn}_indirect=true"
140 fi
141 done
142 }
143
144 declare_function_pointers() {
145 for fn in $ALL_FUNCS; do
146 rtyp="$(eval "echo \$${fn}_rtyp")"
147 args="$(eval "echo \"\$${fn}_args\"")"
148 dfn="$(eval "echo \$${fn}_default")"
149 dfn=$(eval "echo \$${dfn}")
150 for opt in "$@"; do
151 ofn=$(eval "echo \$${fn}_${opt}")
152 [ -z "$ofn" ] && continue
153 echo "$rtyp ${ofn}($args);"
154 done
155 if [ "$(eval "echo \$${fn}_indirect")" = "false" ]; then
156 echo "#define ${fn} ${dfn}"
157 else
158 echo "RTCD_EXTERN $rtyp (*${fn})($args);"
159 fi
160 echo
161 done
162 }
163
164 set_function_pointers() {
165 for fn in $ALL_FUNCS; do
166 n=""
167 rtyp="$(eval "echo \$${fn}_rtyp")"
168 args="$(eval "echo \"\$${fn}_args\"")"
169 dfn="$(eval "echo \$${fn}_default")"
170 dfn=$(eval "echo \$${dfn}")
171 if $(eval "echo \$${fn}_indirect"); then
172 echo " $fn = $dfn;"
173 for opt in "$@"; do
174 ofn=$(eval "echo \$${fn}_${opt}")
175 [ -z "$ofn" ] && continue
176 [ "$ofn" = "$dfn" ] && continue;
177 link=$(eval "echo \$${fn}_${opt}_link")
178 [ "$link" = "false" ] && continue
179 cond="$(eval "echo \$have_${opt}")"
180 echo " if (${cond}) $fn = $ofn;"
181 done
182 fi
183 echo
184 done
185 }
186
187 filter() {
188 filtered=""
189 for opt in "$@"; do
190 [ -z $(eval "echo \$disable_${opt}") ] && filtered="$filtered $opt"
191 done
192 echo $filtered
193 }
194
195 #
196 # Helper functions for generating the arch specific RTCD files
197 #
198 common_top() {
199 outfile_basename=$(basename ${symbol:-rtcd})
200 include_guard=$(echo $outfile_basename | tr '[a-z]' '[A-Z]' | \
201 tr -c '[A-Z0-9]' _)H_
202 cat <<EOF
203 #ifndef ${include_guard}
204 #define ${include_guard}
205
206 #ifdef RTCD_C
207 #define RTCD_EXTERN
208 #else
209 #define RTCD_EXTERN extern
210 #endif
211
212 #ifdef __cplusplus
213 extern "C" {
214 #endif
215
216 $(process_forward_decls)
217
218 $(declare_function_pointers c $ALL_ARCHS)
219
220 void ${symbol:-rtcd}(void);
221 EOF
222 }
223
224 common_bottom() {
225 cat <<EOF
226
227 #ifdef __cplusplus
228 } // extern "C"
229 #endif
230
231 #endif
232 EOF
233 }
234
235 x86() {
236 determine_indirection c $ALL_ARCHS
237
238 # Assign the helper variable for each enabled extension
239 for opt in $ALL_ARCHS; do
240 uc=$(echo $opt | tr '[a-z]' '[A-Z]')
241 eval "have_${opt}=\"flags & HAS_${uc}\""
242 done
243
244 cat <<EOF
245 $(common_top)
246
247 #ifdef RTCD_C
248 #include "vpx_ports/x86.h"
249 static void setup_rtcd_internal(void)
250 {
251 int flags = x86_simd_caps();
252
253 (void)flags;
254
255 $(set_function_pointers c $ALL_ARCHS)
256 }
257 #endif
258 $(common_bottom)
259 EOF
260 }
261
262 arm() {
263 determine_indirection c $ALL_ARCHS
264
265 # Assign the helper variable for each enabled extension
266 for opt in $ALL_ARCHS; do
267 uc=$(echo $opt | tr '[a-z]' '[A-Z]')
268 eval "have_${opt}=\"flags & HAS_${uc}\""
269 done
270
271 cat <<EOF
272 $(common_top)
273 #include "vpx_config.h"
274
275 #ifdef RTCD_C
276 #include "vpx_ports/arm.h"
277 static void setup_rtcd_internal(void)
278 {
279 int flags = arm_cpu_caps();
280
281 (void)flags;
282
283 $(set_function_pointers c $ALL_ARCHS)
284 }
285 #endif
286 $(common_bottom)
287 EOF
288 }
289
290
291 mips() {
292 determine_indirection c $ALL_ARCHS
293 cat <<EOF
294 $(common_top)
295 #include "vpx_config.h"
296
297 #ifdef RTCD_C
298 static void setup_rtcd_internal(void)
299 {
300 $(set_function_pointers c $ALL_ARCHS)
301 #if HAVE_DSPR2
302 #if CONFIG_VP8
303 void dsputil_static_init();
304 dsputil_static_init();
305 #endif
306 #if CONFIG_VP9
307 void vp9_dsputil_static_init();
308 vp9_dsputil_static_init();
309 #endif
310 #endif
311 }
312 #endif
313 $(common_bottom)
314 EOF
315 }
316
317 unoptimized() {
318 determine_indirection c
319 cat <<EOF
320 $(common_top)
321 #include "vpx_config.h"
322
323 #ifdef RTCD_C
324 static void setup_rtcd_internal(void)
325 {
326 $(set_function_pointers c)
327 }
328 #endif
329 $(common_bottom)
330 EOF
331
332 }
333 #
334 # Main Driver
335 #
336 ALL_FUNCS=$(export LC_ALL=C; echo $ALL_FUNCS | tr ' ' '\n' | sort |tr '\n' ' ')
337 require c
338 case $arch in
339 x86)
340 ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1 avx avx2)
341 x86
342 ;;
343 x86_64)
344 ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1 avx avx2)
345 REQUIRES=${REQUIRES:-mmx sse sse2}
346 require $(filter $REQUIRES)
347 x86
348 ;;
349 mips32)
350 ALL_ARCHS=$(filter mips32)
351 dspr2=$([ -f "$config_file" ] && eval echo $(grep HAVE_DSPR2 "$config_file") )
352 HAVE_DSPR2="${dspr2#*=}"
353 if [ "$HAVE_DSPR2" = "yes" ]; then
354 ALL_ARCHS=$(filter mips32 dspr2)
355 fi
356 mips
357 ;;
358 armv5te)
359 ALL_ARCHS=$(filter edsp)
360 arm
361 ;;
362 armv6)
363 ALL_ARCHS=$(filter edsp media)
364 arm
365 ;;
366 armv7)
367 ALL_ARCHS=$(filter edsp media neon)
368 arm
369 ;;
370 *)
371 unoptimized
372 ;;
373 esac
OLDNEW
« no previous file with comments | « source/libvpx/build/make/rtcd.pl ('k') | source/libvpx/build/make/thumb.pm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698