Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/MariaDB/BUILD/   (MariaDB Server Version 8.1-8.4©)  Datei vom 1.9.2026 mit Größe 7 kB image not shown  

Quelle  check-cpu   Sprache: C

 

#!/bin/sh
# Copyright (c) 2005, 2010, Oracle and/or its affiliates.
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA

#
# Check cpu of current machine and find the
# best compiler optimization flags for gcc
# Will return result in:
# cpu_arg        : Type of CPU
# low_cpu_arg    : Type of CPU used up until GCC v3.3
# check_cpu_args : Arguments for GCC compiler settings
#

check_compiler_cpu_flags () {
  # different compiler versions have different option names
  # for CPU specific command line options
  if test -z "$CC" ; then
    cc="gcc";
  else
    cc=$CC
  fi

  # check if compiler is gcc and dump its version
  cc_verno=`$cc -dumpversion 2>/dev/null`
  if test "x$?" = "x0" ; then
    set -- `echo $cc_verno | tr '.' ' '`
    cc_ver="GCC"
    cc_major=$1
    cc_minor=$2
    cc_patch=$3
    if test -z "$cc_minor"; then
      cc_minor="0";
    fi
    if test -z "$cc_patch"; then
      cc_minor="0";
    fi
    cc_comp=`expr $cc_major '*' 100 '+' $cc_minor`
  fi

  case "$cc_ver--$cc_verno" in
    *GCC*)
        # different gcc backends (and versions) have different CPU flags
        case `gcc -dumpmachine` in
          i?86-* | x86_64-*)
     if test "$cc_comp" -lt 304 ; then
              check_cpu_cflags="-mcpu=${low_cpu_arg}"
            elif test "$cc_comp" -ge 402 ; then
              check_cpu_cflags="-mtune=native"
            else
              check_cpu_cflags="-mtune=${cpu_arg}"
            fi
            ;;
          ppc-*)
              check_cpu_cflags="-mcpu=${cpu_arg} -mtune=${cpu_arg}"
            ;;
          *)
            check_cpu_cflags=""
            return
            ;;
        esac
      ;;
    2.95.*)
      # GCC 2.95 doesn't expose its name in --version output
      check_cpu_cflags="-m${cpu_arg}"
      ;;
    *)
      check_cpu_cflags=""
      return
      ;;
  esac

  # now we check whether the compiler really understands the cpu type
  touch __test.c

  while [ "$cpu_arg" ] ; do
    printf "testing $cpu_arg ... " >&2

    # compile check
    eval "$cc -c $check_cpu_cflags __test.c" 2>/dev/null
    if test "x$?" = "x0" ; then
      echo ok >&2
      break;
    fi

    echo failed >&2
    check_cpu_cflags=""
    break;
  done
  rm __test.*
  return 0
}

check_cpu () {
  CPUINFO=/proc/cpuinfo
  if test -n "$TEST_CPUINFO" ; then
    CPUINFO=$TEST_CPUINFO
  fi
  if test -r "$CPUINFO" -a "$CPUINFO" != " " ; then
    # on Linux (and others?) we can get detailed CPU information out of /proc
    cpuinfo="cat $CPUINFO"

    # detect CPU architecture
    cpu_arch=`$cpuinfo | grep 'arch' | cut -d ':' -f 2 | cut -d ' ' -f 2 | head -1`

    # detect CPU family
    cpu_family=`$cpuinfo | grep 'family' | cut -d ':' -f 2 | cut -d ' ' -f 2 | head -1`
    if test -z "$cpu_family" ; then
      cpu_family=`$cpuinfo | grep 'cpu' | cut -d ':' -f 2 | cut -d ' ' -f 2 | head -1`
    fi

    # detect CPU vendor and model
    cpu_vendor=`$cpuinfo | grep 'vendor_id' | cut -d ':' -f 2 | cut -d ' ' -f 2 | head -1`
    model_name=`$cpuinfo | grep 'model name' | cut -d ':' -f 2 | head -1`
    if test -z "$model_name" ; then
      model_name=`$cpuinfo | grep 'cpu model' | cut -d ':' -f 2 | head -1`
    fi

    # fallback: get CPU model from uname output
    if test -z "$model_name" ; then
      model_name=`uname -m`
    fi

    # parse CPU flags
    for flag in `$cpuinfo | grep '^flags' | sed -e 's/^flags.*: //' -e 's/[^a-zA-Z0-9_ ]/_/g'`; do 
      eval cpu_flag_$flag=yes
    done
  else
    # Fallback when there is no /proc/cpuinfo
    CPUINFO=" "
    case "`uname -s`" in
      FreeBSD|OpenBSD)
        cpu_family=`uname -m`;
        model_name=`sysctl -n hw.model`
        ;;
      Darwin)
        cpu_family=`sysctl -n machdep.cpu.vendor`
        model_name=`sysctl -n machdep.cpu.brand_string`
        if [ -z "$cpu_family" -o -z "$model_name" ]
        then  
          cpu_family=`uname -p`
          model_name=`machine`
        fi  
        ;;
      *)
        cpu_family=`uname -p`;
        model_name=`uname -m`;
        ;;
    esac
  fi

  # detect CPU shortname as used by gcc options 
  # this list is not complete, feel free to add further entries
  cpu_arg=""
  low_cpu_arg=""
  case "$cpu_vendor--$cpu_family--$model_name--$spu_arch" in
    # DEC Alpha
    *Alpha*EV6*)
      cpu_arg="ev6";
      ;;
    #Core 2 Duo  
    *Intel*Core\(TM\)2*)
      cpu_arg="nocona"
      core2="yes"
      ;;
    # Intel ia32
    *Intel*Core*|*X[eE][oO][nN]*)
      # a Xeon is just another pentium4 ...
      # ... unless it has the "lm" (long-mode) flag set, 
      # in that case it's a Xeon with EM64T support
      # If SSE3 support exists it is a Core2 Duo or newer
      # So is Intel Core.
      if [ -z "$cpu_flag_lm" ]; then
        cpu_arg="pentium4"
      else
        cpu_arg="nocona"
      fi
      if test -z "$cpu_flag_ssse3" ; then
        core2="no"
      else
        core2="yes"
      fi
      ;;
    *Pentium*4*Mobile*)
      cpu_arg="pentium4m"
      ;;
    *Pentium\(R\)*\ M*)
      cpu_arg="pentium-m"
      low_cpu_arg="pentium3"
      ;;
    *Pentium\(R\)*\ D*)
      cpu_arg="prescott"
      ;;
    *Pentium*4*)
      cpu_arg="pentium4"
      ;;
    *Pentium*III*Mobile*)
      cpu_arg="pentium3m"
      ;;
    *Pentium*III*)
      cpu_arg="pentium3"
      ;;
    *Pentium*M*pro*)
      cpu_arg="pentium-m"
    ;;
    *Celeron\(R\)*\ M*)
      cpu_arg="pentium-m"
      ;;
    *Celeron*Coppermine*)
      cpu_arg="pentium3"
      ;;
    *Celeron\(R\)*)
      cpu_arg="pentium4"
      ;;
    *Celeron*)
      cpu_arg="pentium2"
      ;;
    *Atom*)
      cpu_arg="prescott"
      ;;
    *GenuineIntel*)
      cpu_arg="pentium"
      ;;
    *Turion*)
      cpu_arg="athlon64"
      ;;
    *Athlon*64*)
      cpu_arg="athlon64"
      ;;
    *Athlon*)
      cpu_arg="athlon"
      ;;
    *AMD-K7*)
      cpu_arg="athlon"
      ;;
    *Athlon*XP\ *)
      cpu_arg="athlon-xp"
      ;;
    *AMD*Sempron\(tm\)*)
      cpu_arg="athlon-mp"
      ;;
    *AMD*Athlon\(tm\)\ 64*)
      cpu_arg="k8"
      ;;
    *Opteron*)
      cpu_arg="opteron"
      ;;
    *Phenom*)
      cpu_arg="k8"
      ;;
    *AuthenticAMD*)
      cpu_arg="k6"
      ;;
    *HygonGenuine*)
      cpu_arg="k8"
      ;;
    *VIA\ *)
      cpu_arg="i686"
      ;;
    # MacOSX / Intel  
    *i386*i486*)
      cpu_arg="pentium-m"
      ;;
    *i386*)
      cpu_arg="i386"
      ;;
    # Intel ia64
    *Itanium*)
      cpu_arg="itanium"
      ;;
    *IA-64*)
      cpu_arg="itanium"
      ;;
    # Solaris Sparc
    *sparc*sun4[uv]*)
      cpu_arg="sparc"
      ;;
    # Power PC
    *ppc*)
      cpu_arg="powerpc"
      ;;
    *powerpc*)
      cpu_arg="powerpc"
      ;;
    # unknown
    *)
      cpu_arg=""
      ;;
  esac

  if test "x$low_cpu_arg" = "x" ; then
    low_cpu_arg="$cpu_arg"
  fi

  if test -z "$cpu_arg" ; then
    if test "$CPUINFO" != " " ; then
      # fallback to uname if necessary
      TEST_CPUINFO=" "
      check_cpu_cflags=""
      check_cpu
      return
    fi
    echo "BUILD/check-cpu: Oops, could not find out what kind of cpu this machine is using." >&tyle='color: green'>2
    check_cpu_cflags=""
    return
  fi

  if test "x$compiler" = "x" ; then
    check_compiler_cpu_flags
  fi

  if test "x$core2" = "xyes" ; then
    cpu_arg="core2"
  fi

  return 0
}

check_cpu

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet am  2026-10-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.