# /*@@
#   @file    make.config.defn.in
#   @date    Sun Jan 17 22:33:51 1999
#   @author  Tom Goodale
#   @desc
#            Make definition file for a configuration
#            Defines the compilers, etc.
#
#            Should be run through autoconf to produce make.config.defn
#   @enddesc
#   @version $Header$
# @@*/

# Include stuff defined by optional extra arrangements
include $(TOP)/config-data/make.extra.defn

# Include all required external libraries from configuration
-include $(TOP)/bindings/Configuration/make.link


# Compiler/executable info
export SHELL       = /bin/bash
export MKDIR       = mkdir
export CC          = gcc
export CXX         = g++
export CUCC        = 
export F90         = gfortran
export F77         = gfortran
export CPP         = cpp
export FPP         = cpp
export LD          = g++
export AR          = ar
export RANLIB      = ranlib
export PERL        = perl
# MAKE needs no definition, since make will set this variable automatically
export MAKE
export TAR         = tar
export XARGS       = xargs
# GZIP is used by gzip for a list of default options, thus we use GZIP_CMD
export GZIP_CMD    = gzip
export PATCH       = patch
export GIT         = git

export CFLAGS      = -g3 -march=native -std=gnu99
export CXXFLAGS    = -g3 -march=native -std=gnu++0x
export CUCCFLAGS   = 
export F90FLAGS    = -g3 -march=native -fcray-pointer -m128bit-long-double -ffixed-line-length-none -fno-range-check
export F77FLAGS    = -g3 -march=native -fcray-pointer -m128bit-long-double -ffixed-line-length-none -fno-range-check
export CPPFLAGS    = -DMPICH_IGNORE_CXX_SEEK
export FPPFLAGS    = -traditional

export C_LINE_DIRECTIVES = yes
export F_LINE_DIRECTIVES = yes

# Compiler versions as detected at configure time
# CPP: 
# CC:  gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04.3) 
# CXX: gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04.3) 
# CUCC: 
# FPP: 
# F77: GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
# F90: GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

export MKDIRFLAGS  = -p

export LDFLAGS     =  -rdynamic

export ARFLAGS     = rcs
export RANLIBFLAGS = -cs
export LIBDIR_PREFIX = -L
export RUNDIR_PREFIX = -Wl,-rpath,
export LIBLINK_PREFIX = -l

# Debug flags
export CPP_DEBUG_FLAGS = -DCARPET_DEBUG
export FPP_DEBUG_FLAGS = -DCARPET_DEBUG
export C_DEBUG_FLAGS   = -O0
export CXX_DEBUG_FLAGS = -O0
export CUCC_DEBUG_FLAGS = -g
export F90_DEBUG_FLAGS = -O0
export F77_DEBUG_FLAGS = -O0
export LD_DEBUG_FLAGS = -O0

# Optimisation flags
export CPP_OPTIMISE_FLAGS = -DKRANC_VECTORS
export FPP_OPTIMISE_FLAGS = 
export C_OPTIMISE_FLAGS   = -Ofast
export CXX_OPTIMISE_FLAGS = -Ofast
export CUCC_OPTIMISE_FLAGS = -O2
export F90_OPTIMISE_FLAGS = -Ofast
export F77_OPTIMISE_FLAGS = -Ofast
export LD_OPTIMISE_FLAGS = -Ofast

# No-optimisation flags
export C_NO_OPTIMISE_FLAGS   = -O0
export CXX_NO_OPTIMISE_FLAGS = -O0
export CUCC_NO_OPTIMISE_FLAGS = -O0
export F90_NO_OPTIMISE_FLAGS = -O0
export F77_NO_OPTIMISE_FLAGS = -O0
export LD_NO_OPTIMISE_FLAGS = -O0

# Profiling flags
export CPP_PROFILE_FLAGS = 
export FPP_PROFILE_FLAGS = 
export C_PROFILE_FLAGS   = -pg
export CXX_PROFILE_FLAGS = -pg
export CUCC_PROFILE_FLAGS = 
export F90_PROFILE_FLAGS = -pg
export F77_PROFILE_FLAGS = -pg
export LD_PROFILE_FLAGS = -pg

# OpenMP flags
export CPP_OPENMP_FLAGS = -fopenmp
export FPP_OPENMP_FLAGS = -fopenmp
export C_OPENMP_FLAGS   = -fopenmp
export CXX_OPENMP_FLAGS = -fopenmp
export CUCC_OPENMP_FLAGS = 
export F90_OPENMP_FLAGS = -fopenmp
export F77_OPENMP_FLAGS = -fopenmp
export LD_OPENMP_FLAGS = -fopenmp

# Warning flags
export CPP_WARN_FLAGS = -Wall
export FPP_WARN_FLAGS = -Wall
export C_WARN_FLAGS   = -Wall
export CXX_WARN_FLAGS = -Wall
export CUCC_WARN_FLAGS = 
export F90_WARN_FLAGS = -Wall
export F77_WARN_FLAGS = -Wall
export LD_WARN_FLAGS = -Wall

# Most compilers use -c -o to compile only, some do something different
export CCOMPILEONLY = -c -o
export FCOMPILEONLY = -c -o

# Most compilers use -o for naming the executable, alas some don't
export CREATEEXE = -o

# On Unix a /
export DIRSEP = /

export EMPTY_VAR = # Nothing.  Leading space is removed.

# Mostly a single space, sometimes nothing at all
export OPTIONSEP = $(EMPTY_VAR) # a single space

# Some architectures need to do something special for linking in libraries
export LIBNAME_PREFIX = lib# Make sure there is no space at end.
export LIBNAME_SUFFIX = .a

export BEGIN_WHOLE_ARCHIVE_FLAGS = -Wl,--whole-archive
export END_WHOLE_ARCHIVE_FLAGS   = -Wl,--no-whole-archive

export CACTUSLIBLINKLINE = -L$(CCTK_LIBDIR) $(addprefix -l, $(ALLCACTUSLIBS))

# Dependency file generation
export C_DEPEND             = $(CC) -E -M $(CPPFLAGS) $(CFLAGS)
export CXX_DEPEND           = $(CXX) -E -M $(CPPFLAGS) $(CXXFLAGS)
export CL_DEPEND            = echo :
export CUCC_DEPEND          = $(CUCC) -M $(CUCCFLAGS)
export F77_DEPEND           = $(FPP) -M $(FPPFLAGS)
export F_DEPEND             = $(FPP) -M $(FPPFLAGS)
export F_DEPEND_MODULES     = $(CCTK_HOME)/lib/sbin/f_depend_modules.pl

export C_DEPEND_OUT         =  > $@
export CXX_DEPEND_OUT       =  > $@
export CL_DEPEND_OUT        =  > $@
export CUCC_DEPEND_OUT      =  > $@
export F77_DEPEND_OUT       =  > $@
export F_DEPEND_OUT         =  > $@
export F_DEPEND_MODULES_OUT =  >> $@

# Some compilers are very picky about the names of C++ files
export CXX_WORKING_NAME = $(notdir $<)

# Some compilers are very picky about the suffix for fortran files
export F90_SUFFIX = f90

# How to postprocess object files
export C_POSTPROCESSING    = 
export CXX_POSTPROCESSING  = 
export CL_POSTPROCESSING   = 
export CUCC_POSTPROCESSING = 
export F77_POSTPROCESSING  = 
export F_POSTPROCESSING    = 
export F90_POSTPROCESSING  = 

# Do we need to use ranlib ?
export USE_RANLIB = no

# Exclude some files from the dependency lists
export DEP_EXCLUDE_FILES = CParameterStructNames\.h

# Command used to get the working directory
export GET_WD = pwd

# Way for Make to transofrm things like include directories
# into a form suitable for the compiler.

export TRANSFORM_DIRS = $(1)

# Library info
export LIBS    += m m m m m m m m crypt  gfortran
export LIBDIRS += 

# Command to generate the link line for libraries
export GENERAL_LIBRARIES = $(patsubst $(LIBDIR_PREFIX)-%,-%,$(addprefix $(LIBDIR_PREFIX),$(filter-out /opt/local/%,$(EXTERNAL_LIBDIRS)) $(filter /opt/local/%,$(EXTERNAL_LIBDIRS)))) $(patsubst $(RUNDIR_PREFIX)-%,-%,$(addprefix $(RUNDIR_PREFIX),$(filter-out /opt/local/%,$(EXTERNAL_LIBDIRS)) $(filter /opt/local/%,$(EXTERNAL_LIBDIRS)))) $(patsubst $(LIBLINK_PREFIX)-%,-%,$(addprefix $(LIBLINK_PREFIX),$(EXTERNAL_LIBS))) $(patsubst $(LIBDIR_PREFIX)-%,-%,$(addprefix $(LIBDIR_PREFIX),$(filter-out /opt/local/%,$(LIBDIRS)) $(filter /opt/local/%,$(LIBDIRS)))) $(patsubst $(RUNDIR_PREFIX)-%,-%,$(addprefix $(RUNDIR_PREFIX),$(filter-out /opt/local/%,$(LIBDIRS)) $(filter /opt/local/%,$(LIBDIRS)))) $(patsubst $(LIBLINK_PREFIX)-%,-%,$(addprefix $(LIBLINK_PREFIX),$(LIBS)))

# System include directories
export SYS_INC_DIRS +=  

# Annoying stuff for some file systems.
export PERL_BACKUP_NECESSARY = 

# Stuff for the architecture
export OS     = linux-gnu
export CPU    = x86_64
export VENDOR = pc

# X stuff
export X_LIB_DIR  = NONE
export X_INC_DIR  = NONE

# GNU stuff
export BUILD_GETOPT = no
export BUILD_REGEX  = no

# Where the CCTK puts things
export PACKAGE_DIR = $(CCTK_HOME)/arrangements
export BUILD_DIR   = $(TOP)/build
export CCTK_LIBDIR = $(TOP)/lib

# The perl scripts run by the make system
export BUILD_ACTIVETHORNS = $(CCTK_HOME)/lib/sbin/BuildActiveThorns.pl
export CST = $(CCTK_HOME)/lib/sbin/CST

export C_FILE_PROCESSOR = $(CCTK_HOME)/lib/sbin/c_file_processor.pl
export F_FILE_PROCESSOR = $(CCTK_HOME)/lib/sbin/f_file_processor.pl

# The directory in which to place the executable
export EXEDIR = $(CCTK_HOME)/exe

# The name of the executable
export EXE    = cactus_ET_HBH


# Is this a debug configuration ?
export CCTK_DEBUG_MODE = no

ifeq ($(strip $(CCTK_DEBUG_MODE)),yes)
  CPPFLAGS  += $(CPP_DEBUG_FLAGS)
  FPPFLAGS  += $(FPP_DEBUG_FLAGS)
  CFLAGS    += $(C_DEBUG_FLAGS)
  CXXFLAGS  += $(CXX_DEBUG_FLAGS)
  CUCCFLAGS += $(CUCC_DEBUG_FLAGS)
  F77FLAGS  += $(F77_DEBUG_FLAGS)
  F90FLAGS  += $(F90_DEBUG_FLAGS)
  LDFLAGS  += $(LD_DEBUG_FLAGS)
endif

# Is this an optimising configuration ?
export CCTK_OPTIMISE_MODE = yes

ifeq ($(strip $(CCTK_OPTIMISE_MODE)),yes)
  CPPFLAGS  += $(CPP_OPTIMISE_FLAGS)
  FPPFLAGS  += $(FPP_OPTIMISE_FLAGS)
  CFLAGS    += $(C_OPTIMISE_FLAGS)
  CXXFLAGS  += $(CXX_OPTIMISE_FLAGS)
  CUCCFLAGS += $(CUCC_OPTIMISE_FLAGS)
  F77FLAGS  += $(F77_OPTIMISE_FLAGS)
  F90FLAGS  += $(F90_OPTIMISE_FLAGS)
  LDFLAGS  += $(LD_OPTIMISE_FLAGS)
else
  CFLAGS    += $(C_NO_OPTIMISE_FLAGS)
  CXXFLAGS  += $(CXX_NO_OPTIMISE_FLAGS)
  CUCCFLAGS += $(CUCC_NO_OPTIMISE_FLAGS)
  F77FLAGS  += $(F77_NO_OPTIMISE_FLAGS)
  F90FLAGS  += $(F90_NO_OPTIMISE_FLAGS)
  LDFLAGS  += $(LD_NO_OPTIMISE_FLAGS)
endif

# Is this a profiling configuration ?
export CCTK_PROFILE_MODE = no

ifeq ($(strip $(CCTK_PROFILE_MODE)),yes)
  CPPFLAGS  += $(CPP_PROFILE_FLAGS)
  FPPFLAGS  += $(FPP_PROFILE_FLAGS)
  CFLAGS    += $(C_PROFILE_FLAGS)
  CXXFLAGS  += $(CXX_PROFILE_FLAGS)
  CUCCFLAGS += $(CUCC_PROFILE_FLAGS)
  F77FLAGS  += $(F77_PROFILE_FLAGS)
  F90FLAGS  += $(F90_PROFILE_FLAGS)
  LDFLAGS  += $(LD_PROFILE_FLAGS)
endif

# Are we building with OpenMP support ?
export CCTK_OPENMP_MODE = yes

ifeq ($(strip $(CCTK_OPENMP_MODE)),yes)
  CPPFLAGS  += $(CPP_OPENMP_FLAGS)
  FPPFLAGS  += $(FPP_OPENMP_FLAGS)
  CFLAGS    += $(C_OPENMP_FLAGS)
  CXXFLAGS  += $(CXX_OPENMP_FLAGS)
  CUCCFLAGS += $(CUCC_OPENMP_FLAGS)
  F77FLAGS  += $(F77_OPENMP_FLAGS)
  F90FLAGS  += $(F90_OPENMP_FLAGS)
  LDFLAGS  += $(LD_OPENMP_FLAGS)
endif

# Are we building with all warnings switched on ?
# This option may be overwritten at compile time.
ifeq ($(WARN),)
  export CCTK_WARN_MODE = 
else
  export CCTK_WARN_MODE = $(WARN)
endif

ifeq ($(strip $(CCTK_WARN_MODE)),yes)
  CPPFLAGS  += $(CPP_WARN_FLAGS)
  FPPFLAGS  += $(FPP_WARN_FLAGS)
  CFLAGS    += $(C_WARN_FLAGS)
  CXXFLAGS  += $(CXX_WARN_FLAGS)
  CUCCFLAGS += $(CUCC_WARN_FLAGS)
  F77FLAGS  += $(F77_WARN_FLAGS)
  F90FLAGS  += $(F90_WARN_FLAGS)
  LDFLAGS  += $(LD_WARN_FLAGS)
endif

# Stuff specific to an architecture.
include $(TOP)/config-data/make.arch.defn
