| 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
 | 
| 
 |