
# Copyright (C) Igor Sysoev


# Sun C 5.7 Patch 117837-04 2005/05/11
# Sun C 5.8 2005/10/13

NGX_SUNC_VER=`$CC -V 2>&1 | grep 'Sun C' 2>&1 \
                          | sed -e 's/^.* Sun C \(.*\)/\1/'`

echo " + Sun C version: $NGX_SUNC_VER"

have=NGX_COMPILER value="\"Sun C $NGX_SUNC_VER\"" . auto/define


case "$NGX_MACHINE" in

    i86pc)
        ngx_feature="PAUSE hardware capability bug"
        ngx_feature_name=
        ngx_feature_run=bug
        ngx_feature_incs=
        ngx_feature_path=
        ngx_feature_libs=
        ngx_feature_test='__asm ("pause")'

        . auto/feature

        if [ $ngx_found = yes ]; then
            # disable [ PAUSE ] hwcap for Sun Studio 11
            CORE_LINK="$CORE_LINK -Msrc/os/unix/ngx_sunpro_x86.map"
        fi

        NGX_AUX=" src/os/unix/ngx_sunpro_x86.il"
    ;;

    sun4u | sun4v)
        # "-xarch=v9" enables the "casa" assembler instruction
        CPU_OPT="-xarch=v9"
        CORE_LINK="$CORE_LINK -xarch=v9"
        NGX_AUX=" src/os/unix/ngx_sunpro_sparc64.il"
    ;;

esac


# optimizations

CFLAGS="$CFLAGS -fast"


case $CPU in
    pentium)
        # optimize for Pentium and Athlon
        CPU_OPT="-xchip=pentium"
    ;;

    pentiumpro)
        # optimize for Pentium Pro, Pentium II
        CPU_OPT="-xchip=pentium_pro"
    ;;

    pentium3)
        # optimize for Pentium III
        CPU_OPT="-xchip=pentium3"
        #CPU_OPT="$CPU_OPT -xarch=sse"
        CPU_OPT="$CPU_OPT -xcache=16/32/4:256/32/4"
    ;;

    pentium4)
        # optimize for Pentium 4
        CPU_OPT="-xchip=pentium4"
        #CPU_OPT="$CPU_OPT -xarch=sse2"
        CPU_OPT="$CPU_OPT -xcache=8/64/4:256/128/8"
    ;;

    opteron)
        # optimize for Opteron
        CPU_OPT="-xchip=opteron"
        #CPU_OPT="$CPU_OPT -xarch=sse2"
        CPU_OPT="$CPU_OPT -xcache=64/64/2:1024/64/16"
    ;;

    amd64)
        # build 64-bit amd64 binary
        CPU_OPT="-xarch=amd64"
        CORE_LINK="$CORE_LINK -xarch=amd64"
        NGX_AUX=" src/os/unix/ngx_sunpro_amd64.il"
    ;;

esac


CFLAGS="$CFLAGS $CPU_OPT"


if [ ".$PCRE_OPT" = "." ]; then
    PCRE_OPT="-fast $CPU_OPT"
fi

if [ ".$MD5_OPT" = "." ]; then
    MD5_OPT="-fast $CPU_OPT"
fi

if [ ".$ZLIB_OPT" = "." ]; then
    ZLIB_OPT="-fast $CPU_OPT"
fi


# stop on warning
CFLAGS="$CFLAGS -errwarn=%all"
