acinclude/ax_gcc_archflag.m4
author Ryan C. Gordon <icculus@icculus.org>
Mon, 29 Oct 2018 20:00:03 -0400
changeset 12369 68c87b40b434
parent 5029 5d7d48157be7
permissions -rw-r--r--
winmain: Don't use SDL_malloc (or SDL_stack_alloc, which might be malloc).

Otherwise, we are using the allocator before the app can set up its own hooks.

Now we use VirtualAlloc, and WideCharToMultiByte (because SDL_iconv uses
SDL_malloc, too!) to get ready to call into SDL_main.

This also makes console_wmain() call into the same routines as everything
else, so we don't have to deal with those allocations, too. Hopefully we
end up with the same results from GetCommandLine() as we do in wargv.

Fixes Bugzilla #4340.
     1 # ===========================================================================
     2 #      http://www.gnu.org/software/autoconf-archive/ax_gcc_archflag.html
     3 # ===========================================================================
     4 #
     5 # SYNOPSIS
     6 #
     7 #   AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE])
     8 #
     9 # DESCRIPTION
    10 #
    11 #   This macro tries to guess the "native" arch corresponding to the target
    12 #   architecture for use with gcc's -march=arch or -mtune=arch flags. If
    13 #   found, the cache variable $ax_cv_gcc_archflag is set to this flag and
    14 #   ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is is set to
    15 #   "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is
    16 #   to add $ax_cv_gcc_archflag to the end of $CFLAGS.
    17 #
    18 #   PORTABLE? should be either [yes] (default) or [no]. In the former case,
    19 #   the flag is set to -mtune (or equivalent) so that the architecture is
    20 #   only used for tuning, but the instruction set used is still portable. In
    21 #   the latter case, the flag is set to -march (or equivalent) so that
    22 #   architecture-specific instructions are enabled.
    23 #
    24 #   The user can specify --with-gcc-arch=<arch> in order to override the
    25 #   macro's choice of architecture, or --without-gcc-arch to disable this.
    26 #
    27 #   When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is
    28 #   called unless the user specified --with-gcc-arch manually.
    29 #
    30 #   Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID
    31 #
    32 #   (The main emphasis here is on recent CPUs, on the principle that doing
    33 #   high-performance computing on old hardware is uncommon.)
    34 #
    35 # LICENSE
    36 #
    37 #   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
    38 #   Copyright (c) 2008 Matteo Frigo
    39 #
    40 #   This program is free software: you can redistribute it and/or modify it
    41 #   under the terms of the GNU General Public License as published by the
    42 #   Free Software Foundation, either version 3 of the License, or (at your
    43 #   option) any later version.
    44 #
    45 #   This program is distributed in the hope that it will be useful, but
    46 #   WITHOUT ANY WARRANTY; without even the implied warranty of
    47 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
    48 #   Public License for more details.
    49 #
    50 #   You should have received a copy of the GNU General Public License along
    51 #   with this program. If not, see <http://www.gnu.org/licenses/>.
    52 #
    53 #   As a special exception, the respective Autoconf Macro's copyright owner
    54 #   gives unlimited permission to copy, distribute and modify the configure
    55 #   scripts that are the output of Autoconf when processing the Macro. You
    56 #   need not follow the terms of the GNU General Public License when using
    57 #   or distributing such scripts, even though portions of the text of the
    58 #   Macro appear in them. The GNU General Public License (GPL) does govern
    59 #   all other use of the material that constitutes the Autoconf Macro.
    60 #
    61 #   This special exception to the GPL applies to versions of the Autoconf
    62 #   Macro released by the Autoconf Archive. When you make and distribute a
    63 #   modified version of the Autoconf Macro, you may extend this special
    64 #   exception to the GPL to apply to your modified version as well.
    65 
    66 #serial 8
    67 
    68 AC_DEFUN([AX_GCC_ARCHFLAG],
    69 [AC_REQUIRE([AC_PROG_CC])
    70 AC_REQUIRE([AC_CANONICAL_HOST])
    71 
    72 AC_ARG_WITH(gcc-arch, [AS_HELP_STRING([--with-gcc-arch=<arch>], [use architecture <arch> for gcc -march/-mtune, instead of guessing])],
    73 	ax_gcc_arch=$withval, ax_gcc_arch=yes)
    74 
    75 AC_MSG_CHECKING([for gcc architecture flag])
    76 AC_MSG_RESULT([])
    77 AC_CACHE_VAL(ax_cv_gcc_archflag,
    78 [
    79 ax_cv_gcc_archflag="unknown"
    80 
    81 if test "$GCC" = yes; then
    82 
    83 if test "x$ax_gcc_arch" = xyes; then
    84 ax_gcc_arch=""
    85 if test "$cross_compiling" = no; then
    86 case $host_cpu in
    87   i[[3456]]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones
    88      AX_GCC_X86_CPUID(0)
    89      AX_GCC_X86_CPUID(1)
    90      case $ax_cv_gcc_x86_cpuid_0 in
    91        *:756e6547:*:*) # Intel
    92           case $ax_cv_gcc_x86_cpuid_1 in
    93 	    *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
    94 	    *5??:*:*:*) ax_gcc_arch=pentium ;;
    95 	    *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
    96 	    *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
    97 	    *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
    98 	    *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
    99 	    *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
   100 	    *6??:*:*:*) ax_gcc_arch=pentiumpro ;;
   101             *f3[[347]]:*:*:*|*f4[1347]:*:*:*)
   102 		case $host_cpu in
   103                   x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
   104                   *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
   105                 esac ;;
   106             *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";;
   107           esac ;;
   108        *:68747541:*:*) # AMD
   109           case $ax_cv_gcc_x86_cpuid_1 in
   110 	    *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;;
   111 	    *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
   112 	    *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
   113 	    *60?:*:*:*) ax_gcc_arch=k7 ;;
   114 	    *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;;
   115 	    *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
   116 	    *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
   117 	    *6[[68a]]?:*:*:*)
   118 	       AX_GCC_X86_CPUID(0x80000006) # L2 cache size
   119 	       case $ax_cv_gcc_x86_cpuid_0x80000006 in
   120                  *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
   121 			ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
   122                  *) ax_gcc_arch="athlon-4 athlon k7" ;;
   123 	       esac ;;
   124 	    *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
   125 	    *f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
   126 	    *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
   127 	    *f??:*:*:*) ax_gcc_arch="k8" ;;
   128           esac ;;
   129 	*:746e6543:*:*) # IDT
   130 	   case $ax_cv_gcc_x86_cpuid_1 in
   131 	     *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
   132 	     *58?:*:*:*) ax_gcc_arch=winchip2 ;;
   133 	     *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;;
   134 	     *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
   135 	   esac ;;
   136      esac
   137      if test x"$ax_gcc_arch" = x; then # fallback
   138 	case $host_cpu in
   139 	  i586*) ax_gcc_arch=pentium ;;
   140 	  i686*) ax_gcc_arch=pentiumpro ;;
   141         esac
   142      fi
   143      ;;
   144 
   145   sparc*)
   146      AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
   147      cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
   148      cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters`
   149      case $cputype in
   150          *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
   151          *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
   152          *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
   153          *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;;
   154          *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;;
   155          *cypress*) ax_gcc_arch=cypress ;;
   156      esac ;;
   157 
   158   alphaev5) ax_gcc_arch=ev5 ;;
   159   alphaev56) ax_gcc_arch=ev56 ;;
   160   alphapca56) ax_gcc_arch="pca56 ev56" ;;
   161   alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
   162   alphaev6) ax_gcc_arch=ev6 ;;
   163   alphaev67) ax_gcc_arch=ev67 ;;
   164   alphaev68) ax_gcc_arch="ev68 ev67" ;;
   165   alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
   166   alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
   167   alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
   168 
   169   powerpc*)
   170      cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
   171      cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
   172      case $cputype in
   173        *750*) ax_gcc_arch="750 G3" ;;
   174        *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;;
   175        *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;;
   176        *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;;
   177        *970*) ax_gcc_arch="970 G5 power4";;
   178        *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
   179        *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
   180        603ev|8240) ax_gcc_arch="$cputype 603e 603";;
   181        *) ax_gcc_arch=$cputype ;;
   182      esac
   183      ax_gcc_arch="$ax_gcc_arch powerpc"
   184      ;;
   185 esac
   186 fi # not cross-compiling
   187 fi # guess arch
   188 
   189 if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
   190 for arch in $ax_gcc_arch; do
   191   if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code
   192     flags="-mtune=$arch"
   193     # -mcpu=$arch and m$arch generate nonportable code on every arch except
   194     # x86.  And some other arches (e.g. Alpha) don't accept -mtune.  Grrr.
   195     case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac
   196   else
   197     flags="-march=$arch -mcpu=$arch -m$arch"
   198   fi
   199   for flag in $flags; do
   200     AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break])
   201   done
   202   test "x$ax_cv_gcc_archflag" = xunknown || break
   203 done
   204 fi
   205 
   206 fi # $GCC=yes
   207 ])
   208 AC_MSG_CHECKING([for gcc architecture flag])
   209 AC_MSG_RESULT($ax_cv_gcc_archflag)
   210 if test "x$ax_cv_gcc_archflag" = xunknown; then
   211   m4_default([$3],:)
   212 else
   213   m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"])
   214 fi
   215 ])