msspec_python3/src/options.mk

114 lines
3.4 KiB
Makefile
Raw Normal View History

FC = gfortran
F2PY = f2py3
DEBUG = 0
VERBOSE = 0
BUILDDIR = ./build
################################################################################
# GFORTRAN CONFIGURATION #
################################################################################
GFORTRAN_FFLAGS = -O2 -ffast-math
GFORTRAN_FFLAGS_DBG = -g -Wall -Wextra -Warray-temporaries -Wconversion
GFORTRAN_FFLAGS_DBG += -fbacktrace -ffree-line-length-0 -fcheck=all
GFORTRAN_FFLAGS_DBG += -ffpe-trap=zero,overflow,underflow -finit-real=nan
################################################################################
################################################################################
# IFORT CONFIGURATION #
################################################################################
IFORT_FFLAGS =
IFORT_FFLAGS_DBG =
################################################################################
################################################################################
# F2PY CONFIGURATION #
################################################################################
F2PYFLAGS = --opt=-O2
F2PYFLAGS_DBG = --debug-capi --debug
################################################################################
################################################################################
# /!\ DO NOT EDIT BELOW THAT LINE (unlesss you know what you're doing...) #
# CORE CONFIGURATION #
################################################################################
#VERSION:=$(shell python -c "import msspec; print(msspec.__version__)")
VERSION:=$(shell git describe|sed 's/-\([[:digit:]]\+\)-.*/\.post\1/')
ifeq ($(VERBOSE),0)
OUPUT_REDIRECTION := 1>/dev/null 2>/dev/null
MAKEFLAGS = -s --no-print-directory
else
OUPUT_REDIRECTION:=
MAKEFLAGS += --debug=b
endif
PREFIX=
SUFFIX=
ifeq ($(FC),gfortran)
PREFIX = GFORTRAN
endif
ifeq ($(FC),IFORT)
PREFIX = IFORT
endif
ifeq ($(DEBUG),1)
SUFFIX = _DBG
endif
FFLAGS = $($(PREFIX)_FFLAGS$(SUFFIX))
OBJS = $(addprefix $(BUILDDIR)/, $(patsubst %.f,%.o, $(filter-out $(MAIN_F), $(SRCS))))
.PHONY: clean obj all info
info:
@echo "Compilation information for msspec $(VERSION)"
@echo "FC : $(FC)"
@echo "FFLAGS:"
@for flag in $(FFLAGS); do echo "\t$$flag"; done
all: $(SO)
obj: $(OBJS)
clean::
@for objfile in $(OBJS); do \
if test -f $$objfile; then \
echo "Removing $$objfile..."; \
rm $$objfile; \
fi;\
done
@if test -d $(abspath $(BUILDDIR)); then \
if test `find $(abspath $(BUILDDIR)) -type f|wc -l` -eq 0; then \
echo "Removing empty folder $(abspath $(BUILDDIR))..."; \
rm -r $(abspath $(BUILDDIR)); \
fi; \
fi
@if test x$(SO) != x; then \
if test -f $(SO); then \
echo "Removing $(SO)..."; rm $(SO); \
fi; \
fi
$(BUILDDIR)/%.o: %.f
@echo "Compiling $@..."
mkdir -p $(basename $@)
$(FC) $(FFLAGS) -J $(BUILDDIR) -I $(BUILDDIR) -fPIC -o $@ -c $^ $(OUPUT_REDIRECTION)
$(SO): $(OBJS) $(MAIN_F)
@echo "building Python binding $@..."
mkdir -p $(BUILDDIR)
$(F2PY) $(F2PYFLAGS) -I$(BUILDDIR) -m $(basename $@) -c $(OBJS) $(MAIN_F) $(OUPUT_REDIRECTION)
mv $(basename $@).*.so $@