| Index: source/libvpx/build/make/rtcd.sh
|
| ===================================================================
|
| --- source/libvpx/build/make/rtcd.sh (revision 263011)
|
| +++ source/libvpx/build/make/rtcd.sh (working copy)
|
| @@ -1,373 +0,0 @@
|
| -#!/bin/sh
|
| -self=$0
|
| -
|
| -usage() {
|
| - cat <<EOF >&2
|
| -Usage: $self [options] FILE
|
| -
|
| -Reads the Run Time CPU Detections definitions from FILE and generates a
|
| -C header file on stdout.
|
| -
|
| -Options:
|
| - --arch=ARCH Architecture to generate defs for (required)
|
| - --disable-EXT Disable support for EXT extensions
|
| - --require-EXT Require support for EXT extensions
|
| - --sym=SYMBOL Unique symbol to use for RTCD initialization function
|
| - --config=FILE File with CONFIG_FOO=yes lines to parse
|
| -EOF
|
| - exit 1
|
| -}
|
| -
|
| -die() {
|
| - echo "$@" >&2
|
| - exit 1
|
| -}
|
| -
|
| -die_argument_required() {
|
| - die "Option $opt requires argument"
|
| -}
|
| -
|
| -for opt; do
|
| - optval="${opt#*=}"
|
| - case "$opt" in
|
| - --arch) die_argument_required;;
|
| - --arch=*) arch=${optval};;
|
| - --disable-*) eval "disable_${opt#--disable-}=true";;
|
| - --require-*) REQUIRES="${REQUIRES}${opt#--require-} ";;
|
| - --sym) die_argument_required;;
|
| - --sym=*) symbol=${optval};;
|
| - --config=*) config_file=${optval};;
|
| - -h|--help)
|
| - usage
|
| - ;;
|
| - -*)
|
| - die "Unrecognized option: ${opt%%=*}"
|
| - ;;
|
| - *)
|
| - defs_file="$defs_file $opt"
|
| - ;;
|
| - esac
|
| - shift
|
| -done
|
| -for f in $defs_file; do [ -f "$f" ] || usage; done
|
| -[ -n "$arch" ] || usage
|
| -
|
| -# Import the configuration
|
| -[ -f "$config_file" ] && eval $(grep CONFIG_ "$config_file")
|
| -
|
| -#
|
| -# Routines for the RTCD DSL to call
|
| -#
|
| -prototype() {
|
| - rtyp=""
|
| - case "$1" in
|
| - unsigned) rtyp="$1 "; shift;;
|
| - esac
|
| - rtyp="${rtyp}$1"
|
| - fn="$2"
|
| - args="$3"
|
| -
|
| - eval "${2}_rtyp='$rtyp'"
|
| - eval "${2}_args='$3'"
|
| - ALL_FUNCS="$ALL_FUNCS $fn"
|
| - specialize $fn c
|
| -}
|
| -
|
| -specialize() {
|
| - fn="$1"
|
| - shift
|
| - for opt in "$@"; do
|
| - eval "${fn}_${opt}=${fn}_${opt}"
|
| - done
|
| -}
|
| -
|
| -require() {
|
| - for fn in $ALL_FUNCS; do
|
| - for opt in "$@"; do
|
| - ofn=$(eval "echo \$${fn}_${opt}")
|
| - [ -z "$ofn" ] && continue
|
| -
|
| - # if we already have a default, then we can disable it, as we know
|
| - # we can do better.
|
| - best=$(eval "echo \$${fn}_default")
|
| - best_ofn=$(eval "echo \$${best}")
|
| - [ -n "$best" ] && [ "$best_ofn" != "$ofn" ] && eval "${best}_link=false"
|
| - eval "${fn}_default=${fn}_${opt}"
|
| - eval "${fn}_${opt}_link=true"
|
| - done
|
| - done
|
| -}
|
| -
|
| -forward_decls() {
|
| - ALL_FORWARD_DECLS="$ALL_FORWARD_DECLS $1"
|
| -}
|
| -
|
| -#
|
| -# Include the user's directives
|
| -#
|
| -for f in $defs_file; do
|
| - . $f
|
| -done
|
| -
|
| -#
|
| -# Process the directives according to the command line
|
| -#
|
| -process_forward_decls() {
|
| - for fn in $ALL_FORWARD_DECLS; do
|
| - eval $fn
|
| - done
|
| -}
|
| -
|
| -determine_indirection() {
|
| - [ "$CONFIG_RUNTIME_CPU_DETECT" = "yes" ] || require $ALL_ARCHS
|
| - for fn in $ALL_FUNCS; do
|
| - n=""
|
| - rtyp="$(eval "echo \$${fn}_rtyp")"
|
| - args="$(eval "echo \"\$${fn}_args\"")"
|
| - dfn="$(eval "echo \$${fn}_default")"
|
| - dfn=$(eval "echo \$${dfn}")
|
| - for opt in "$@"; do
|
| - ofn=$(eval "echo \$${fn}_${opt}")
|
| - [ -z "$ofn" ] && continue
|
| - link=$(eval "echo \$${fn}_${opt}_link")
|
| - [ "$link" = "false" ] && continue
|
| - n="${n}x"
|
| - done
|
| - if [ "$n" = "x" ]; then
|
| - eval "${fn}_indirect=false"
|
| - else
|
| - eval "${fn}_indirect=true"
|
| - fi
|
| - done
|
| -}
|
| -
|
| -declare_function_pointers() {
|
| - for fn in $ALL_FUNCS; do
|
| - rtyp="$(eval "echo \$${fn}_rtyp")"
|
| - args="$(eval "echo \"\$${fn}_args\"")"
|
| - dfn="$(eval "echo \$${fn}_default")"
|
| - dfn=$(eval "echo \$${dfn}")
|
| - for opt in "$@"; do
|
| - ofn=$(eval "echo \$${fn}_${opt}")
|
| - [ -z "$ofn" ] && continue
|
| - echo "$rtyp ${ofn}($args);"
|
| - done
|
| - if [ "$(eval "echo \$${fn}_indirect")" = "false" ]; then
|
| - echo "#define ${fn} ${dfn}"
|
| - else
|
| - echo "RTCD_EXTERN $rtyp (*${fn})($args);"
|
| - fi
|
| - echo
|
| - done
|
| -}
|
| -
|
| -set_function_pointers() {
|
| - for fn in $ALL_FUNCS; do
|
| - n=""
|
| - rtyp="$(eval "echo \$${fn}_rtyp")"
|
| - args="$(eval "echo \"\$${fn}_args\"")"
|
| - dfn="$(eval "echo \$${fn}_default")"
|
| - dfn=$(eval "echo \$${dfn}")
|
| - if $(eval "echo \$${fn}_indirect"); then
|
| - echo " $fn = $dfn;"
|
| - for opt in "$@"; do
|
| - ofn=$(eval "echo \$${fn}_${opt}")
|
| - [ -z "$ofn" ] && continue
|
| - [ "$ofn" = "$dfn" ] && continue;
|
| - link=$(eval "echo \$${fn}_${opt}_link")
|
| - [ "$link" = "false" ] && continue
|
| - cond="$(eval "echo \$have_${opt}")"
|
| - echo " if (${cond}) $fn = $ofn;"
|
| - done
|
| - fi
|
| - echo
|
| - done
|
| -}
|
| -
|
| -filter() {
|
| - filtered=""
|
| - for opt in "$@"; do
|
| - [ -z $(eval "echo \$disable_${opt}") ] && filtered="$filtered $opt"
|
| - done
|
| - echo $filtered
|
| -}
|
| -
|
| -#
|
| -# Helper functions for generating the arch specific RTCD files
|
| -#
|
| -common_top() {
|
| - outfile_basename=$(basename ${symbol:-rtcd})
|
| - include_guard=$(echo $outfile_basename | tr '[a-z]' '[A-Z]' | \
|
| - tr -c '[A-Z0-9]' _)H_
|
| - cat <<EOF
|
| -#ifndef ${include_guard}
|
| -#define ${include_guard}
|
| -
|
| -#ifdef RTCD_C
|
| -#define RTCD_EXTERN
|
| -#else
|
| -#define RTCD_EXTERN extern
|
| -#endif
|
| -
|
| -#ifdef __cplusplus
|
| -extern "C" {
|
| -#endif
|
| -
|
| -$(process_forward_decls)
|
| -
|
| -$(declare_function_pointers c $ALL_ARCHS)
|
| -
|
| -void ${symbol:-rtcd}(void);
|
| -EOF
|
| -}
|
| -
|
| -common_bottom() {
|
| - cat <<EOF
|
| -
|
| -#ifdef __cplusplus
|
| -} // extern "C"
|
| -#endif
|
| -
|
| -#endif
|
| -EOF
|
| -}
|
| -
|
| -x86() {
|
| - determine_indirection c $ALL_ARCHS
|
| -
|
| - # Assign the helper variable for each enabled extension
|
| - for opt in $ALL_ARCHS; do
|
| - uc=$(echo $opt | tr '[a-z]' '[A-Z]')
|
| - eval "have_${opt}=\"flags & HAS_${uc}\""
|
| - done
|
| -
|
| - cat <<EOF
|
| -$(common_top)
|
| -
|
| -#ifdef RTCD_C
|
| -#include "vpx_ports/x86.h"
|
| -static void setup_rtcd_internal(void)
|
| -{
|
| - int flags = x86_simd_caps();
|
| -
|
| - (void)flags;
|
| -
|
| -$(set_function_pointers c $ALL_ARCHS)
|
| -}
|
| -#endif
|
| -$(common_bottom)
|
| -EOF
|
| -}
|
| -
|
| -arm() {
|
| - determine_indirection c $ALL_ARCHS
|
| -
|
| - # Assign the helper variable for each enabled extension
|
| - for opt in $ALL_ARCHS; do
|
| - uc=$(echo $opt | tr '[a-z]' '[A-Z]')
|
| - eval "have_${opt}=\"flags & HAS_${uc}\""
|
| - done
|
| -
|
| - cat <<EOF
|
| -$(common_top)
|
| -#include "vpx_config.h"
|
| -
|
| -#ifdef RTCD_C
|
| -#include "vpx_ports/arm.h"
|
| -static void setup_rtcd_internal(void)
|
| -{
|
| - int flags = arm_cpu_caps();
|
| -
|
| - (void)flags;
|
| -
|
| -$(set_function_pointers c $ALL_ARCHS)
|
| -}
|
| -#endif
|
| -$(common_bottom)
|
| -EOF
|
| -}
|
| -
|
| -
|
| -mips() {
|
| - determine_indirection c $ALL_ARCHS
|
| - cat <<EOF
|
| -$(common_top)
|
| -#include "vpx_config.h"
|
| -
|
| -#ifdef RTCD_C
|
| -static void setup_rtcd_internal(void)
|
| -{
|
| -$(set_function_pointers c $ALL_ARCHS)
|
| -#if HAVE_DSPR2
|
| -#if CONFIG_VP8
|
| -void dsputil_static_init();
|
| -dsputil_static_init();
|
| -#endif
|
| -#if CONFIG_VP9
|
| -void vp9_dsputil_static_init();
|
| -vp9_dsputil_static_init();
|
| -#endif
|
| -#endif
|
| -}
|
| -#endif
|
| -$(common_bottom)
|
| -EOF
|
| -}
|
| -
|
| -unoptimized() {
|
| - determine_indirection c
|
| - cat <<EOF
|
| -$(common_top)
|
| -#include "vpx_config.h"
|
| -
|
| -#ifdef RTCD_C
|
| -static void setup_rtcd_internal(void)
|
| -{
|
| -$(set_function_pointers c)
|
| -}
|
| -#endif
|
| -$(common_bottom)
|
| -EOF
|
| -
|
| -}
|
| -#
|
| -# Main Driver
|
| -#
|
| -ALL_FUNCS=$(export LC_ALL=C; echo $ALL_FUNCS | tr ' ' '\n' | sort |tr '\n' ' ')
|
| -require c
|
| -case $arch in
|
| - x86)
|
| - ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1 avx avx2)
|
| - x86
|
| - ;;
|
| - x86_64)
|
| - ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1 avx avx2)
|
| - REQUIRES=${REQUIRES:-mmx sse sse2}
|
| - require $(filter $REQUIRES)
|
| - x86
|
| - ;;
|
| - mips32)
|
| - ALL_ARCHS=$(filter mips32)
|
| - dspr2=$([ -f "$config_file" ] && eval echo $(grep HAVE_DSPR2 "$config_file"))
|
| - HAVE_DSPR2="${dspr2#*=}"
|
| - if [ "$HAVE_DSPR2" = "yes" ]; then
|
| - ALL_ARCHS=$(filter mips32 dspr2)
|
| - fi
|
| - mips
|
| - ;;
|
| - armv5te)
|
| - ALL_ARCHS=$(filter edsp)
|
| - arm
|
| - ;;
|
| - armv6)
|
| - ALL_ARCHS=$(filter edsp media)
|
| - arm
|
| - ;;
|
| - armv7)
|
| - ALL_ARCHS=$(filter edsp media neon)
|
| - arm
|
| - ;;
|
| - *)
|
| - unoptimized
|
| - ;;
|
| -esac
|
|
|