add minimally tested swig wrapper for Lua, Perl5, Python, and Tcl

This commit is contained in:
Axel Kohlmeyer
2020-10-17 23:50:49 -04:00
parent 7420b7018a
commit fcbbc51a33
3 changed files with 224 additions and 0 deletions

View File

@ -379,6 +379,14 @@ foreach(PKG_WITH_INCL KSPACE PYTHON VORONOI USER-COLVARS USER-MOLFILE USER-NETCD
endif()
endforeach()
# optionally enable building script wrappers using swig
option(WITH_SWIG "Build scripting language wrappers with SWIG" OFF)
if(WITH_SWIG)
get_filename_component(LAMMPS_SWIG_DIR ${LAMMPS_SOURCE_DIR}/../swig ABSOLUTE)
get_filename_component(LAMMPS_SWIG_BIN ${CMAKE_BINARY_DIR}/swig ABSOLUTE)
add_subdirectory(${LAMMPS_SWIG_DIR} ${LAMMPS_SWIG_BIN})
endif()
set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler and machine specific optimization flags (compilation only)")
separate_arguments(CMAKE_TUNE_FLAGS)
foreach(_FLAG ${CMAKE_TUNE_FLAGS})

55
swig/CMakeLists.txt Normal file
View File

@ -0,0 +1,55 @@
# CMake configuration for generating script language interfaces with swig
# set minimum CMake version required and switch to new policies
cmake_minimum_required(VERSION 3.14)
if(POLICY CMP0078)
cmake_policy(SET CMP0078 NEW)
endif()
if(POLICY CMP0086)
cmake_policy(SET CMP0086 NEW)
endif()
if(NOT BUILD_SHARED_LIBS)
error(FATAL_ERROR "Option BUILD_SHARED_LIBS must be enabled to use SWIG wrappers")
endif()
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
option(BUILD_SWIG_LUA "Build Lua wrapper with SWIG" OFF)
option(BUILD_SWIG_PERL5 "Build Perl5 wrapper with SWIG" OFF)
option(BUILD_SWIG_PYTHON "Build Python wrapper with SWIG" OFF)
option(BUILD_SWIG_TCL "Build Tcl wrapper with SWIG" OFF)
if(BUILD_SWIG_PYTHON)
set_property(SOURCE lammps.i PROPERTY SWIG_MODULE_NAME pylammps)
swig_add_library(pylammps TYPE MODULE LANGUAGE python SOURCES lammps.i)
find_package(Python REQUIRED COMPONENTS Development)
swig_link_libraries(pylammps PRIVATE lammps Python::Python)
endif()
if(BUILD_SWIG_PERL5)
set_property(SOURCE lammps.i PROPERTY SWIG_MODULE_NAME pllammps)
swig_add_library(pllammps TYPE MODULE LANGUAGE perl5 SOURCES lammps.i)
find_package(PerlLibs REQUIRED 5.0)
target_compile_definitions(pllammps PRIVATE _LARGEFILE64_SOURCE)
target_include_directories(pllammps PRIVATE ${PERL_INCLUDE_PATH})
swig_link_libraries(pllammps PRIVATE lammps ${PERL_LIBRARY})
endif()
if(BUILD_SWIG_LUA)
set_property(SOURCE lammps.i PROPERTY SWIG_MODULE_NAME lualammps)
swig_add_library(lualammps TYPE MODULE LANGUAGE lua SOURCES lammps.i)
find_package(Lua REQUIRED)
target_include_directories(lualammps PRIVATE ${LUA_INCLUDE_PATH})
swig_link_libraries(lualammps PRIVATE lammps ${LUA_LIBRARY})
endif()
if(BUILD_SWIG_TCL)
set_property(SOURCE lammps.i PROPERTY SWIG_MODULE_NAME tcllammps)
swig_add_library(tcllammps TYPE MODULE LANGUAGE tcl SOURCES lammps.i)
find_package(TCL REQUIRED)
target_include_directories(tcllammps PRIVATE ${TCL_INCLUDE_PATH})
swig_link_libraries(tcllammps PRIVATE lammps ${TCL_LIBRARY})
endif()

161
swig/lammps.i Normal file
View File

@ -0,0 +1,161 @@
%{
/* extern void *lammps_open(int argc, char **argv, MPI_Comm comm, void **ptr); */
extern void *lammps_open_no_mpi(int argc, char **argv, void **ptr);
extern void *lammps_open_fortran(int argc, char **argv, int f_comm);
extern void lammps_close(void *handle);
extern void lammps_mpi_init();
extern void lammps_mpi_finalize();
extern void lammps_free(void *ptr);
extern void lammps_file(void *handle, const char *file);
extern char *lammps_command(void *handle, const char *cmd);
extern void lammps_commands_list(void *handle, int ncmd, const char **cmds);
extern void lammps_commands_string(void *handle, const char *str);
extern int lammps_version(void *handle);
extern void lammps_get_os_info(char *buffer, int buf_size);
extern void lammps_memory_usage(void *handle, double *meminfo);
extern int lammps_get_mpi_comm(void *handle);
extern double lammps_get_natoms(void *handle);
extern double lammps_get_thermo(void *handle, const char *keyword);
extern void lammps_extract_box(void *handle, double *boxlo, double *boxhi,
double *xy, double *yz, double *xz,
int *pflags, int *boxflag);
extern void lammps_reset_box(void *handle, double *boxlo, double *boxhi,
double xy, double yz, double xz);
extern int lammps_extract_setting(void *handle, const char *keyword);
extern void *lammps_extract_global(void *handle, const char *name);
extern void *lammps_extract_atom(void *handle, const char *name);
extern int lammps_extract_global_datatype(void *handle, const char *name);
extern int lammps_extract_atom_datatype(void *handle, const char *name);
/* extern int lammps_create_atoms(void *handle, int n, int *id, int *type,
extern int lammps_create_atoms(void *handle, int n, int64_t *id, int *type, */
extern void *lammps_extract_compute(void *handle, char *id, int, int);
extern void *lammps_extract_fix(void *handle, char *, int, int, int, int);
extern void *lammps_extract_variable(void *handle, char *, char *);
extern int lammps_set_variable(void *, char *, char *);
extern void lammps_gather(void *, char *, int, int, void *);
extern void lammps_gather_concat(void *, char *, int, int, void *);
extern void lammps_gather_subset(void *, char *, int, int, int, int *, void *);
extern void lammps_scatter(void *, char *, int, int, void *);
extern void lammps_scatter_subset(void *, char *, int, int, int, int *, void *);
extern void lammps_gather_atoms(void *, char *, int, int, void *);
extern void lammps_gather_atoms_concat(void *, char *, int, int, void *);
extern void lammps_gather_atoms_subset(void *, char *, int, int, int, int *, void *);
extern void lammps_scatter_atoms(void *, char *, int, int, void *);
extern void lammps_scatter_atoms_subset(void *, char *, int, int, int, int *, void *);
extern int lammps_config_has_mpi_support();
extern int lammps_config_has_package(const char *);
extern int lammps_config_package_count();
extern int lammps_config_package_name(int, char *, int);
extern int lammps_config_has_gzip_support();
extern int lammps_config_has_png_support();
extern int lammps_config_has_jpeg_support();
extern int lammps_config_has_ffmpeg_support();
extern int lammps_config_has_exceptions();
extern int lammps_has_style(void *, const char *, const char *);
extern int lammps_style_count(void *, const char *);
extern int lammps_style_name(void *, const char *, int, char *, int);
extern int lammps_has_id(void *, const char *, const char *);
extern int lammps_id_count(void *, const char *);
extern int lammps_id_name(void *, const char *, int, char *, int);
extern int lammps_find_pair_neighlist(void*, char *, int, int, int);
extern int lammps_find_fix_neighlist(void*, char *, int);
extern int lammps_find_compute_neighlist(void*, char *, int);
extern int lammps_neighlist_num_elements(void*, int);
extern void lammps_neighlist_element_neighbors(void *, int, int, int *, int *, int ** );
/*
extern int lammps_encode_image_flags(int ix, int iy, int iz);
extern void lammps_decode_image_flags(int image, int *flags);
extern int64_t lammps_encode_image_flags(int ix, int iy, int iz);
extern void lammps_decode_image_flags(int64_t image, int *flags);
extern void lammps_set_fix_external_callback(void *, char *, FixExternalFnPtr, void*);
extern void lammps_set_fix_external_callback(void *, char *, FixExternalFnPtr, void*);
extern void lammps_set_fix_external_callback(void *, char *, FixExternalFnPtr, void*);
extern void lammps_fix_external_set_energy_global(void *, char *, double);
extern void lammps_fix_external_set_virial_global(void *, char *, double *);
*/
extern int lammps_is_running(void *handle);
extern void lammps_force_timeout(void *handle);
extern int lammps_has_error(void *handle);
extern int lammps_get_last_error_message(void *handle, char *buffer, int buf_size);
%}
/* extern void *lammps_open(int argc, char **argv, MPI_Comm comm, void **ptr); */
extern void *lammps_open_no_mpi(int argc, char **argv, void **ptr);
extern void *lammps_open_fortran(int argc, char **argv, int f_comm);
extern void lammps_close(void *handle);
extern void lammps_mpi_init();
extern void lammps_mpi_finalize();
extern void lammps_free(void *ptr);
extern void lammps_file(void *handle, const char *file);
extern char *lammps_command(void *handle, const char *cmd);
extern void lammps_commands_list(void *handle, int ncmd, const char **cmds);
extern void lammps_commands_string(void *handle, const char *str);
extern int lammps_version(void *handle);
extern void lammps_get_os_info(char *buffer, int buf_size);
extern void lammps_memory_usage(void *handle, double *meminfo);
extern int lammps_get_mpi_comm(void *handle);
extern double lammps_get_natoms(void *handle);
extern double lammps_get_thermo(void *handle, const char *keyword);
extern void lammps_extract_box(void *handle, double *boxlo, double *boxhi,
double *xy, double *yz, double *xz,
int *pflags, int *boxflag);
extern void lammps_reset_box(void *handle, double *boxlo, double *boxhi,
double xy, double yz, double xz);
extern int lammps_extract_setting(void *handle, const char *keyword);
extern void *lammps_extract_global(void *handle, const char *name);
extern void *lammps_extract_atom(void *handle, const char *name);
extern int lammps_extract_global_datatype(void *handle, const char *name);
extern int lammps_extract_atom_datatype(void *handle, const char *name);
/*
extern int lammps_create_atoms(void *handle, int n, int *id, int *type,
extern int lammps_create_atoms(void *handle, int n, int64_t *id, int *type, */
extern void *lammps_extract_compute(void *handle, char *id, int, int);
extern void *lammps_extract_fix(void *handle, char *, int, int, int, int);
extern void *lammps_extract_variable(void *handle, char *, char *);
extern int lammps_set_variable(void *, char *, char *);
extern void lammps_gather(void *, char *, int, int, void *);
extern void lammps_gather_concat(void *, char *, int, int, void *);
extern void lammps_gather_subset(void *, char *, int, int, int, int *, void *);
extern void lammps_scatter(void *, char *, int, int, void *);
extern void lammps_scatter_subset(void *, char *, int, int, int, int *, void *);
extern void lammps_gather_atoms(void *, char *, int, int, void *);
extern void lammps_gather_atoms_concat(void *, char *, int, int, void *);
extern void lammps_gather_atoms_subset(void *, char *, int, int, int, int *, void *);
extern void lammps_scatter_atoms(void *, char *, int, int, void *);
extern void lammps_scatter_atoms_subset(void *, char *, int, int, int, int *, void *);
extern int lammps_config_has_mpi_support();
extern int lammps_config_has_package(const char *);
extern int lammps_config_package_count();
extern int lammps_config_package_name(int, char *, int);
extern int lammps_config_has_gzip_support();
extern int lammps_config_has_png_support();
extern int lammps_config_has_jpeg_support();
extern int lammps_config_has_ffmpeg_support();
extern int lammps_config_has_exceptions();
extern int lammps_has_style(void *, const char *, const char *);
extern int lammps_style_count(void *, const char *);
extern int lammps_style_name(void *, const char *, int, char *, int);
extern int lammps_has_id(void *, const char *, const char *);
extern int lammps_id_count(void *, const char *);
extern int lammps_id_name(void *, const char *, int, char *, int);
extern int lammps_find_pair_neighlist(void*, char *, int, int, int);
extern int lammps_find_fix_neighlist(void*, char *, int);
extern int lammps_find_compute_neighlist(void*, char *, int);
extern int lammps_neighlist_num_elements(void*, int);
extern void lammps_neighlist_element_neighbors(void *, int, int, int *, int *, int ** );
/*
extern int lammps_encode_image_flags(int ix, int iy, int iz);
extern void lammps_decode_image_flags(int image, int *flags);
extern int64_t lammps_encode_image_flags(int ix, int iy, int iz);
extern void lammps_decode_image_flags(int64_t image, int *flags);
extern void lammps_set_fix_external_callback(void *, char *, FixExternalFnPtr, void*);
extern void lammps_set_fix_external_callback(void *, char *, FixExternalFnPtr, void*);
extern void lammps_set_fix_external_callback(void *, char *, FixExternalFnPtr, void*);
extern void lammps_fix_external_set_energy_global(void *, char *, double);
extern void lammps_fix_external_set_virial_global(void *, char *, double *);
*/
extern int lammps_is_running(void *handle);
extern void lammps_force_timeout(void *handle);
extern int lammps_has_error(void *handle);
extern int lammps_get_last_error_message(void *handle, char *buffer, int buf_size);