#----------------------------------*-sh-*--------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | www.openfoam.com
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
#     Copyright (C) 2016 OpenFOAM Foundation
#     Copyright (C) 2016-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# File
#     etc/config.csh/compiler
#     - sourced by OpenFOAM-*/etc/config.csh/settings
#
# Description
#     Setup for custom compiler versions for OpenFOAM
#     Per-compiler overrides in "compiler-$WM_COMPILER" files
#
# Note
#     The default values for gcc/clang are not a recommendation,
#     but typically correspond to the minimum usable version.
#
#     I_MPI_CC, I_MPI_CXX environment variables may be defined for the
#     Intel mpicc/mpicxx wrappers
#
#------------------------------------------------------------------------------

# Initial mpi/compiler associations
switch ("$WM_COMPILER")
case Icc*:
    setenv I_MPI_CC icc
    setenv I_MPI_CXX icpc
    breaksw
case Icx*:
    setenv I_MPI_CC icx
    setenv I_MPI_CXX icpx
    breaksw
case Gcc*:
    switch ("$WM_MPLIB")
    case INTELMPI*:
        setenv I_MPI_CC gcc
        setenv I_MPI_CXX g++
        breaksw
    endsw
    breaksw
endsw

#------------------------------------------------------------------------------

switch ("$WM_COMPILER_TYPE")
case ThirdParty:
    # Default/minimum versions (compiler, GMP, MPFR, MPC) - override as needed

    set default_clang_version=llvm-3.7.1
    set default_gcc_version=gcc-4.8.5

    set default_gmp_version=gmp-system
    set default_mpfr_version=mpfr-system
    set default_mpc_version=mpc-system

    # Clear any old values
    set gcc_version=''
    set clang_version=''

    switch ("$WM_COMPILER")
    case Gcc:
        set gcc_version="$default_gcc_version"
        breaksw
    case Gcc111*:
        set gcc_version=gcc-11.1.1
        breaksw
    case Gcc103*:
        set gcc_version=gcc-10.3.0
        breaksw
    case Gcc102*:
        set gcc_version=gcc-10.2.0
        breaksw
    case Gcc101*:
        set gcc_version=gcc-10.1.0
        breaksw
    case Gcc93*:
        set gcc_version=gcc-9.3.0
        breaksw
    case Gcc92*:
        set gcc_version=gcc-9.2.0
        breaksw
    case Gcc91*:
        set gcc_version=gcc-9.1.0
        breaksw
    case Gcc84*:
        set gcc_version=gcc-8.4.0
        breaksw
    case Gcc83*:
        set gcc_version=gcc-8.3.0
        breaksw
    case Gcc82*:
        set gcc_version=gcc-8.2.0
        breaksw
    case Gcc81*:
        set gcc_version=gcc-8.1.0
        breaksw
    case Gcc75*:
        set gcc_version=gcc-7.5.0
        breaksw
    case Gcc74*:
        set gcc_version=gcc-7.4.0
        breaksw
    case Gcc73*:
        set gcc_version=gcc-7.3.0
        breaksw
    case Gcc72*:
        set gcc_version=gcc-7.2.0
        breaksw
    case Gcc71*:
        set gcc_version=gcc-7.1.0
        breaksw

    # Older GCC series that receive no further bugfixes
    case Gcc65*:
        set gcc_version=gcc-6.5.0
        breaksw
    case Gcc64*:
        set gcc_version=gcc-6.4.0
        breaksw
    case Gcc63*:
        set gcc_version=gcc-6.3.0
        breaksw
    case Gcc62*:
        set gcc_version=gcc-6.2.0
        breaksw
    case Gcc61*:
        set gcc_version=gcc-6.1.0
        breaksw
    case Gcc55*:
        set gcc_version=gcc-5.5.0
        breaksw
    case Gcc54*:
        set gcc_version=gcc-5.4.0
        breaksw
    case Gcc53*:
        set gcc_version=gcc-5.3.0
        breaksw
    case Gcc52*:
        set gcc_version=gcc-5.2.0
        breaksw
    case Gcc51*:
        set gcc_version=gcc-5.1.0
        breaksw
    case Gcc49*:
        set gcc_version=gcc-4.9.4
        breaksw
    case Gcc48*:
        set gcc_version=gcc-4.8.5
        breaksw

    case Clang:
        set clang_version="$default_clang_version"
        breaksw
    case Clang120*:
        set clang_version=llvm-12.0.0
        breaksw
    case Clang111*:
        set clang_version=llvm-11.1.0
        breaksw
    case Clang110*:
        set clang_version=llvm-11.0.1
        breaksw
    case Clang100*:
        set clang_version=llvm-10.0.1
        breaksw
    case Clang90*:
        set clang_version=llvm-9.0.1
        breaksw
    case Clang80*:
        set clang_version=llvm-8.0.1
        breaksw
    case Clang71*:
        set clang_version=llvm-7.1.0
        breaksw
    case Clang70*:
        set clang_version=llvm-7.0.1
        breaksw
    case Clang60*:
        set clang_version=llvm-6.0.1
        breaksw
    case Clang50*:
        set clang_version=llvm-5.0.2
        breaksw
    case Clang40*:
        set clang_version=llvm-4.0.1
        breaksw
    case Clang39*:
        set clang_version=llvm-3.9.1
        breaksw
    case Clang38*:
        set clang_version=llvm-3.8.1
        breaksw
    case Clang37*:
        set clang_version=llvm-3.7.1
        breaksw

    endsw

    _foamEtc -config prefs.compiler             ## Optional adjustments
    _foamEtc -config "compiler-$WM_COMPILER"    ## Per-compiler override

    # Trap errors
    if ( "${gcc_version}${clang_version}" == "" ) then
        /bin/cat << UNKNOWN_COMPILER
===============================================================================
Warning in $WM_PROJECT_DIR/etc/config.csh/compiler:
Unknown ThirdParty compiler type/version - '$WM_COMPILER'

Please check your settings
===============================================================================
UNKNOWN_COMPILER
    endif
    breaksw
endsw

#------------------------------------------------------------------------------

unset default_gcc_version default_clang_version
unset default_gmp_version default_mpfr_version default_mpc_version

#------------------------------------------------------------------------------
