diff --git a/CMakeLists.txt b/CMakeLists.txt index a12327c4..3725caf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -305,4 +305,6 @@ if(SOFTROBOTS_BUILD_TESTS) add_subdirectory(tests) endif() +sofa_add_subdirectory(plugin extensions/CUDA SoftRobots.CUDA) + include(cmake/packaging.cmake) diff --git a/extensions/CUDA/CMakeLists.txt b/extensions/CUDA/CMakeLists.txt new file mode 100644 index 00000000..fe89d6fb --- /dev/null +++ b/extensions/CUDA/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.12) +project(SoftRobots.CUDA) + +set(HEADER_FILES + src/SoftRobots.CUDA/init.h + src/SoftRobots.CUDA/config.h.in +) + +set(SOURCE_FILES + src/SoftRobots.CUDA/init.cpp +) + +sofa_find_package(SoftRobots REQUIRED) +sofa_find_package(SofaCUDA REQUIRED) + +add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES}) +target_link_libraries(${PROJECT_NAME} SoftRobots) +target_link_libraries(${PROJECT_NAME} SofaCUDA) + +sofa_create_package_with_targets( + PACKAGE_NAME ${PROJECT_NAME} + PACKAGE_VERSION ${Sofa_VERSION} + TARGETS ${PROJECT_NAME} AUTO_SET_TARGET_PROPERTIES + INCLUDE_SOURCE_DIR "src" + INCLUDE_INSTALL_DIR "${PROJECT_NAME}" + RELOCATABLE "plugins" +) diff --git a/extensions/CUDA/SoftRobots.CUDAConfig.cmake.in b/extensions/CUDA/SoftRobots.CUDAConfig.cmake.in new file mode 100644 index 00000000..639d2acb --- /dev/null +++ b/extensions/CUDA/SoftRobots.CUDAConfig.cmake.in @@ -0,0 +1,9 @@ +# CMake package configuration file for the SoftRobots.CUDA library + +@PACKAGE_GUARD@ +@PACKAGE_INIT@ + +find_package(SoftRobots QUIET REQUIRED) +find_package(SofaCUDA QUIET REQUIRED) + +check_required_components(SoftRobots.CUDA) diff --git a/extensions/CUDA/src/SoftRobots.CUDA/config.h.in b/extensions/CUDA/src/SoftRobots.CUDA/config.h.in new file mode 100644 index 00000000..4d114493 --- /dev/null +++ b/extensions/CUDA/src/SoftRobots.CUDA/config.h.in @@ -0,0 +1,43 @@ +/****************************************************************************** +* SOFA, Simulation Open-Framework Architecture * +* (c) 2006 INRIA, USTL, UJF, CNRS, MGH * +* * +* This program is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by * +* the Free Software Foundation; either version 2.1 of the License, or (at * +* your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * +* for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this program. If not, see . * +******************************************************************************* +* Plugin SoftRobots * +* * +* This plugin is also distributed under the GNU LGPL (Lesser General * +* Public License) license with the same conditions than SOFA. * +* * +* Contributors: Defrost team (INRIA, University of Lille, CNRS, * +* Ecole Centrale de Lille) * +* * +* Contact information: https://project.inria.fr/softrobot/contact/ * +******************************************************************************/ +#pragma once + +#include + +#ifdef SOFA_BUILD_SOFTROBOTS_CUDA +# define SOFA_TARGET @PROJECT_NAME@ +# define SOFA_SOFTROBOTS_CUDA_API SOFA_EXPORT_DYNAMIC_LIBRARY +#else +# define SOFA_SOFTROBOTS_CUDA_API SOFA_IMPORT_DYNAMIC_LIBRARY +#endif + +namespace softrobots::cuda +{ + constexpr const char* MODULE_NAME = "@PROJECT_NAME@"; + constexpr const char* MODULE_VERSION = "@PROJECT_VERSION@"; +} // namespace softrobots::cuda diff --git a/extensions/CUDA/src/SoftRobots.CUDA/init.cpp b/extensions/CUDA/src/SoftRobots.CUDA/init.cpp new file mode 100644 index 00000000..7ccb9bce --- /dev/null +++ b/extensions/CUDA/src/SoftRobots.CUDA/init.cpp @@ -0,0 +1,71 @@ +/****************************************************************************** +* SOFA, Simulation Open-Framework Architecture * +* (c) 2006 INRIA, USTL, UJF, CNRS, MGH * +* * +* This program is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by * +* the Free Software Foundation; either version 2.1 of the License, or (at * +* your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * +* for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this program. If not, see . * +******************************************************************************* +* Plugin SoftRobots * +* * +* This plugin is also distributed under the GNU LGPL (Lesser General * +* Public License) license with the same conditions than SOFA. * +* * +* Contributors: Defrost team (INRIA, University of Lille, CNRS, * +* Ecole Centrale de Lille) * +* * +* Contact information: https://project.inria.fr/softrobot/contact/ * +******************************************************************************/ +#include +#include +namespace softrobots::cuda +{ + +extern "C" { + SOFA_EXPORT_DYNAMIC_LIBRARY void initExternalModule(); + SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleName(); + SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleVersion(); + SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleComponentList(); +} + +void initExternalModule() +{ + init(); +} + +const char* getModuleName() +{ + return MODULE_NAME; +} + +const char* getModuleVersion() +{ + return MODULE_VERSION; +} + +void init() +{ + static bool first = true; + if (first) + { + first = false; + } +} + +const char* getModuleComponentList() +{ + /// string containing the names of the classes provided by the plugin + static std::string classes = sofa::core::ObjectFactory::getInstance()->listClassesFromTarget(MODULE_NAME); + return classes.c_str(); +} + +} // namespace softrobots::cuda diff --git a/extensions/CUDA/src/SoftRobots.CUDA/init.h b/extensions/CUDA/src/SoftRobots.CUDA/init.h new file mode 100644 index 00000000..4293d25c --- /dev/null +++ b/extensions/CUDA/src/SoftRobots.CUDA/init.h @@ -0,0 +1,35 @@ +/****************************************************************************** +* SOFA, Simulation Open-Framework Architecture * +* (c) 2006 INRIA, USTL, UJF, CNRS, MGH * +* * +* This program is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by * +* the Free Software Foundation; either version 2.1 of the License, or (at * +* your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * +* for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this program. If not, see . * +******************************************************************************* +* Plugin SoftRobots * +* * +* This plugin is also distributed under the GNU LGPL (Lesser General * +* Public License) license with the same conditions than SOFA. * +* * +* Contributors: Defrost team (INRIA, University of Lille, CNRS, * +* Ecole Centrale de Lille) * +* * +* Contact information: https://project.inria.fr/softrobot/contact/ * +******************************************************************************/ +#pragma once + +#include + +namespace softrobots::cuda +{ +SOFA_SOFTROBOTS_CUDA_API void init(); +} // namespace softrobots::cuda