# engines/fortran/Makefile

FC      = gfortran
FFLAGS  = -O3 -march=native -Wall -Wextra
SRCS    = main.f90
LIB_SRC = dynamics_lib.f90

UNAME_S := $(shell uname -s 2>/dev/null || echo Windows)

ifeq ($(UNAME_S),Windows)
  STATIC_FLAGS = -static-libgcc -static-libgfortran -static-libquadmath
else
  STATIC_FLAGS =
endif

TARGET = build/dynamics_f90.exe

ifeq ($(UNAME_S),Linux)
  DLL_TARGET = build/dynamics_f90.so
  DLL_FLAGS  = -shared -fPIC
else ifeq ($(UNAME_S),Darwin)
  DLL_TARGET = build/dynamics_f90.dylib
  DLL_FLAGS  = -dynamiclib
else
  DLL_TARGET = build/dynamics_f90.dll
  DLL_FLAGS  = -shared -fPIC
endif

.PHONY: all dll clean

all: $(TARGET)

dll: $(DLL_TARGET)

$(TARGET): $(SRCS) | build
	$(FC) $(FFLAGS) $(STATIC_FLAGS) -o $@ $(SRCS)
	@echo "  === Fortran engine built: $@ ==="

$(DLL_TARGET): $(LIB_SRC) | build
	$(FC) $(FFLAGS) $(STATIC_FLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC)
	@echo "  === Fortran DLL built: $@ ==="

build:
	mkdir -p build

clean:
	rm -rf build *.o *.mod
