Build libqpms as shared library.
Former-commit-id: 218d30a8502e5ea5814e4d8e119b750ca93d257f
This commit is contained in:
parent
82337ca07f
commit
2e037550b5
|
@ -1,6 +1,7 @@
|
|||
cmake_minimum_required(VERSION 3.0.2)
|
||||
include(CMakeAddFortranSubdirectory)
|
||||
include(version.cmake)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
project (QPMS)
|
||||
|
||||
|
|
20
README.md
20
README.md
|
@ -47,20 +47,22 @@ you can [get the source and compile it yourself][GSL].
|
|||
|
||||
You also need a fresh enough version of [cmake][].
|
||||
|
||||
After GSL is installed, you can install qpms to your local python library using::
|
||||
After GSL is installed, you can install qpms to your local python library using
|
||||
|
||||
```{.sh}
|
||||
cmake .
|
||||
make amos
|
||||
cmake -DCMAKE_INSTALL_PREFIX=${YOUR_PREFIX} .
|
||||
make install
|
||||
python3 setup.py install --user
|
||||
```
|
||||
Above, replace `${YOUR_PREFIX}` with the path to where you want to install the shared library;
|
||||
you will also need to make sure that the linker can find it;
|
||||
on Linux, this means the path `${YOUR_PREFIX}/lib` is included in your
|
||||
`LIBRARY_PATH` and `LD_LIBRARY_PATH` environment variables. The same applies
|
||||
to the GSL and OpenBLAS dependencies: they must be installed where the
|
||||
installation scripts and linker can find them (setting the `C_INCLUDE_PATH` environment
|
||||
variable might be necessary as well).
|
||||
|
||||
If GSL is not installed the standard library path on your system, you might
|
||||
need to pass it to the installation script using the
|
||||
`LIBRARY_PATH` and `LD_LIBRARY_PATH` environment
|
||||
variables.
|
||||
|
||||
Special care has often be taken when installing QPMS in cluster environments.
|
||||
Special care might need to be taken when installing QPMS in cluster environments.
|
||||
Specific installation instructions for Aalto University's Triton cluster
|
||||
can be found in a [separate document][TRITON-README].
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ add_definitions(-DQPMS_VECTORS_NICE_TRANSFORMATIONS)
|
|||
set (DIRS ${GSL_INCLUDE_DIRS} ${GSLCBLAS_INCLUDE_DIRS})
|
||||
include_directories(${DIRS})
|
||||
|
||||
add_library (qpms translations.c tmatrices.c vecprint.c vswf.c wigner.c ewald.c
|
||||
add_library (qpms SHARED translations.c tmatrices.c vecprint.c vswf.c wigner.c ewald.c
|
||||
ewaldsf.c pointgroups.c latticegens.c
|
||||
lattices2d.c gaunt.c error.c legendre.c symmetries.c vecprint.c
|
||||
bessel.c own_zgemm.c parsing.c scatsystem.c materials.c drudeparam_data.c)
|
||||
|
@ -25,3 +25,7 @@ target_link_libraries (qpms
|
|||
amos
|
||||
)
|
||||
target_include_directories (qpms PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
install(TARGETS qpms
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
|
|
|
@ -1,7 +1,21 @@
|
|||
from pkg_resources import get_distribution
|
||||
__version__ = get_distribution('qpms').version
|
||||
|
||||
from .qpms_c import PointGroup, FinitePointGroup, FinitePointGroupElement, Particle, scatsystem_set_nthreads, ScatteringSystem, ScatteringMatrix
|
||||
import os as __os
|
||||
from sys import platform as __platform
|
||||
|
||||
import warnings as __warnings
|
||||
|
||||
try:
|
||||
from .qpms_c import PointGroup, FinitePointGroup, FinitePointGroupElement, Particle, scatsystem_set_nthreads, ScatteringSystem, ScatteringMatrix
|
||||
except ImportError as ex:
|
||||
if __platform == "linux" or __platform == "linux2":
|
||||
if 'LD_LIBRARY_PATH' not in __os.environ.keys():
|
||||
__warnings.warn("Environment variable LD_LIBRARY_PATH has not been set. Make it point to a directory where you installed libqpms and run python again")
|
||||
else:
|
||||
__warnings.warn("Does your LD_LIBRARY_PATH include a directory where you installed libqpms? Check and run python again."
|
||||
'Currently, I see LD_LIBRARY_PATH="%s"' % __os.environ['LD_LIBRARY_PATH'])
|
||||
raise ex
|
||||
from .qpms_p import *
|
||||
from .cyquaternions import CQuat, IRot3
|
||||
from .cybspec import VSWFNorm, BaseSpec
|
||||
|
|
28
setup.py
28
setup.py
|
@ -84,13 +84,13 @@ libqpms_sources = [
|
|||
|
||||
cycommon = Extension('qpms.cycommon',
|
||||
sources = ['qpms/cycommon.pyx'],
|
||||
extra_link_args=['qpms/libqpms.a'],
|
||||
libraries=['gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
#extra_link_args=['qpms/libqpms.a'],
|
||||
libraries=['qpms', 'gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
)
|
||||
cytmatrices = Extension('qpms.cytmatrices',
|
||||
sources = ['qpms/cytmatrices.pyx'],
|
||||
extra_link_args=['qpms/libqpms.a', 'amos/libamos.a'],
|
||||
libraries=['gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
#extra_link_args=['qpms/libqpms.a', 'amos/libamos.a'],
|
||||
libraries=['qpms', 'gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
)
|
||||
cytranslations = Extension('qpms.cytranslations',
|
||||
sources = ['qpms/cytranslations.pyx',
|
||||
|
@ -99,34 +99,34 @@ cytranslations = Extension('qpms.cytranslations',
|
|||
extra_compile_args=['-std=c99',
|
||||
'-DQPMS_COMPILE_PYTHON_EXTENSIONS', # This is needed to enable it in translations.h
|
||||
],
|
||||
extra_link_args=['qpms/libqpms.a', 'amos/libamos.a'],
|
||||
libraries=['gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
#extra_link_args=['qpms/libqpms.a', 'amos/libamos.a'],
|
||||
libraries=['qpms', 'gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
)
|
||||
cybspec = Extension('qpms.cybspec',
|
||||
sources = ['qpms/cybspec.pyx'],
|
||||
extra_link_args=['qpms/libqpms.a'],
|
||||
libraries=['gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
#extra_link_args=['qpms/libqpms.a'],
|
||||
libraries=['qpms', 'gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
)
|
||||
cymaterials = Extension('qpms.cymaterials',
|
||||
sources = ['qpms/cymaterials.pyx'],
|
||||
extra_link_args=['qpms/libqpms.a'],
|
||||
libraries=['gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
#extra_link_args=['qpms/libqpms.a'],
|
||||
libraries=['qpms', 'gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
)
|
||||
cyquaternions = Extension('qpms.cyquaternions',
|
||||
sources = ['qpms/cyquaternions.pyx'],
|
||||
extra_link_args=['amos/libamos.a', 'qpms/libqpms.a'],
|
||||
libraries=['gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
#extra_link_args=['amos/libamos.a', 'qpms/libqpms.a'],
|
||||
libraries=['qpms', 'gsl', 'lapacke', 'blas', 'gslcblas', 'pthread',]
|
||||
)
|
||||
|
||||
qpms_c = Extension('qpms.qpms_c',
|
||||
sources = [
|
||||
'qpms/qpms_c.pyx',
|
||||
],
|
||||
libraries=['gsl', 'lapacke', 'blas', 'gslcblas', 'pthread', #'omp'
|
||||
libraries=['qpms', 'gsl', 'lapacke', 'blas', 'gslcblas', 'pthread', #'omp'
|
||||
#('amos', dict(sources=amos_sources) ),
|
||||
],
|
||||
include_dirs=['amos', 'qpms'],
|
||||
extra_link_args=[ 'qpms/libqpms.a','amos/libamos.a', ],
|
||||
#extra_link_args=[ 'qpms/libqpms.a','amos/libamos.a', ],
|
||||
#runtime_library_dirs=os.environ['LD_LIBRARY_PATH'].split(':') if 'LD_LIBRARY_PATH' in os.environ else [],
|
||||
#extra_objects = ['amos/libamos.a'], # FIXME apparently, I would like to eliminate the need to cmake/make first
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue