Compiler Setup and Handling in ATLAS Config

This is complicated as hell. Potentially, each architecture/OS combo has unique compiler and flags for each supported compiler (more below), and the user can override any/all of these. I'm changing the number of supported compilers for greater flexability. These are:

ICC
: compiles all C interface routines. Since it is not used for any kernel compilation the performance impact of this compiler should be minimal.
SMC
: used to compile ATLAS single precision matmul kernels
DMC
: used to compile ATLAS double precision matmul kernels
SKC
: used to compile all non-interface, non-gemm-kernel single precision ATLAS routines
DKC
: used to compile all non-interface, non-gemm-kernel double precision ATLAS routines
XCC
: used to compile all front-end codes
GCC
: used to assemble assembly files and to compile kernels that call for gcc
F77
: Valid fixed-format Fortran77 compiler that compiles ATLAS's F77 interface routines. This should match the Fortran77 the user is using. This compiler's performance does not affect ATLAS's performance, and so may be anything.

Here's my present design:

  1. Compiler defaults: are read in from atlcomp.txt, which allows the user specify default compiler/flags, as well as specific ones for particular architectures, and multiple compilers for a given arch.
  2. Executable search: takes name of executable (in this case a compiler name), and finds the path to it. Skipped if the user provides the path as part of the compiler.
  3. C compiler interaction probe: separate probe that takes two or more C compilers and their flags as arguments, and makes sure they are able to call each other w/o problems.
  4. F77/C calling convention probe: as in present config, but as an independent probe.

Clint Whaley 2012-07-10