diff --git a/CMakeLists.txt b/CMakeLists.txt index 2099b5c..af3c84f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.30) # set vars set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -18,6 +18,7 @@ set(ENGINE_SOURCES src/Engine/Operator/GeometryOperator.cpp src/Engine/Operator/GeometryConnection.cpp src/Engine/Operator/GeometryOpDef.cpp + src/Engine/Operator/OperatorTable.cpp src/Engine/Operator/GOP_test.cpp src/Engine/Operator/GOP_transform.cpp src/Engine/Network/NetworkManager.cpp @@ -57,6 +58,8 @@ find_package (Eigen3 3.3 REQUIRED NO_MODULE) # tbb find_package(TBB REQUIRED COMPONENTS TBB::tbb) +find_package(Boost REQUIRED COMPONENTS filesystem system) + qt_add_executable(${AppExec} @@ -84,9 +87,12 @@ add_executable(${TestExec} tests/OperatorTests.cpp tests/NetworkTests.cpp ) -target_link_libraries(${TestExec} PRIVATE Catch2::Catch2WithMain Eigen3::Eigen Qt6::Core TBB::tbb) +target_link_libraries(${TestExec} PRIVATE Catch2::Catch2WithMain Eigen3::Eigen Qt6::Core TBB::tbb Boost::filesystem Boost::system) target_compile_definitions(${TestExec} PRIVATE UNIT_TEST) -target_include_directories(${TestExec} PUBLIC src) +target_include_directories(${TestExec} PUBLIC + src + ${BOOST_INCLUDE_DIRS} +) # benchmarks add_executable(${BenchExec} @@ -98,3 +104,4 @@ target_link_libraries(${BenchExec} PRIVATE Catch2::Catch2WithMain Eigen3::Eigen target_compile_definitions(${BenchExec} PRIVATE UNIT_TEST) target_include_directories(${BenchExec} PUBLIC src) +add_subdirectory(src/OpDefs) diff --git a/src/Engine/Operator/GeometryOpDef.h b/src/Engine/Operator/GeometryOpDef.h index f619c3f..87677e5 100644 --- a/src/Engine/Operator/GeometryOpDef.h +++ b/src/Engine/Operator/GeometryOpDef.h @@ -1,11 +1,12 @@ #pragma once #include "Engine/Operator/Geometry.h" #include "Engine/Types.h" +#include namespace enzo::nt { -class GeometryOpDef +class BOOST_SYMBOL_EXPORT GeometryOpDef { public: GeometryOpDef(enzo::nt::OpId opId); diff --git a/src/Engine/Operator/OperatorTable.cpp b/src/Engine/Operator/OperatorTable.cpp new file mode 100644 index 0000000..e3ef910 --- /dev/null +++ b/src/Engine/Operator/OperatorTable.cpp @@ -0,0 +1,10 @@ +#include "Engine/Operator/OperatorTable.h" + +#include + +void enzo::op::OperatorTable::addOperator(nt::opConstructor ctorFunc) +{ + std::cout << "OPERATOR TABLE ADDED\n"; + // ctorFunc(5); + ctorStore_.push_back(ctorFunc); +} diff --git a/src/Engine/Operator/OperatorTable.h b/src/Engine/Operator/OperatorTable.h new file mode 100644 index 0000000..26292a7 --- /dev/null +++ b/src/Engine/Operator/OperatorTable.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include "Engine/Network/NetworkManager.h" + +namespace enzo::op +{ +class BOOST_SYMBOL_EXPORT OperatorTable +{ +public: + void addOperator(nt::opConstructor ctorFunc); +private: + std::vector ctorStore_; +}; +} diff --git a/src/OpDefs/CMakeLists.txt b/src/OpDefs/CMakeLists.txt new file mode 100644 index 0000000..09f993f --- /dev/null +++ b/src/OpDefs/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.30) + +project(enzoOps1) + +find_package(Boost REQUIRED) +# eigen (math) +find_package (Eigen3 3.3 REQUIRED NO_MODULE) + +set(libName enzoOps1) +add_library(${libName} SHARED + main.cpp + ../Engine/Operator/OperatorTable.cpp + ../Engine/Operator/GeometryOpDef.cpp + ../Engine/Operator/Geometry.cpp + ../Engine/Operator/Attribute.cpp + ../Engine/Network/NetworkManager.cpp +) +target_link_libraries(${libName} PRIVATE Qt6::Core Qt6::Widgets Qt6::SvgWidgets Qt6::OpenGLWidgets glm::glm Eigen3::Eigen TBB::tbb) + + +MESSAGE("CURRENT SOURCE DIR" ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(${libName} PUBLIC ../) +target_include_directories(${libName} PUBLIC .) diff --git a/src/OpDefs/GopTransform.hpp b/src/OpDefs/GopTransform.hpp new file mode 100644 index 0000000..ada4397 --- /dev/null +++ b/src/OpDefs/GopTransform.hpp @@ -0,0 +1,15 @@ +#pragma once +#include "Engine/Operator/GeometryOpDef.h" + +class GopTransform +: public enzo::nt::GeometryOpDef +{ +public: + GopTransform(enzo::nt::OpId opId); + virtual void cookOp(); + static enzo::nt::GeometryOpDef* ctor(enzo::nt::OpId opId) + { + return new GopTransform(opId); + } + +}; diff --git a/src/OpDefs/main.cpp b/src/OpDefs/main.cpp new file mode 100644 index 0000000..beab512 --- /dev/null +++ b/src/OpDefs/main.cpp @@ -0,0 +1,56 @@ +#include "Engine/Operator/OperatorTable.h" +#include "OpDefs/GopTransform.hpp" +#include +#include +#include +#include "Engine/Operator/AttributeHandle.h" +#include + +extern "C" +{ BOOST_SYMBOL_EXPORT std::string myVar = "hello world"; + BOOST_SYMBOL_EXPORT void newSopOperator(enzo::op::OperatorTable* table) + { + table->addOperator( + &GopTransform::ctor + ); + } + +} + +GopTransform::GopTransform(enzo::nt::OpId opId) +: enzo::nt::GeometryOpDef(opId) +{ + +} + +void GopTransform::cookOp() +{ + using namespace enzo; + + if(outputRequested(0)) + { + // copy input geometry + geo::Geometry geo = cloneInputGeo(0); + + // ---- + // create geometry start + // ---- + auto PAttr = geo.getAttribByName(ga::AttrOwner::POINT, "P"); + ga::AttributeHandleVector3 PAttrHandle(PAttr); + + for(int i=0; i #include #include +#include TEST_CASE("foo") { @@ -17,3 +18,25 @@ TEST_CASE("tbb") << std::this_thread::get_id() << std::endl; }); } + +TEST_CASE("boost dll") +{ + std::cout << "Using Boost " + << BOOST_VERSION / 100000 << "." // major version + << BOOST_VERSION / 100 % 1000 << "." // minor version + << BOOST_VERSION % 100 // patch level + << std::endl; + + + boost::shared_ptr cpp_var = boost::dll::import_symbol( + "build/src/OpDefs/libenzoOps1.so", "myVar" + ); + std::cout << "VAR: " << *cpp_var << "\n"; + + auto cpp11_func = boost::dll::import_symbol( + "build/src/OpDefs/libenzoOps1.so", "newSopOperator" + ); + + cpp11_func(5); + +}