MAKEFLAGS += -B
CPUCC:=gcc
GPUCC:=nvc

# Flags for gcc and nvc respectively (shared by preproc and solver)
CPUCFLAGS:= -O3 -fPIC $(CFLAGS) 
GPUCFLAGS:= -O3 -fPIC $(CFLAGS) --diag_suppress declared_but_not_referenced --diag_suppress pointer_outside_base_object --diag_suppress set_but_not_used

# Set path for MPI based on mpicc location
LDFLAGS:= $(LDFLAGS)
MPI_CFLAGS := $(shell mpicc -showme:compile 2>/dev/null)
MPI_LDFLAGS := $(shell mpicc -showme:link 2>/dev/null)

CFLAGS += $(MPI_CFLAGS)
LDFLAGS += $(MPI_LDFLAGS) -lm -lmpi

ifeq ($(origin TARGET), undefined)
  TARGET := $(firstword $(MAKECMDGOALS))
endif
export TARGET

export LD:= $(CPUCC)
# Check if GPU is used
USEGPU=$(shell grep -q '^\s*\#define\s\+TARGET_IS_GPU' headers.cpl && echo 1 || echo 0)
ifeq ($(USEGPU),1)
	ifeq ($(TARGET),preproc)
		CC:=$(CPUCC)
		CFLAGS:=$(CPUCFLAGS)
	endif
	ifeq ($(TARGET),solver)
		CC:=$(GPUCC)
		CFLAGS:=$(GPUCFLAGS)
		LD:=$(GPUCC)
	endif
else
	CC:=$(CPUCC)
	CFLAGS:=$(CPUCFLAGS)
endif

preproc: preproc.cpl
	mpicpl preproc 

ifeq ($(USEGPU),1)
solver: solver.cpl 
	mpicpl solver -acc=gpu
else
solver: solver.cpl 
	mpicpl solver 
endif

postproc:    postproc.cpl
	mpicpl postproc.cpl

createChannelSTL:    utilities/createChannelSTL.cpl
	mpicpl utilities/createChannelSTL.cpl

interpolator: utilities/interpolator.cpl
	mpicpl utilities/interpolator.cpl
