Skip to content

Commit

Permalink
Introduce CUDA extension
Browse files Browse the repository at this point in the history
  • Loading branch information
alxbilger committed Jan 23, 2024
1 parent 7aa1f09 commit 616f648
Show file tree
Hide file tree
Showing 6 changed files with 187 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -305,4 +305,6 @@ if(SOFTROBOTS_BUILD_TESTS)
add_subdirectory(tests)
endif()

sofa_add_subdirectory(plugin extensions/CUDA SoftRobots.CUDA)

include(cmake/packaging.cmake)
27 changes: 27 additions & 0 deletions extensions/CUDA/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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"
)
9 changes: 9 additions & 0 deletions extensions/CUDA/SoftRobots.CUDAConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -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)
43 changes: 43 additions & 0 deletions extensions/CUDA/src/SoftRobots.CUDA/config.h.in
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>. *
*******************************************************************************
* 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 <sofa/config.h>

#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
71 changes: 71 additions & 0 deletions extensions/CUDA/src/SoftRobots.CUDA/init.cpp
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>. *
*******************************************************************************
* 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 <SoftRobots.CUDA/init.h>
#include <sofa/core/ObjectFactory.h>
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
35 changes: 35 additions & 0 deletions extensions/CUDA/src/SoftRobots.CUDA/init.h
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>. *
*******************************************************************************
* 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 <SoftRobots.CUDA/config.h>

namespace softrobots::cuda
{
SOFA_SOFTROBOTS_CUDA_API void init();
} // namespace softrobots::cuda

0 comments on commit 616f648

Please sign in to comment.