# Makefile for trimspNL
#
# 17-Jun-2002 TP, use standard f77 code; use ranlux random number
#             generator of the CERN mathlib
# 4-Feb-2013 ZS, clean up makefile and include random number generator
#            in the code. Use gfortran which is now a standard part of gcc.
# 18-Jun-2026 ZS, add explicit release/debug/profile build modes.
# 19-Jun-2026 ZS, add optional random number generators to improve speed

FC = gfortran
PROGRAM = trimspNL
SOURCE = trimspNL.F
CC = gcc

# Common fixed-form Fortran settings.
# .F files are preprocessed by gfortran; keep -std=gnu for legacy code.
# -ffixed-line-length-none avoids accidental truncation after column 72.
DIALECT = -std=gnu
COMMON_FLAGS = $(DIALECT) -ffixed-line-length-none -mcmodel=medium
WARN =
DEBUG =
OPT = -O3
prefix ?= /usr/local

CFLAGS ?= -O3 -Wall -Wextra

RNG_OBJS = rng_pcg32.o rng_xoshiro256starstar.o

FCFLAGS = $(COMMON_FLAGS) $(WARN) $(DEBUG) $(OPT)
PROFILE_FLAGS = $(COMMON_FLAGS) $(WARN) -O0 -g -pg \
               -fno-omit-frame-pointer
DEBUG_FLAGS = $(COMMON_FLAGS) -O0 -g -Wall -Wextra -Wsurprising \
        -fcheck=all -fbacktrace -ffpe-trap=invalid,zero,overflow

all: release

release : $(PROGRAM)

$(PROGRAM) : $(SOURCE) $(RNG_OBJS)
	$(FC) $(FCFLAGS) -o $@ trimspNL.F $(RNG_OBJS)

rng_pcg32.o : rng_pcg32.c
	$(CC) $(CFLAGS) -c -o $@ $<

rng_xoshiro256starstar.o : rng_xoshiro256starstar.c
	$(CC) $(CFLAGS) -c -o $@ $<

$(PROGRAM)-debug : $(SOURCE) $(RNG_OBJS)
	$(FC) $(DEBUG_FLAGS) -o $@ $(SOURCE) $(RNG_OBJS)

$(PROGRAM)-profile : $(SOURCE) $(RNG_OBJS)
	$(FC) $(PROFILE_FLAGS) -o $@ trimspNL.F $(RNG_OBJS)

$(PROGRAM)-static : $(SOURCE) $(RNG_OBJS)
	$(FC) $(FCFLAGS) -static -o $@ trimspNL.F $(RNG_OBJS)

clean:
	rm -f *.o *~ \#* .#* trimspNL trimspNL-debug trimspNL-profile \
                trimspNL-static gmon.out

install:
	mv $(PROGRAM) $(prefix)/bin/.
