SHELL := bash

BIN=./bin

ifeq ($(origin CC),default)
  CC = gcc
endif

ifeq ($(CC),icc)
	MPICC ?= mpiicc
endif

MPICC ?= mpicc

$(shell  mkdir -p $(BIN))

CFLAGS_BASE = -O3 -Wall
MPICFLAGS_BASE = $(CFLAGS_BASE)

CFLAGS_gcc = -march=native
CFLAGS_icc = -march=core-avx2

MPICFLAGS_mpicc = $(CFLAGS_gcc)
MPICFLAGS_mpiicc = $(CFLAGS_icc)

CFLAGS += $(CFLAGS_BASE) $(CFLAGS_$(CC))
MPICFLAGS += $(MPICFLAGS_BASE) $(MPICFLAGS_$(MPICC))

LDFLAGS = -lm

all: integer_sum_hybrid.x integer_sum_mpi.x integer_sum_serial.x

integer_sum_hybrid.x: %.x : %.c
	$(MPICC) $(MPICFLAGS) -fopenmp -o $(BIN)/$@ $^ $(LDFLAGS)

integer_sum_mpi.x: %.x : %.c
	$(MPICC) $(MPICFLAGS) -o $(BIN)/$@ $^ $(LDFLAGS)

integer_sum_serial.x: %.x : %.c
	$(CC) $(CFLAGS) -o $(BIN)/$@ $^ $(LDFLAGS)

clean:
	rm -rf $(BIN)