Open avpanov opened 2 years ago
Note that there is a compiler flag --enable-single
which is used to specify the floating-point precision of the fields and materials as described in the user manual.
https://github.com/NanoComp/meep/blob/8f3d7ba9dace2a747862b86b8914d9114f2841b6/configure.ac#L22-L32
You should not need to modify the meep.hpp
directly.
I know about this option. It does not allow parallel installation of both single and double floating number versions of meep, either single or double accuracy.
Yes, see also my comment here: https://github.com/NanoComp/meep/issues/1549#issuecomment-852316419
This patch adds "s" suffix to installed library names (e.g. libmeeps.so), meep binary (meeps), pkg-config file (meeps.pc) when "--enable-single" is selected. The python package preserve "meep" name as it requires massive edition in *.py files due to "import meep as mp" used there. It is reasonable to add "-DMEEP_SINGLE" for meeps.pc but I do not know how to do it.
diff -Nuar meep-1.22.0/configure.ac meep-1.22.0.prec/configure.ac
--- meep-1.22.0/configure.ac 2022-01-12 12:04:46.000000000 +1000
+++ meep-1.22.0.prec/configure.ac 2022-02-22 21:19:53.129484849 +1000
@@ -26,10 +26,19 @@
enable_single=$enableval, enable_single=no)
if test "x$enable_single" = "xyes"; then
MEEP_SINGLE=1
+ PRECISION=s
else
MEEP_SINGLE=0
+ PRECISION=d
fi
AC_SUBST(MEEP_SINGLE)
+AC_SUBST(PRECISION)
+
+case "$PRECISION" in
+ s) PREC_SUFFIX=s;;
+ d) PREC_SUFFIX=;;
+esac
+AC_SUBST(PREC_SUFFIX)
##############################################################################
# build with SWIG threads for Python
@@ -614,6 +623,8 @@
fi
fi
+ #AC_SUBST(pkgpythondir,\${pythondir}/$PACKAGE$PREC_SUFFIX)
+ #AC_SUBST(pkgpyexecdir,\${pyexecdir}/$PACKAGE$PREC_SUFFIX)
CPPFLAGS=$save_CPPFLAGS
fi # have_python
diff -Nuar meep-1.22.0/libpympb/Makefile.am meep-1.22.0.prec/libpympb/Makefile.am
--- meep-1.22.0/libpympb/Makefile.am 2019-01-10 11:32:00.000000000 +1000
+++ meep-1.22.0.prec/libpympb/Makefile.am 2022-02-18 19:59:58.850964215 +1000
@@ -1,4 +1,4 @@
-LIBMEEP = $(top_builddir)/src/libmeep.la
+LIBMEEP = $(top_builddir)/src/libmeep@PREC_SUFFIX@.la
AM_CPPFLAGS = \
-Wfatal-errors \
diff -Nuar meep-1.22.0/Makefile.am meep-1.22.0.prec/Makefile.am
--- meep-1.22.0/Makefile.am 2020-07-09 10:57:21.000000000 +1000
+++ meep-1.22.0.prec/Makefile.am 2022-02-18 19:59:33.431965348 +1000
@@ -20,12 +20,12 @@
EXTRA_DIST = NEWS.md LICENSE COPYRIGHT m4 meep-pkgconfig.in doc
pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = meep.pc
+pkgconfig_DATA = meep@PREC_SUFFIX@.pc
-meep.pc: meep-pkgconfig
+meep@PREC_SUFFIX@.pc: meep-pkgconfig
cp -f $(top_builddir)/meep-pkgconfig $@
-libmeep:
+libmeep@PREC_SUFFIX@:
cd src && $(MAKE)
# Generate the Python API Document
@@ -55,4 +55,4 @@
rm -rf doc; \
fi
-DISTCLEANFILES = meep.pc
+DISTCLEANFILES = meep@PREC_SUFFIX@.pc
diff -Nuar meep-1.22.0/meep-pkgconfig.in meep-1.22.0.prec/meep-pkgconfig.in
--- meep-1.22.0/meep-pkgconfig.in 2018-02-23 11:50:19.000000000 +1000
+++ meep-1.22.0.prec/meep-pkgconfig.in 2022-02-19 00:02:02.549651404 +1000
@@ -6,5 +6,5 @@
Name: MEEP
Description: time-domain electromagnetic simulation
Version: @VERSION@
-Libs: -L${libdir} -lmeep @MEEPLIBS@
+Libs: -L${libdir} -lmeep@PREC_SUFFIX@ @MEEPLIBS@
Cflags: -I${includedir} @ARCHFLAG@
diff -Nuar meep-1.22.0/python/Makefile.am meep-1.22.0.prec/python/Makefile.am
--- meep-1.22.0/python/Makefile.am 2022-01-12 12:03:42.000000000 +1000
+++ meep-1.22.0.prec/python/Makefile.am 2022-02-20 18:34:56.788668961 +1000
@@ -116,7 +116,7 @@
-I$(top_srcdir)/libpympb \
-I$(top_builddir) # for config.h
-LIBMEEP = $(top_builddir)/src/libmeep.la
+LIBMEEP = $(top_builddir)/src/libmeep@PREC_SUFFIX@.la
_meep_la_SOURCES = meep-python.cxx
_meep_la_LIBADD = $(LIBMEEP) $(PYTHON_LIBS)
diff -Nuar meep-1.22.0/scheme/Makefile.am meep-1.22.0.prec/scheme/Makefile.am
--- meep-1.22.0/scheme/Makefile.am 2022-01-12 12:03:42.000000000 +1000
+++ meep-1.22.0.prec/scheme/Makefile.am 2022-02-18 23:51:24.876679834 +1000
@@ -1,19 +1,19 @@
-bin_PROGRAMS = meep
+bin_PROGRAMS = meep@PREC_SUFFIX@
EXTRA_DIST = meep.scm.in meep-enums.scm casimir.scm materials.scm meep_wrap.patch examples
-LIBMEEP = $(top_builddir)/src/libmeep.la
+LIBMEEP = $(top_builddir)/src/libmeep@PREC_SUFFIX@.la
HDRS = meep-ctl.hpp meep-ctl-const.hpp meep-ctl-swig.hpp
LIBHDRS = $(top_srcdir)/src/meep.hpp $(top_srcdir)/src/meep/vec.hpp $(top_srcdir)/src/meep/mympi.hpp
CTLHDRS = $(LIBHDRS) $(srcdir)/meep-ctl.hpp $(top_builddir)/config.h $(srcdir)/meep-ctl-const.hpp ctl-io.h
-meep_SOURCES = meep.cpp structure.cpp meep_wrap.cxx $(HDRS) meep.i meep_op_renames.i meep_renames.i meep_enum_renames.i meep_swig_bug_workaround.i
-nodist_meep_SOURCES = main.cpp geom.cpp ctl-io.cpp ctl-io.h ctl-io.i
-meep_LDADD = $(LIBMEEP) @LIBCTL_LIBS@
-meep_CPPFLAGS = $(AM_CPPFLAGS) -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
+meep@PREC_SUFFIX@_SOURCES = meep.cpp structure.cpp meep_wrap.cxx $(HDRS) meep.i meep_op_renames.i meep_renames.i meep_enum_renames.i meep_swig_bug_workaround.i
+nodist_meep@PREC_SUFFIX@_SOURCES = main.cpp geom.cpp ctl-io.cpp ctl-io.h ctl-io.i
+meep@PREC_SUFFIX@_LDADD = $(LIBMEEP) @LIBCTL_LIBS@
+meep@PREC_SUFFIX@_CPPFLAGS = $(AM_CPPFLAGS) -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
-BUILT_SOURCES = $(nodist_meep_SOURCES) meep_renames.i meep_enum_renames.i meep_swig_bug_workaround.i meep-enums.scm meep_wrap.cxx
+BUILT_SOURCES = $(nodist_meep@PREC_SUFFIX@_SOURCES) meep_renames.i meep_enum_renames.i meep_swig_bug_workaround.i meep-enums.scm meep_wrap.cxx
# manual dependency hack to force the build order in certain cases
# ... for some reason automake's automatic dependencies are not working here
@@ -60,8 +60,9 @@
MY_DEFS = -DHAVE_CTL_HOOKS=1 -DHAVE_CTL_EXPORT_HOOK=1
-PROGRAM_NAME = meep
-SPECIFICATION_FILE = $(PROGRAM_NAME).scm
+PROGRAM_NAME = meep@PREC_SUFFIX@
+#SPECIFICATION_FILE = $(PROGRAM_NAME).scm
+SPECIFICATION_FILE = meep.scm
nodist_pkgdata_DATA = $(SPECIFICATION_FILE) meep-enums.scm casimir.scm materials.scm
##############################################################################
@@ -99,7 +100,7 @@
cp -f $(LIBCTL_DIR)/utils/geom.c $@
clean-local:
- rm -f $(nodist_meep_SOURCES) meep-enums.scm ctl-io.* main.* geom.*
+ rm -f $(nodist_meep@PREC_SUFFIX@_SOURCES) meep-enums.scm ctl-io.* main.* geom.*
maintainer-clean-local:
rm -f $(BUILT_SOURCES)
diff -Nuar meep-1.22.0/src/Makefile.am meep-1.22.0.prec/src/Makefile.am
--- meep-1.22.0/src/Makefile.am 2021-10-13 11:45:06.000000000 +1000
+++ meep-1.22.0.prec/src/Makefile.am 2022-02-18 20:01:08.051295847 +1000
@@ -1,4 +1,4 @@
-lib_LTLIBRARIES = libmeep.la
+lib_LTLIBRARIES = libmeep@PREC_SUFFIX@.la
include_HEADERS = meep.hpp
pkginclude_HEADERS = meep/mympi.hpp meep/vec.hpp meep/meep-config.h meepgeom.hpp material_data.hpp adjust_verbosity.hpp
@@ -9,7 +9,7 @@
HDRS = meep.hpp meep_internals.hpp meep/mympi.hpp meep/vec.hpp \
bicgstab.hpp meepgeom.hpp material_data.hpp adjust_verbosity.hpp
-libmeep_la_SOURCES = array_slice.cpp anisotropic_averaging.cpp \
+libmeep@PREC_SUFFIX@_la_SOURCES = array_slice.cpp anisotropic_averaging.cpp \
bands.cpp boundaries.cpp bicgstab.cpp casimir.cpp \
cw_fields.cpp dft.cpp dft_ldos.cpp energy_and_flux.cpp \
fields.cpp fields_dump.cpp loop_in_chunks.cpp h5fields.cpp h5file.cpp \
@@ -20,9 +20,9 @@
vec.cpp step_generic.cpp meepgeom.cpp GDSIIgeom.cpp $(HDRS) $(BUILT_SOURCES)
SUBDIRS = support
-libmeep_la_LIBADD = support/libsupport.la
+libmeep@PREC_SUFFIX@_la_LIBADD = support/libsupport.la
-libmeep_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
+libmeep@PREC_SUFFIX@_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
PRELUDE = "/* This file was automatically generated --- DO NOT EDIT */"
It can be done with suffices to library and pkgconfig file in a manner of fftw. The headers are the same excepting the definition of MEEP_SINGLE.