# Compiler
FC = gfortran
OFLAG = -O3
FFLAGS = -march=native -ffast-math -fcheck=all -fopenmp -J $(INCLUDE_DIR)

# Directories
SRC_DIR = src
BUILD_DIR = build
INCLUDE_DIR = include
LIB_DIR = lib

# Library name
LIB_NAME = libftamsl.a

# Find all Fortran sources
MODULES  = atomnums blas lapack gcd crossp progressbar graph potential lattice poscar_reader neighbors reduce planedens makeslab
SRCS := $(patsubst %, $(SRC_DIR)/%.f90, $(MODULES))
OBJS := $(patsubst %, $(BUILD_DIR)/%.o, $(MODULES))
MODS := $(patsubst %, $(BUILD_DIR)/%.mod,$(MODULES))

# Installation prefix (default: /usr/local)
PREFIX ?= /usr/local

# Default target
all: $(LIB_DIR)/$(LIB_NAME)

# Create build and lib directories if they don't exist
$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

$(INCLUDE_DIR):
	mkdir -p $(INCLUDE_DIR)

$(LIB_DIR):
	mkdir -p $(LIB_DIR)

# Compile Fortran source files to object files and mods
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.F90 | $(BUILD_DIR) $(INCLUDE_DIR)
	$(FC) $(OFLAG) $(FFLAGS) -c $< -o $@

# Create static library
$(LIB_DIR)/$(LIB_NAME): $(OBJS) | $(LIB_DIR)
	ar rcs $@ $(OBJS)
	@echo "Library created at $@"

# Install target
install: all
	@echo "Installing library and modules to $(PREFIX)"
	mkdir -p $(PREFIX)/lib
	mkdir -p $(PREFIX)/include
	cp $(LIB_DIR)/$(LIB_NAME) $(PREFIX)/lib/
	cp -v $(INCLUDE_DIR)/*.mod $(PREFIX)/include/

# Clean
clean:
	rm -rf $(BUILD_DIR) $(INCLUDE_DIR) $(LIB_DIR)

.PHONY: all clean

