Filters: Add cmake instantiations generator
TL;DR
-
Automatize the generation of VTK-m filter instantiation source files. -
Port all the current instantiation files to use this new framework. -
Extra: Small unrelated change to remove warnings with CUDA device code.
Background
I have already opened months ago another MRs attempting to solve this issue with a different approach which consisted in creating a c++ small program that parses the filters headers and generates the instantiation files in the project source code.
Approach
This time, in this MR, the approach is to have CMake doing this and also creating those instantiation files in the build directory so that they do not populate the vtkm source code.
Example:
In the header file:
VTKM_INSTANTIATION_BEGIN
#ifdef VTKM_ADD_XGC_DEFAULT_TYPES
extern template VTKM_FILTER_GRADIENT_TEMPLATE_EXPORT vtkm::cont::DataSet Gradient::DoExecute(
const vtkm::cont::DataSet&,
const vtkm::cont::ArrayHandle<vtkm::Vec<float, 3>, vtkm::cont::StorageTagXGCCoordinates>&,
const vtkm::filter::FieldMetadata&,
vtkm::filter::PolicyBase<vtkm::filter::PolicyDefault>);
#endif
VTKM_INSTANTIATION_END
in CMakeLists.txt
:
vtkm_add_instantiations(GradientInstantiationFiles FILTER Gradient)
Results in the following transient file:
#define vtkm_filter_GradientInstantiation9_cxx
/* Needed for linking errors when no instantiations */
int __vtkm_filter_GradientInstantiation9_cxx;
#include <vtkm/filter/Gradient.h>
#include <vtkm/filter/Gradient.hxx>
namespace vtkm
{
namespace filter
{
#ifdef VTKM_ADD_XGC_DEFAULT_TYPES
template VTKM_FILTER_GRADIENT_EXPORT vtkm::cont::DataSet Gradient::DoExecute(
const vtkm::cont::DataSet&,
const vtkm::cont::ArrayHandle<vtkm::Vec<float, 3>, vtkm::cont::StorageTagXGCCoordinates>&,
const vtkm::filter::FieldMetadata&,
vtkm::filter::PolicyBase<vtkm::filter::PolicyDefault>);
#endif
}
}
Evaluation
TBD
Signed-off-by: Vicente Adolfo Bolea Sanchez vicente.bolea@kitware.com
Edited by Vicente Bolea