2021-05-10 23:56:26 +02:00
|
|
|
# QMCkl - Quantum Monte Carlo kernel library
|
|
|
|
#
|
|
|
|
# BSD 3-Clause License
|
2021-05-11 11:45:49 +02:00
|
|
|
#
|
2021-05-10 23:56:26 +02:00
|
|
|
# Copyright (c) 2020, TREX Center of Excellence
|
|
|
|
# All rights reserved.
|
2021-05-11 11:45:49 +02:00
|
|
|
#
|
2021-05-10 23:56:26 +02:00
|
|
|
# Redistribution and use in source and binary forms, with or without
|
|
|
|
# modification, are permitted provided that the following conditions are met:
|
2021-05-11 11:45:49 +02:00
|
|
|
#
|
2021-05-10 23:56:26 +02:00
|
|
|
# 1. Redistributions of source code must retain the above copyright notice, this
|
|
|
|
# list of conditions and the following disclaimer.
|
2021-05-11 11:45:49 +02:00
|
|
|
#
|
2021-05-10 23:56:26 +02:00
|
|
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
# this list of conditions and the following disclaimer in the documentation
|
|
|
|
# and/or other materials provided with the distribution.
|
2021-05-11 11:45:49 +02:00
|
|
|
#
|
2021-05-10 23:56:26 +02:00
|
|
|
# 3. Neither the name of the copyright holder nor the names of its
|
|
|
|
# contributors may be used to endorse or promote products derived from
|
|
|
|
# this software without specific prior written permission.
|
2021-05-11 11:45:49 +02:00
|
|
|
#
|
2021-05-10 23:56:26 +02:00
|
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
|
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
|
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
|
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
|
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
2021-10-28 17:52:03 +02:00
|
|
|
|
2021-05-10 23:56:26 +02:00
|
|
|
ACLOCAL_AMFLAGS = -I m4
|
|
|
|
|
|
|
|
VERSION_MAJOR = @VERSION_MAJOR@
|
|
|
|
VERSION_MINOR = @VERSION_MINOR@
|
|
|
|
VERSION_PATCH = @VERSION_PATCH@
|
|
|
|
|
2021-05-11 11:45:49 +02:00
|
|
|
SUBDIRS =
|
2021-10-14 21:40:14 +02:00
|
|
|
CLEANFILES = qmckl.mod qmckl_verificarlo_f.mod
|
2021-05-12 00:22:51 +02:00
|
|
|
EXTRA_DIST =
|
2021-05-10 23:56:26 +02:00
|
|
|
|
|
|
|
pkgconfigdir = $(libdir)/pkgconfig
|
2021-05-12 00:22:51 +02:00
|
|
|
pkgconfig_DATA = pkgconfig/qmckl.pc
|
2021-05-11 11:45:49 +02:00
|
|
|
|
2021-10-28 17:52:03 +02:00
|
|
|
qmckl_h = include/qmckl.h
|
2022-10-07 14:33:27 +02:00
|
|
|
include_HEADERS = $(qmckl_h) $(src_qmckl_f)
|
2021-05-11 11:45:49 +02:00
|
|
|
|
2022-02-11 16:07:25 +01:00
|
|
|
test_qmckl_f = tests/qmckl_f.F90
|
2021-05-12 02:16:45 +02:00
|
|
|
test_qmckl_fo = tests/qmckl_f.o
|
2022-02-11 16:07:25 +01:00
|
|
|
src_qmckl_f = src/qmckl_f.F90
|
2021-05-12 23:18:22 +02:00
|
|
|
src_qmckl_fo = src/qmckl_f.o
|
2021-07-06 17:07:08 +02:00
|
|
|
header_tests = tests/chbrclf.h tests/n2.h
|
2021-07-25 15:36:14 +02:00
|
|
|
|
2021-11-25 15:16:55 +01:00
|
|
|
QMCKL_TEST_DIR = $(abs_srcdir)/share/qmckl/test_data/
|
2021-05-11 11:45:49 +02:00
|
|
|
|
2021-11-17 17:06:30 +01:00
|
|
|
AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_builddir)/include
|
2021-11-25 15:16:55 +01:00
|
|
|
AM_CPPFLAGS += -I$(srcdir)/src -I$(srcdir)/include -I$(QMCKL_TEST_DIR)
|
|
|
|
AM_CPPFLAGS += -DQMCKL_TEST_DIR=\"$(QMCKL_TEST_DIR)\"
|
2021-10-13 10:10:09 +02:00
|
|
|
|
2021-05-11 12:56:41 +02:00
|
|
|
|
2021-05-11 16:41:03 +02:00
|
|
|
lib_LTLIBRARIES = src/libqmckl.la
|
2022-01-08 16:04:04 +01:00
|
|
|
src_libqmckl_la_SOURCES = $(qmckl_h) $(src_qmckl_f) $(C_FILES) $(F_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES)
|
2022-05-04 16:41:16 +02:00
|
|
|
src_libqmckl_la_LDFLAGS = $(LDFLAGS)
|
2021-05-11 12:56:41 +02:00
|
|
|
|
2021-11-17 17:06:30 +01:00
|
|
|
CLEANFILES+=$(test_qmckl_fo) $(src_qmckl_fo) $(test_qmckl_o) $(src_qmckl_o) $(FH_TYPE_FILES) $(FH_FUNC_FILES)
|
2021-05-11 11:45:49 +02:00
|
|
|
|
|
|
|
|
2021-05-12 02:16:45 +02:00
|
|
|
include generated.mk
|
2021-05-11 11:45:49 +02:00
|
|
|
|
2022-09-28 17:52:33 +02:00
|
|
|
htmldir = $(docdir)/html
|
|
|
|
textdir = $(docdir)/text
|
|
|
|
htmldir_loc = share/doc/qmckl/html
|
|
|
|
textdir_loc = share/doc/qmckl/text
|
2021-05-11 11:45:49 +02:00
|
|
|
|
2021-05-12 01:51:26 +02:00
|
|
|
ln_s_verbose = $(ln_s_verbose_@AM_V@)
|
|
|
|
ln_s_verbose_ = $(ln_s_verbose_@AM_DEFAULT_V@)
|
|
|
|
ln_s_verbose_0 = @echo " LN_S $<";
|
2021-05-12 00:22:51 +02:00
|
|
|
|
2022-09-28 17:52:33 +02:00
|
|
|
# Include Guix manifest in the source code distribution tarball
|
|
|
|
tools_qmckl_scm = tools/qmckl.scm
|
|
|
|
EXTRA_DIST += $(tools_qmckl_scm)
|
|
|
|
|
|
|
|
# Documentation rules
|
|
|
|
if HAVE_DOC
|
2022-01-08 15:18:38 +01:00
|
|
|
htmlize_el = $(htmldir_loc)/htmlize.el
|
2021-05-12 02:47:55 +02:00
|
|
|
dist_html_DATA = $(HTML_FILES) \
|
2022-02-17 23:30:16 +01:00
|
|
|
$(htmldir_loc)/qmckl.css \
|
|
|
|
$(htmldir_loc)/index.html
|
2021-05-12 00:22:51 +02:00
|
|
|
|
2021-05-12 01:51:26 +02:00
|
|
|
dist_text_DATA = $(TEXT_FILES)
|
2021-05-12 00:22:51 +02:00
|
|
|
|
2022-02-17 23:30:16 +01:00
|
|
|
html-local: $(htmlize_el) $(dist_html_DATA)
|
|
|
|
text: $(htmlize_el) $(dist_text_DATA)
|
2021-05-12 02:16:45 +02:00
|
|
|
doc: html text
|
2022-09-28 17:52:33 +02:00
|
|
|
endif
|
2021-05-12 02:16:45 +02:00
|
|
|
|
2022-06-29 10:34:20 +02:00
|
|
|
setup_py = $(srcdir)/python/setup.py
|
|
|
|
process_header_py = $(srcdir)/python/src/process_header.py
|
|
|
|
test_py = $(srcdir)/python/test/test_api.py
|
|
|
|
qmckl_i = $(srcdir)/python/src/qmckl.i
|
|
|
|
numpy_i = $(srcdir)/python/src/numpy.i
|
|
|
|
qmckl_wrap_c = python/src/qmckl_wrap.c
|
|
|
|
qmckl_include_i = python/src/qmckl_include.i
|
|
|
|
qmckl_py = python/src/qmckl.py
|
|
|
|
|
|
|
|
dist_python_DATA = $(setup_py) $(qmckl_py) $(qmckl_wrap_c) \
|
|
|
|
$(srcdir)/python/pyproject.toml \
|
|
|
|
$(srcdir)/python/requirements.txt \
|
|
|
|
$(srcdir)/python/README.md
|
|
|
|
|
|
|
|
python-install: $(qmckl_h) $(lib_LTLIBRARIES) $(dist_python_DATA)
|
|
|
|
$(MKDIR_P) python/src
|
|
|
|
cd python ; \
|
|
|
|
[[ ! -f pyproject.toml ]] && \
|
|
|
|
cp $(abs_srcdir)/python/{pyproject.toml,requirements.txt,README.md,setup.py} . ; \
|
|
|
|
cp src/qmckl.py . ; \
|
|
|
|
export QMCKL_INCLUDEDIR="$(prefix)/include" ; \
|
|
|
|
export QMCKL_LIBDIR="$(prefix)/lib" ; \
|
2022-08-22 13:11:53 +02:00
|
|
|
python3 -m pip install .
|
2022-06-29 10:34:20 +02:00
|
|
|
|
|
|
|
python-test: $(test_py)
|
|
|
|
cd $(abs_srcdir)/python/test/ && \
|
|
|
|
python test_api.py
|
|
|
|
|
|
|
|
.PHONY: python-test python-install cppcheck
|
|
|
|
|
2021-05-10 23:56:26 +02:00
|
|
|
|
2021-05-12 01:51:26 +02:00
|
|
|
if QMCKL_DEVEL
|
|
|
|
|
2021-10-14 21:40:14 +02:00
|
|
|
if VFC_CI
|
|
|
|
AM_LDFLAGS=-lvfc_probes -lvfc_probes_f
|
2022-09-28 17:52:33 +02:00
|
|
|
ACLOCAL_AMFLAGS += -I tools
|
2021-10-14 21:40:14 +02:00
|
|
|
endif
|
|
|
|
|
2022-01-07 14:22:23 +01:00
|
|
|
EXTRA_DIST += $(ORG_FILES) $(TANGLED_FILES) $(EXPORTED_FILES) $(test_qmckl_f)
|
2021-05-12 01:51:26 +02:00
|
|
|
|
2022-02-17 23:30:16 +01:00
|
|
|
BUILT_SOURCES = $(C_FILES) $(F_FILES) $(FH_FUNC_FILES) $(FH_TYPE_FILES) $(H_FUNC_FILES) $(H_TYPE_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES) $(src_qmckl_f) $(test_qmckl_f) $(qmckl_h) $(header_tests) $(htmlize_el)
|
2021-05-12 01:51:26 +02:00
|
|
|
|
2022-02-17 23:30:16 +01:00
|
|
|
CLEANFILES += $(BUILT_SOURCES) $(C_TEST_FILES) $(F_TEST_FILES) $(TANGLED_FILES) $(C_TEST_FILES) $(F_TEST_FILES) $(src_qmckl_f) $(test_qmckl_f) $(qmckl_h) $(HTML_FILES) $(TEXT_FILES) $(EXPORTED_FILES) $(header_tests) $(htmlize_el)
|
2021-05-12 01:51:26 +02:00
|
|
|
|
|
|
|
EXTRA_DIST += \
|
2021-10-28 17:52:03 +02:00
|
|
|
tools/build_doc.sh \
|
|
|
|
tools/build_makefile.py \
|
|
|
|
tools/build_qmckl_f.sh \
|
|
|
|
tools/build_qmckl_h.sh \
|
|
|
|
tools/config_doc.el \
|
|
|
|
tools/config_tangle.el \
|
|
|
|
tools/init.el \
|
|
|
|
tools/install_htmlize.sh \
|
|
|
|
tools/lib.org \
|
|
|
|
tools/tangle.sh \
|
|
|
|
tools/theme.setup
|
2021-05-12 01:51:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
## Silent
|
|
|
|
## ======
|
|
|
|
|
|
|
|
export_verbose = $(export_verbose_@AM_V@)
|
|
|
|
export_verbose_ = $(export_verbose_@AM_DEFAULT_V@)
|
2021-05-12 02:41:29 +02:00
|
|
|
export_verbose_0 = @echo " DOC $@";
|
2021-05-12 01:51:26 +02:00
|
|
|
|
|
|
|
tangle_verbose = $(tangle_verbose_@AM_V@)
|
|
|
|
tangle_verbose_ = $(tangle_verbose_@AM_DEFAULT_V@)
|
2021-10-14 21:40:14 +02:00
|
|
|
tangle_verbose_0 = @echo " ORG $<";
|
2021-05-12 01:51:26 +02:00
|
|
|
|
|
|
|
cat_h_verbose = $(cat_h_verbose_@AM_V@)
|
|
|
|
cat_h_verbose_ = $(cat_h_verbose_@AM_DEFAULT_V@)
|
|
|
|
cat_h_verbose_0 = @echo " HEADER $@";
|
|
|
|
|
|
|
|
|
|
|
|
## Rules
|
|
|
|
## =====
|
|
|
|
|
2022-02-11 16:07:25 +01:00
|
|
|
SUFFIXES = .F90 .h .org .c _f.F90 _func.h _type.h _private_func.h _private_type.h
|
2021-05-12 01:51:26 +02:00
|
|
|
|
2021-10-28 17:52:03 +02:00
|
|
|
$(test_qmckl_f): $(src_qmckl_f)
|
|
|
|
cp $(src_qmckl_f) $(test_qmckl_f)
|
|
|
|
|
2021-05-12 01:51:26 +02:00
|
|
|
$(qmckl_h): $(H_FUNC_FILES) $(H_TYPE_FILES)
|
2021-11-17 17:06:30 +01:00
|
|
|
$(cat_h_verbose)top_builddir=$(abs_top_builddir) srcdir=$(abs_srcdir) qmckl_h=$(qmckl_h) $(srcdir)/tools/build_qmckl_h.sh
|
2021-05-12 01:51:26 +02:00
|
|
|
|
2021-10-28 17:52:03 +02:00
|
|
|
$(src_qmckl_f): $(FH_FUNC_FILES) $(FH_TYPE_FILES)
|
2021-11-17 17:06:30 +01:00
|
|
|
echo $(FH_TYPE_FILES) $(FH_FUNC_FILES)
|
|
|
|
$(cat_h_verbose)top_builddir=$(abs_top_builddir) srcdir=$(abs_srcdir) src_qmckl_f=$(src_qmckl_f) $(srcdir)/tools/build_qmckl_f.sh
|
2021-05-12 01:51:26 +02:00
|
|
|
|
|
|
|
$(htmlize_el):
|
2022-02-17 23:30:16 +01:00
|
|
|
$(MKDIR_P) $(htmldir_loc) $(textdir_loc)
|
2021-11-17 17:06:30 +01:00
|
|
|
abs_srcdir=$(abs_srcdir) $(srcdir)/tools/install_htmlize.sh $(htmlize_el)
|
2021-05-12 01:51:26 +02:00
|
|
|
|
2021-05-19 01:35:34 +02:00
|
|
|
tests/chbrclf.h: $(qmckl_h)
|
Integration of Verificarlo CI tests (#1)
* comment
* Update distance test code
The distance test has been updated to the latest version, with a first attempt at using vfc_probes inside it
* Functional implementation of vfc_probes in the distance tests
This commit has the first functional vfc_ci tests. Verificarlo tests
should be written over the existing tests, and they can be enabled with
the following configure command:
QMCKL_DEVEL=1 ./configure --prefix=$PWD/_install --enable-maintainer-mode --enable-vfc_ci CC="verificarlo-f -Mpreprocess -D VFC_CI" FC="verificarlo-f -Mpreprocess -D VFC_CI" --host=x86_64
The --enable-vfc_ci flag will trigger the linking of the vfc_ci
library. Moreover, as of now, the "-Mpreprocess" and "-D VFC_CI" flags
have to be specified directly here. There is probably an appropriate
macro to place those flags into but I couldn't find it yet, and could
only manage to build the tests this way.
When the VFC_CI preprocessor is defined, somme additional code to
register and export the test probes can be executed (see
qmckl_distance.org).
As of now, the tests are built as normal, even though they are expected
to fail :
make all
make check
From there, the test_qmckl_distance (and potentially the others)
executable can be called at will. This will typically be done
automatically by vfc_ci, but one could manually execute the executable
by defining the following env variables :
VFC_PROBES_OUTPUT="test.csv" VFC_BACKENDS="libinterflop_ieee.so"
depending on the export file and the Verificarlo backend to be used.
The next steps will be to define more tests such as this one, and to
integrate them into a Verificarlo CI workflow (by writing a
vfc_tests_config.json file and using the automatic CI setup
command).
* Error in FOrtran interface fixed
* Added missing Fortran interfaces
* Modify distance test and install process integration
All probes are now ignored using only the preprocessor (instead
of checking for a facultative argument) in the distance test.
Moreover,preprocessing can now be enabled correctly using FCFLAGS
(the issue seemed to come from the order of the arguments passed
to gfortran/verificarlo-f with the preprocessor arg having to come
first).
* Add vfc_probes to AO tests
vfc_probes have been added to qmckl_ao.org in the same way as
qmckl_distance.org, which means that it can be enabled or disabled at
compile time using the --enable-vfc_ci option.
qmckl_distance.org has been slightly modified with a better indentation,
and configure.ac now adds the "-D VFC_CI" flag to CFLAGS when vfc_ci is
enabled.
Co-authored-by: Anthony Scemama <scemama@irsamc.ups-tlse.fr>
2021-07-07 13:42:42 +02:00
|
|
|
|
2021-07-06 17:07:08 +02:00
|
|
|
tests/n2.h: $(qmckl_h)
|
2021-05-19 01:35:34 +02:00
|
|
|
|
2021-05-19 01:49:41 +02:00
|
|
|
cppcheck: cppcheck.out
|
Integration of Verificarlo CI tests (#1)
* comment
* Update distance test code
The distance test has been updated to the latest version, with a first attempt at using vfc_probes inside it
* Functional implementation of vfc_probes in the distance tests
This commit has the first functional vfc_ci tests. Verificarlo tests
should be written over the existing tests, and they can be enabled with
the following configure command:
QMCKL_DEVEL=1 ./configure --prefix=$PWD/_install --enable-maintainer-mode --enable-vfc_ci CC="verificarlo-f -Mpreprocess -D VFC_CI" FC="verificarlo-f -Mpreprocess -D VFC_CI" --host=x86_64
The --enable-vfc_ci flag will trigger the linking of the vfc_ci
library. Moreover, as of now, the "-Mpreprocess" and "-D VFC_CI" flags
have to be specified directly here. There is probably an appropriate
macro to place those flags into but I couldn't find it yet, and could
only manage to build the tests this way.
When the VFC_CI preprocessor is defined, somme additional code to
register and export the test probes can be executed (see
qmckl_distance.org).
As of now, the tests are built as normal, even though they are expected
to fail :
make all
make check
From there, the test_qmckl_distance (and potentially the others)
executable can be called at will. This will typically be done
automatically by vfc_ci, but one could manually execute the executable
by defining the following env variables :
VFC_PROBES_OUTPUT="test.csv" VFC_BACKENDS="libinterflop_ieee.so"
depending on the export file and the Verificarlo backend to be used.
The next steps will be to define more tests such as this one, and to
integrate them into a Verificarlo CI workflow (by writing a
vfc_tests_config.json file and using the automatic CI setup
command).
* Error in FOrtran interface fixed
* Added missing Fortran interfaces
* Modify distance test and install process integration
All probes are now ignored using only the preprocessor (instead
of checking for a facultative argument) in the distance test.
Moreover,preprocessing can now be enabled correctly using FCFLAGS
(the issue seemed to come from the order of the arguments passed
to gfortran/verificarlo-f with the preprocessor arg having to come
first).
* Add vfc_probes to AO tests
vfc_probes have been added to qmckl_ao.org in the same way as
qmckl_distance.org, which means that it can be enabled or disabled at
compile time using the --enable-vfc_ci option.
qmckl_distance.org has been slightly modified with a better indentation,
and configure.ac now adds the "-D VFC_CI" flag to CFLAGS when vfc_ci is
enabled.
Co-authored-by: Anthony Scemama <scemama@irsamc.ups-tlse.fr>
2021-07-07 13:42:42 +02:00
|
|
|
|
2021-05-19 01:49:41 +02:00
|
|
|
cppcheck.out: $(qmckl_h)
|
|
|
|
cd src/ && \
|
|
|
|
cppcheck --addon=cert -q --error-exitcode=0 \
|
2021-06-03 01:48:26 +02:00
|
|
|
--enable=all --suppress="unusedStructMember"\
|
|
|
|
--suppress="unusedFunction" \
|
|
|
|
--suppress="missingIncludeSystem" \
|
2021-05-19 01:49:41 +02:00
|
|
|
--language=c --std=c99 -rp --platform=unix64 \
|
2021-11-17 17:06:30 +01:00
|
|
|
-I$(srcdir)/include -I$(top_builddir)/include *.c *.h 2>../$@
|
2021-05-19 01:49:41 +02:00
|
|
|
|
2022-05-04 16:41:16 +02:00
|
|
|
$(qmckl_include_i): $(qmckl_h) $(process_header_py)
|
|
|
|
$(MKDIR_P) python/src
|
2022-08-08 17:22:14 +02:00
|
|
|
python3 $(process_header_py) $(qmckl_h)
|
2022-05-04 16:41:16 +02:00
|
|
|
mv qmckl_include.i $(qmckl_include_i)
|
2022-05-03 16:48:27 +02:00
|
|
|
|
2022-05-04 16:41:16 +02:00
|
|
|
|
|
|
|
$(qmckl_py): $(qmckl_i) $(qmckl_include_i)
|
2022-07-11 10:55:47 +02:00
|
|
|
$(srcdir)/tools/missing swig -Iinclude -Ipython/src -python -py3 -builtin -o $(qmckl_wrap_c) $(qmckl_i) || :
|
2022-05-04 16:41:16 +02:00
|
|
|
|
|
|
|
$(qmckl_wrap_c): $(qmckl_py)
|
|
|
|
|
2022-05-03 16:48:27 +02:00
|
|
|
|
2022-05-04 15:43:50 +02:00
|
|
|
CLEANFILES += $(qmckl_wrap_c) \
|
2022-05-04 16:41:16 +02:00
|
|
|
$(qmckl_include_i) \
|
|
|
|
$(qmckl_py)
|
2022-05-03 16:48:27 +02:00
|
|
|
|
2021-05-12 01:51:26 +02:00
|
|
|
endif
|