#
# Simulation of Power Grid Blackout
# 
#
# Parallel computing (Degree in Computer Engineering)
# 2025/2026
#
# (c) 2025 Diego García-Álvarez, Arturo Gonzalez-Escribano
# Grupo GAMUVa, Trasgo, Universidad de Valladolid (Spain)
#

# Compilers
CC=gcc
OMPFLAG=-fopenmp
MPICC=mpicc
CUDACC=nvcc

# Flags for optimization and libs
FLAGS=-O3 -Wall
LIBS=-lm

# Targets to build
OBJS=blackout_seq blackout_omp blackout_mpi blackout_cuda

# Rules. By default show help
help:
	@echo
	@echo "Simulation of Power Grid Blackout"
	@echo
	@echo "Group GAMUVa, group Trasgo, Universidad de Valladolid (Spain)"
	@echo
	@echo "make blackout_seq	Build only the sequential version"
	@echo "make blackout_omp	Build only the OpenMP version"
	@echo "make blackout_mpi	Build only the MPI version"
	@echo "make blackout_cuda	Build only the CUDA version"
	@echo
	@echo "make all		Build all versions (Sequential, OpenMP, MPI, CUDA)"
	@echo "make debug	Build all versions with demo output for small surfaces"
	@echo "make animation	Build the sequential version to produce the animation data"
	@echo "make clean	Remove targets"
	@echo

all: $(OBJS)

blackout_seq: blackout.c
	$(CC) $(FLAGS) $(DEBUG) $< $(LIBS) -o $@

blackout_omp: blackout_omp.c
	$(CC) $(FLAGS) $(DEBUG) $(OMPFLAG) $< $(LIBS) -o $@

blackout_mpi: blackout_mpi.c
	$(MPICC) $(FLAGS) $(DEBUG) $< $(LIBS) -o $@

blackout_cuda: blackout_cuda.cu
	$(CUDACC) $(DEBUG) $< $(LIBS) -o $@


# Remove the target files
clean:
	rm -rf $(OBJS)

# Compile in debug mode
debug:
	make FLAGS="$(FLAGS) -DDEBUG -g" blackout_seq

# Compile to generate animation data
animation:
	make FLAGS="$(FLAGS) -DDEBUG -DANIMATION -g" blackout_seq

