Skip to content
Snippets Groups Projects
Commit 90fdfc79 authored by Franck Pérignon's avatar Franck Pérignon
Browse files

template for c++ interface with swig

parent 60138fc9
No related branches found
No related tags found
No related merge requests found
......@@ -82,6 +82,13 @@ set(PACKAGE_NAME HySoP)
# - Global setup (interp and lib) -
find_package(PythonFull REQUIRED)
include(FindPythonModule)
find_package(SWIG 2.0.7 REQUIRED)
# WARNING FP : for cmake < 3.0 UseSWIG.cmake
# does not work properly (bug for swig outdir)
if(CMAKE_VERSION VERSION_LESS 3.0.0)
set(SWIG_USE_FILE ${CMAKE_SOURCE_DIR}/cmake/UseSWIG.cmake)
endif()
include(${SWIG_USE_FILE})
# - python packages -
find_python_module(numpy REQUIRED)
......
......@@ -7,6 +7,42 @@ setup.py file for @PYPACKAGE_NAME@
from numpy.distutils.core import setup, Extension
from numpy.distutils.misc_util import Configuration
import os
import glob
def create_swig_extension(name, src_dirs=None, sources=None):
"""Create a python module from C++ files, using swig
"""
if sources is None:
sources = []
assert src_dirs is not None
for sdir in src_dirs:
#sources += glob.glob(os.path.join(sdir, '*.i'))
sources += glob.glob(os.path.join(sdir, '*.cpp'))
swig_dir = os.path.join('@CMAKE_SOURCE_DIR@', 'swig')
sources.insert(0, os.path.join(swig_dir, 'cpp2hysop.i'))
inc_dirs = set([])
for f in sources:
inc_dirs.add(os.path.dirname(f))
inc_dirs = list(inc_dirs)
# To avoid -I -I in compiler call, which results in a bug:
#while inc_dir.count('') > 0:
# inc_dir.remove('')
#inc_dir.append('@CMAKE_BINARY_DIR@/Modules')
swig_opts = ['-I' + swig_dir,
#-outdir', '/Users/Franck/toto',
'-c++', '-modern',
]
extra_link_args = [] # ['-lopenblas', '-lgomp']
name = 'hysop._' + name
swig_ext = Extension(name, sources=sources, language='c++',
swig_opts=swig_opts,
extra_link_args=extra_link_args,
include_dirs=inc_dirs,
extra_compile_args=[''])
return swig_ext
# Full package name
name = '@PYPACKAGE_NAME@'
......@@ -50,6 +86,7 @@ ext_modules = []
# Check if libhysop was created
enable_fortran = "@WITH_LIB_FORTRAN@"
if enable_fortran is "ON":
inc_dir = '@MPI_Fortran_INCLUDE_PATH@'.split(';')
# To avoid -I -I in compiler call. Result in a bug:
......@@ -104,6 +141,21 @@ else:
data_files = []
# --- C++ files and swig interface --
# path to .i files
swig_dirs = [os.path.join('@CMAKE_SOURCE_DIR@','swig')]
# C++ files and swig interface
cpp_src_dirs = ['src/fftw']
for sd in cpp_src_dirs:
swig_dirs.append(os.path.join('@CMAKE_SOURCE_DIR@', sd))
ext = {}
ext['cpp2hysop'] = create_swig_extension(
name='cpp2hysop', src_dirs=swig_dirs)
for ex in ext:
ext_modules.append(ext[ex])
if "@WITH_GPU@" is "ON":
cl_src_dirs = ["cl_src", "cl_src/kernels",
"cl_src/advection", "cl_src/remeshing"]
......
#include "fftw.hpp"
#include <iostream>
namespace fftw
{
FFTW_solver::FFTW_solver(int d):_dimension(d)
{
std::cout << "init fftw c++, dim =" << _dimension << std::endl;
}
int FFTW_solver::run()
{
std::cout << "run fftw c++" << std::endl;
return 1;
}
}
#ifndef FFTW_HPP
#define FFTW_HPP
namespace fftw
{
/** */
class FFTW_solver
{
private:
/** */
int _dimension;
public:
FFTW_solver(int d);
int run();
};
}
#endif
// -*- C++ -*-
%module cpp2hysop
%include start.i
%include fftw.i
// -*- C++ -*-
%{
#include "fftw.hpp"
%}
%include "fftw.hpp"
This diff is collapsed.
%{
#define SWIG_FILE_WITH_INIT
#include <assert.h>
%}
// numpy macros
%include numpy.i
%init %{
import_array();
%}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment