150 lines
4.1 KiB
Makefile
150 lines
4.1 KiB
Makefile
PYTHON = python
|
|
PYMAJ = 3
|
|
PYMIN = 6
|
|
|
|
FC = gfortran
|
|
F2PY = f2py3
|
|
|
|
NO_VENV = 0
|
|
DEBUG = 0
|
|
VERBOSE = 0
|
|
BUILDDIR = ./build
|
|
INSTALL_PREFIX = $(HOME)/.local
|
|
|
|
|
|
################################################################################
|
|
# 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/')
|
|
VENV_PATH := $(INSTALL_PREFIX)/src/msspec_venv_$(VERSION)
|
|
|
|
|
|
# Checking Python path and version
|
|
PYTHON_EXE := $(shell command -v $(PYTHON) 2> /dev/null)
|
|
|
|
ifndef PYTHON_EXE
|
|
$(error Unable to find the $(PYTHON) executable!)
|
|
endif
|
|
|
|
ifeq ($(shell $(PYTHON_EXE) -c "import sys; exit(sys.version_info >= ($(PYMAJ),$(PYMIN)))"; echo $$?),0)
|
|
$(error Python version >= $(PYMAJ).$(PYMIN) is needed!)
|
|
endif
|
|
|
|
# Checking your distribution type and release
|
|
LSB_RELEASE := $(shell command -v lsb_release 2> /dev/null)
|
|
DISTRO_RELEASE =
|
|
|
|
ifdef LSB_RELEASE
|
|
DISTRO_RELEASE = $(shell echo $(shell $(LSB_RELEASE) -s -i)-$(shell $(LSB_RELEASE) -s -r) | tr [:upper:] [:lower:] )
|
|
endif
|
|
|
|
ifndef DISTRO_RELEASE
|
|
$(warning Unable to guess your OS name and version)
|
|
endif
|
|
|
|
# Define the INSIDE_VENV variable
|
|
ifeq ($(NO_VENV), 1)
|
|
INSIDE_VENV =
|
|
else
|
|
INSIDE_VENV = . $(VENV_PATH)/bin/activate &&
|
|
endif
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
help:
|
|
|
|
|
|
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::
|
|
@if test -d $(abspath $(BUILDDIR)); then \
|
|
echo "Removing $(abspath $(BUILDDIR))..."; \
|
|
rm -r $(abspath $(BUILDDIR)); \
|
|
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 $@
|