From 1c617e96f2dc39824db5212e513263cea01f1713 Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Wed, 2 Oct 2024 09:48:38 -0400 Subject: [PATCH 1/3] Consolidate csp-autogen impls, restore binding_int_t in platform, fix struct cpp example Signed-off-by: Tim Paine --- CMakeLists.txt | 40 +---- conda/dev-environment-unix.yml | 1 + conda/dev-environment-win.yml | 1 + cpp/cmake/modules/FindCSP.cmake | 149 +++++++++++------- cpp/cmake/modules/Findcsp_autogen.cmake | 32 ++-- cpp/csp/core/Platform.h | 1 - .../2_cpp_node_with_struct/CMakeLists.txt | 2 + .../05_cpp/2_cpp_node_with_struct/README.md | 2 +- .../05_cpp/2_cpp_node_with_struct/struct.cpp | 2 +- 9 files changed, 118 insertions(+), 112 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bb693281..7503d57a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -225,45 +225,7 @@ message("\n${Green}CMake Search Path: ${CMAKE_MODULE_PATH}${ColorReset}") ################################################################################################################################################### # Helpers # ########### -# FIXME: consolidate this function with Findcsp_autogen.cmake -function(csp_autogen MODULE_NAME DEST_FILENAME HEADER_NAME_OUTVAR SOURCE_NAME_OUTVAR) - string( REPLACE "." "\/" MODULE_FILENAME ${MODULE_NAME} ) - string( JOIN "." MODULE_FILENAME ${MODULE_FILENAME} "py" ) - - add_custom_target( mkdir_autogen_${MODULE_NAME} - ALL COMMAND ${CMAKE_COMMAND} -E make_directory - "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen" ) - - # VARARGS done by position - if(ARGV4) - set(CSP_AUTOGEN_EXTRA_ARGS "${ARGV4}") - else() - set(CSP_AUTOGEN_EXTRA_ARGS "") - endif() - - cmake_path(SET CSP_AUTOGEN_MODULE_PATH NORMALIZE "${CMAKE_SOURCE_DIR}/csp/build/csp_autogen.py") - cmake_path(SET CSP_AUTOGEN_DESTINATION_FOLDER NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen") - cmake_path(SET CSP_AUTOTGEN_CPP_OUT NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.cpp") - cmake_path(SET CSP_AUTOTGEN_H_OUT NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.h") - - if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(CSP_AUTOGEN_PYTHONPATH ${PROJECT_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE};${CMAKE_SOURCE_DIR};%PYTHONPATH% ) - else() - set(CSP_AUTOGEN_PYTHONPATH ${PROJECT_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}:$$PYTHONPATH ) - endif() - - add_custom_command(OUTPUT "${CSP_AUTOTGEN_CPP_OUT}" "${CSP_AUTOTGEN_H_OUT}" - COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${CSP_AUTOGEN_PYTHONPATH}" ${Python_EXECUTABLE} ${CSP_AUTOGEN_MODULE_PATH} -m ${MODULE_NAME} -d ${CSP_AUTOGEN_DESTINATION_FOLDER} -o ${DEST_FILENAME} ${CSP_AUTOGEN_EXTRA_ARGS} - COMMENT "generating csp c++ types from module ${MODULE_NAME}" - DEPENDS mkdir_autogen_${MODULE_NAME} - ${CMAKE_SOURCE_DIR}/csp/build/csp_autogen.py - ${CMAKE_SOURCE_DIR}/${MODULE_FILENAME} - csptypesimpl - ) - - set(${SOURCE_NAME_OUTVAR} "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.cpp" PARENT_SCOPE ) - set(${HEADER_NAME_OUTVAR} "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.h" PARENT_SCOPE ) -endfunction() +find_package(csp_autogen REQUIRED) ################################################################################################################################################### diff --git a/conda/dev-environment-unix.yml b/conda/dev-environment-unix.yml index bacc1dfed..6ffafe73f 100644 --- a/conda/dev-environment-unix.yml +++ b/conda/dev-environment-unix.yml @@ -20,6 +20,7 @@ dependencies: - libarrow=16 - libboost>=1.80.0 - libboost-headers>=1.80.0 + - libprotobuf<5 - librdkafka - lz4-c - mamba diff --git a/conda/dev-environment-win.yml b/conda/dev-environment-win.yml index a27d172ce..227efc28e 100644 --- a/conda/dev-environment-win.yml +++ b/conda/dev-environment-win.yml @@ -18,6 +18,7 @@ dependencies: - libarrow=16 - libboost>=1.80.0 - libboost-headers>=1.80.0 + - libprotobuf<5 - librdkafka - lz4-c - make diff --git a/cpp/cmake/modules/FindCSP.cmake b/cpp/cmake/modules/FindCSP.cmake index 73d6c564d..5b174a517 100644 --- a/cpp/cmake/modules/FindCSP.cmake +++ b/cpp/cmake/modules/FindCSP.cmake @@ -29,69 +29,110 @@ cmake_minimum_required(VERSION 3.7.2) -find_package(Python ${CSP_PYTHON_VERSION} EXACT REQUIRED COMPONENTS Interpreter) -set(ENV{PYTHONPATH} "${CMAKE_SOURCE_DIR}/ext:$ENV{PYTHONPATH}") - -# Find out the base path -execute_process( - COMMAND "${Python_EXECUTABLE}" -c - "from __future__ import print_function;import os.path;import csp;print(os.path.dirname(csp.__file__), end='')" - OUTPUT_VARIABLE __csp_base_path) +if(EXISTS "${CMAKE_SOURCE_DIR}/csp/__init__.py") + set(CSP_IN_SOURCE_BUILD ON) + set(__csp_base_path "${CMAKE_SOURCE_DIR}/csp") + set(__csp_include_path "${CMAKE_SOURCE_DIR}/cpp") + set(__csp_lib_path "${CMAKE_SOURCE_DIR}/") + set(__csp_base_path "${CMAKE_SOURCE_DIR}/csp") + set(__csp_base_path "${CMAKE_SOURCE_DIR}/csp") + set(__csp_version "0.0.0") +else() + set(CSP_IN_SOURCE_BUILD OFF) + # Find out the base path by interrogating the installed csp + find_package(Python ${CSP_PYTHON_VERSION} EXACT REQUIRED COMPONENTS Interpreter) + execute_process( + COMMAND "${Python_EXECUTABLE}" -c + "from __future__ import print_function;import os.path;import csp;print(os.path.dirname(csp.__file__), end='')" + OUTPUT_VARIABLE __csp_base_path) -# Find out the include path -execute_process( - COMMAND "${Python_EXECUTABLE}" -c - "from __future__ import print_function;import csp;print(csp.get_include_path(), end='')" - OUTPUT_VARIABLE __csp_include_path) + # Find out the include path + execute_process( + COMMAND "${Python_EXECUTABLE}" -c + "from __future__ import print_function;import csp;print(csp.get_include_path(), end='')" + OUTPUT_VARIABLE __csp_include_path) -# Find out the lib path -execute_process( + # Find out the lib path + execute_process( COMMAND "${Python_EXECUTABLE}" -c - "from __future__ import print_function;import csp;print(csp.get_lib_path(), end='')" - OUTPUT_VARIABLE __csp_lib_path) + "from __future__ import print_function;import csp;print(csp.get_lib_path(), end='')" + OUTPUT_VARIABLE __csp_lib_path) -# And the version -execute_process( - COMMAND "${Python_EXECUTABLE}" -c - "from __future__ import print_function;import csp;print(csp.__version__, end='')" - OUTPUT_VARIABLE __csp_version) + # And the version + execute_process( + COMMAND "${Python_EXECUTABLE}" -c + "from __future__ import print_function;import csp;print(csp.__version__, end='')" + OUTPUT_VARIABLE __csp_version) +endif() # Now look for files find_file(CSP_AUTOGEN csp_autogen.py HINTS "${__csp_base_path}/build" NO_DEFAULT_PATH) find_path(CSP_INCLUDE_DIR csp/core/System.h HINTS "${__csp_include_path}" "${PYTHON_INCLUDE_PATH}" NO_DEFAULT_PATH) -find_path(CSP_LIBS_DIR _cspimpl.so HINTS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_LIBRARY NAMES _cspimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_CORE_LIBRARY NAMES libcsp_core_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_ENGINE_LIBRARY NAMES libcsp_engine_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_TYPES_LIBRARY NAMES _csptypesimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_TYPES_STATIC_LIBRARY NAMES libcsp_types_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_BASELIB_LIBARY NAMES _cspbaselibimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_BASELIB_STATIC_LIBRARY NAMES libbaselibimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_BASKETLIB_LIBRARY NAMES _cspbasketlibimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_BASKETLIB_STATIC_LIBRARY NAMES libbasketlibimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_TESTLIB_LIBRARY NAMES _csptestlibimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_MATH_LIBRARY NAMES _cspmathimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_MATH_STATIC_LIBRARY NAMES libmathimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_STATS_LIBRARY NAMES _cspstatsimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_STATS_STATIC_LIBRARY NAMES libstatsimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_NPSTATS_LIBRARY NAMES _cspnpstatsimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_ADAPTER_UTILS_LIBRARY NAMES libcsp_adapter_utils_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_KAFKAADAPTER_LIBRARY NAMES _kafkaadapterimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_KAFKAADAPTER_STATIC_LIBRARY NAMES libcsp_kafka_adapter_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) - -find_library(CSP_PARQUETADAPTER_LIBRARY NAMES _parquetadapterimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) -find_library(CSP_PARQUETADAPTER_STATIC_LIBRARY NAMES libcsp_parquet_adapter_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) +if(CSP_IN_SOURCE_BUILD) + set(CSP_LIBS_DIR "${CMAKE_BINARY_DIR}/lib") + set(CSP_LIBRARY "${CSP_LIBS_DIR}/_cspimpl.so") + set(CSP_CORE_LIBRARY "${CSP_LIBS_DIR}/libcsp_core_static.a") + set(CSP_ENGINE_LIBRARY "${CSP_LIBS_DIR}/libcsp_engine_static.a") + set(CSP_TYPES_LIBRARY "${CSP_LIBS_DIR}/_csptypesimpl.so") + set(CSP_TYPES_LIBRARY_FOR_AUTOGEN "csptypesimpl") # NOTE: this is handled a bit specially in-source + set(CSP_TYPES_STATIC_LIBRARY "${CSP_LIBS_DIR}/libcsp_types_static.a") + set(CSP_BASELIB_LIBARY "${CSP_LIBS_DIR}/_cspbaselibimpl.so") + set(CSP_BASELIB_STATIC_LIBRARY "${CSP_LIBS_DIR}/libbaselibimpl_static.a") + set(CSP_BASKETLIB_LIBRARY "${CSP_LIBS_DIR}/_cspbasketlibimpl.so") + set(CSP_BASKETLIB_STATIC_LIBRARY "${CSP_LIBS_DIR}/libbasketlibimpl_static.a") + set(CSP_TESTLIB_LIBRARY "${CSP_LIBS_DIR}/_csptestlibimpl.so") + set(CSP_MATH_LIBRARY "${CSP_LIBS_DIR}/_cspmathimpl.so") + set(CSP_MATH_STATIC_LIBRARY "${CSP_LIBS_DIR}/libmathimpl_static.a") + set(CSP_STATS_LIBRARY "${CSP_LIBS_DIR}/_cspstatsimpl.so") + set(CSP_STATS_STATIC_LIBRARY "${CSP_LIBS_DIR}/libstatsimpl_static.a") + set(CSP_NPSTATS_LIBRARY "${CSP_LIBS_DIR}/_cspnpstatsimpl.so") + set(CSP_ADAPTER_UTILS_LIBRARY "${CSP_LIBS_DIR}/libcsp_adapter_utils_static.a") + set(CSP_KAFKAADAPTER_LIBRARY "${CSP_LIBS_DIR}/_kafkaadapterimpl.so") + set(CSP_KAFKAADAPTER_STATIC_LIBRARY "${CSP_LIBS_DIR}/libcsp_kafka_adapter_static.a") + set(CSP_PARQUETADAPTER_LIBRARY "${CSP_LIBS_DIR}/_parquetadapterimpl.so") + set(CSP_PARQUETADAPTER_STATIC_LIBRARY "${CSP_LIBS_DIR}/libcsp_parquet_adapter_static.a") + set(CSP_WEBSOCKETADAPTER_LIBRARY "${CSP_LIBS_DIR}/_websocketadapterimpl.so") + set(CSP_WEBSOCKETADAPTER_STATIC_LIBRARY "${CSP_LIBS_DIR}/libcsp_websocket_client_adapter_static.a") +else() + find_path(CSP_LIBS_DIR _cspimpl.so HINTS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_LIBRARY NAMES _cspimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_CORE_LIBRARY NAMES libcsp_core_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_ENGINE_LIBRARY NAMES libcsp_engine_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_TYPES_LIBRARY NAMES _csptypesimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + set(CSP_TYPES_LIBRARY_FOR_AUTOGEN "${CSP_TYPES_LIBRARY}") + find_library(CSP_TYPES_STATIC_LIBRARY NAMES libcsp_types_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_BASELIB_LIBARY NAMES _cspbaselibimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_BASELIB_STATIC_LIBRARY NAMES libbaselibimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_BASKETLIB_LIBRARY NAMES _cspbasketlibimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_BASKETLIB_STATIC_LIBRARY NAMES libbasketlibimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_TESTLIB_LIBRARY NAMES _csptestlibimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_MATH_LIBRARY NAMES _cspmathimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_MATH_STATIC_LIBRARY NAMES libmathimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_STATS_LIBRARY NAMES _cspstatsimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_STATS_STATIC_LIBRARY NAMES libstatsimpl_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_NPSTATS_LIBRARY NAMES _cspnpstatsimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_ADAPTER_UTILS_LIBRARY NAMES libcsp_adapter_utils_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_KAFKAADAPTER_LIBRARY NAMES _kafkaadapterimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_KAFKAADAPTER_STATIC_LIBRARY NAMES libcsp_kafka_adapter_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_PARQUETADAPTER_LIBRARY NAMES _parquetadapterimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_PARQUETADAPTER_STATIC_LIBRARY NAMES libcsp_parquet_adapter_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + + find_library(CSP_WEBSOCKETADAPTER_LIBRARY NAMES _websocketadapterimpl.so PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) + find_library(CSP_WEBSOCKETADAPTER_STATIC_LIBRARY NAMES libcsp_websocket_client_adapter_static.a PATHS "${__csp_lib_path}" NO_DEFAULT_PATH) +endif() if(CSP_INCLUDE_DIR AND CSP_LIBS_DIR AND CSP_AUTOGEN) set(CSP_FOUND 1 CACHE INTERNAL "CSP found") @@ -99,5 +140,3 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CSP REQUIRED_VARS CSP_INCLUDE_DIR CSP_LIBS_DIR CSP_AUTOGEN VERSION_VAR __csp_version) - -find_package(csp_autogen) diff --git a/cpp/cmake/modules/Findcsp_autogen.cmake b/cpp/cmake/modules/Findcsp_autogen.cmake index 1c28a99f6..3e8284bb9 100644 --- a/cpp/cmake/modules/Findcsp_autogen.cmake +++ b/cpp/cmake/modules/Findcsp_autogen.cmake @@ -1,10 +1,11 @@ function(csp_autogen MODULE_NAME DEST_FILENAME HEADER_NAME_OUTVAR SOURCE_NAME_OUTVAR) - string( REPLACE "." "\/" MODULE_FILENAME ${MODULE_NAME} ) - string( JOIN "." MODULE_FILENAME ${MODULE_FILENAME} "py" ) + string(REPLACE "." "_" MODULE_TARGETNAME ${MODULE_NAME}) + string(REPLACE "." "\/" MODULE_FILENAME ${MODULE_NAME}) + string(JOIN "." MODULE_FILENAME ${MODULE_FILENAME} "py") - add_custom_target( mkdir_autogen_${MODULE_NAME} + add_custom_target(mkdir_autogen_${MODULE_TARGETNAME} ALL COMMAND ${CMAKE_COMMAND} -E make_directory - "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen" ) + "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen") # VARARGS done by position if(ARGV4) @@ -13,26 +14,27 @@ function(csp_autogen MODULE_NAME DEST_FILENAME HEADER_NAME_OUTVAR SOURCE_NAME_OU set(CSP_AUTOGEN_EXTRA_ARGS "") endif() - cmake_path(SET CSP_AUTOGEN_MODULE_PATH NORMALIZE "${CMAKE_SOURCE_DIR}/csp/build/csp_autogen.py") + find_package(CSP REQUIRED) + cmake_path(SET CSP_AUTOGEN_MODULE_PATH NORMALIZE "${CSP_AUTOGEN}") cmake_path(SET CSP_AUTOGEN_DESTINATION_FOLDER NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen") - cmake_path(SET CSP_AUTOTGEN_CPP_OUT NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.cpp") - cmake_path(SET CSP_AUTOTGEN_H_OUT NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.h") + cmake_path(SET CSP_AUTOGEN_CPP_OUT NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.cpp") + cmake_path(SET CSP_AUTOGEN_H_OUT NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.h") if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(CSP_AUTOGEN_PYTHONPATH ${PROJECT_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE};${CMAKE_SOURCE_DIR};%PYTHONPATH% ) + set(CSP_AUTOGEN_PYTHONPATH ${PROJECT_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE};${CMAKE_SOURCE_DIR};%PYTHONPATH%) else() - set(CSP_AUTOGEN_PYTHONPATH ${PROJECT_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}:$$PYTHONPATH ) + set(CSP_AUTOGEN_PYTHONPATH ${PROJECT_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}:$$PYTHONPATH) endif() - add_custom_command(OUTPUT "${CSP_AUTOTGEN_CPP_OUT}" "${CSP_AUTOTGEN_H_OUT}" + add_custom_command(OUTPUT "${CSP_AUTOGEN_CPP_OUT}" "${CSP_AUTOGEN_H_OUT}" COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${CSP_AUTOGEN_PYTHONPATH}" ${Python_EXECUTABLE} ${CSP_AUTOGEN_MODULE_PATH} -m ${MODULE_NAME} -d ${CSP_AUTOGEN_DESTINATION_FOLDER} -o ${DEST_FILENAME} ${CSP_AUTOGEN_EXTRA_ARGS} COMMENT "generating csp c++ types from module ${MODULE_NAME}" - DEPENDS mkdir_autogen_${MODULE_NAME} - ${CMAKE_SOURCE_DIR}/csp/build/csp_autogen.py + DEPENDS mkdir_autogen_${MODULE_TARGETNAME} + ${CSP_AUTOGEN_MODULE_PATH} ${CMAKE_SOURCE_DIR}/${MODULE_FILENAME} - csptypesimpl + ${CSP_TYPES_LIBRARY_FOR_AUTOGEN} ) - set(${SOURCE_NAME_OUTVAR} "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.cpp" PARENT_SCOPE ) - set(${HEADER_NAME_OUTVAR} "${CMAKE_CURRENT_BINARY_DIR}/csp_autogen/${DEST_FILENAME}.h" PARENT_SCOPE ) + set(${SOURCE_NAME_OUTVAR} "${CSP_AUTOGEN_CPP_OUT}" PARENT_SCOPE) + set(${HEADER_NAME_OUTVAR} "${CSP_AUTOGEN_H_OUT}" PARENT_SCOPE) endfunction() \ No newline at end of file diff --git a/cpp/csp/core/Platform.h b/cpp/csp/core/Platform.h index 3ef861259..eb6e0c058 100644 --- a/cpp/csp/core/Platform.h +++ b/cpp/csp/core/Platform.h @@ -90,7 +90,6 @@ inline uint8_t ffs(uint64_t n) } #else - #define CSPIMPL_EXPORT __attribute__ ((visibility ("default"))) #define CSPTYPESIMPL_EXPORT __attribute__ ((visibility ("default"))) diff --git a/examples/05_cpp/2_cpp_node_with_struct/CMakeLists.txt b/examples/05_cpp/2_cpp_node_with_struct/CMakeLists.txt index ded25e0b4..0386265a2 100644 --- a/examples/05_cpp/2_cpp_node_with_struct/CMakeLists.txt +++ b/examples/05_cpp/2_cpp_node_with_struct/CMakeLists.txt @@ -13,6 +13,7 @@ else() endif() list(PREPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../../../cpp/cmake/modules") +set(ENV{PYTHONPATH} "${CMAKE_SOURCE_DIR}/../../../:$ENV{PYTHONPATH}") set(CMAKE_MACOSX_RPATH TRUE) set(CMAKE_SKIP_RPATH FALSE) @@ -100,6 +101,7 @@ find_package(CSP REQUIRED) message("${Cyan}Found CSP:\n\tincludes in: ${CSP_INCLUDE_DIR}\n\tlibraries in: ${CSP_LIBS_DIR}${ColorReset}") include_directories(${CSP_INCLUDE_DIR}) +find_package(csp_autogen REQUIRED) csp_autogen(mystruct.struct mystruct STRUCT_AUTOGEN_HEADER STRUCT_AUTOGEN_SOURCE) add_library(mystruct SHARED struct.cpp ${STRUCT_AUTOGEN_SOURCE}) diff --git a/examples/05_cpp/2_cpp_node_with_struct/README.md b/examples/05_cpp/2_cpp_node_with_struct/README.md index 03415b654..d557af3c1 100644 --- a/examples/05_cpp/2_cpp_node_with_struct/README.md +++ b/examples/05_cpp/2_cpp_node_with_struct/README.md @@ -11,5 +11,5 @@ python setup.py build build_ext --inplace Run: ```bash -python -m struct +python -m mystruct ``` diff --git a/examples/05_cpp/2_cpp_node_with_struct/struct.cpp b/examples/05_cpp/2_cpp_node_with_struct/struct.cpp index 0e4ad4c17..d385c93b9 100644 --- a/examples/05_cpp/2_cpp_node_with_struct/struct.cpp +++ b/examples/05_cpp/2_cpp_node_with_struct/struct.cpp @@ -36,7 +36,7 @@ DECLARE_CPPNODE(use_struct_generic) switchCspType( m_fieldAccess -> type(), [this,©]( auto tag ) { using ElemT = typename decltype(tag)::type; - if(std::is_same()) { + if(std::is_same()) { m_fieldAccess -> setValue( copy.get(), 0); } }); From 49a7bfab57a51d24f162a49bb8b9730ab08f183d Mon Sep 17 00:00:00 2001 From: Adam Glustein Date: Wed, 2 Oct 2024 10:01:25 -0400 Subject: [PATCH 2/3] Make all public classes of CSP visible so that user extensions can access them Signed-off-by: Adam Glustein --- cpp/csp/core/BasicAllocator.h | 2 +- cpp/csp/core/DynamicBitSet.h | 2 +- cpp/csp/core/Enum.h | 2 +- cpp/csp/core/EnumBitSet.h | 4 +++- cpp/csp/core/Generator.h | 3 ++- cpp/csp/core/QueueWaiter.h | 9 ++++++--- cpp/csp/core/SRMWLockFreeQueue.h | 3 ++- cpp/csp/core/TaggedPointerUnion.h | 3 ++- cpp/csp/core/Time.h | 10 +++++----- cpp/csp/engine/AdapterManager.h | 3 ++- cpp/csp/engine/AlarmInputAdapter.h | 3 ++- cpp/csp/engine/BasketInfo.h | 9 +++++---- cpp/csp/engine/Consumer.h | 3 ++- cpp/csp/engine/CppNode.h | 2 +- cpp/csp/engine/CspEnum.h | 7 ++++--- cpp/csp/engine/CspType.h | 11 ++++++----- cpp/csp/engine/CycleStepTable.h | 3 ++- cpp/csp/engine/Dictionary.h | 3 ++- cpp/csp/engine/DynamicEngine.h | 3 ++- cpp/csp/engine/DynamicNode.h | 3 ++- cpp/csp/engine/Engine.h | 5 +++-- cpp/csp/engine/Enums.h | 3 ++- cpp/csp/engine/EventPropagator.h | 3 ++- cpp/csp/engine/Feedback.h | 3 ++- cpp/csp/engine/GraphOutputAdapter.h | 3 ++- cpp/csp/engine/InputAdapter.h | 3 ++- cpp/csp/engine/Node.h | 3 ++- cpp/csp/engine/OutputAdapter.h | 3 ++- cpp/csp/engine/PendingPushEvents.h | 3 ++- cpp/csp/engine/Profiler.h | 2 +- cpp/csp/engine/PullInputAdapter.h | 3 ++- cpp/csp/engine/PushEvent.h | 3 ++- cpp/csp/engine/PushInputAdapter.h | 3 ++- cpp/csp/engine/PushPullInputAdapter.h | 3 ++- cpp/csp/engine/RootEngine.h | 3 ++- cpp/csp/engine/Scheduler.h | 3 ++- cpp/csp/engine/StatusAdapter.h | 3 ++- cpp/csp/engine/Struct.h | 25 ++++++++++++------------ cpp/csp/engine/TickBuffer.h | 3 ++- cpp/csp/engine/TimeSeries.h | 7 ++++--- cpp/csp/engine/TimeSeriesProvider.h | 3 ++- cpp/csp/engine/TimerInputAdapter.h | 3 ++- cpp/csp/engine/VectorContainer.h | 3 ++- cpp/csp/engine/WindowBuffer.h | 3 ++- cpp/csp/python/Common.h | 5 +++-- cpp/csp/python/NumpyInputAdapter.h | 3 ++- cpp/csp/python/PyAdapterManager.h | 3 ++- cpp/csp/python/PyAdapterManagerWrapper.h | 1 + cpp/csp/python/PyBasketInputProxy.h | 9 +++++---- cpp/csp/python/PyBasketOutputProxy.h | 9 +++++---- cpp/csp/python/PyEngine.h | 3 ++- cpp/csp/python/PyGraphOutputAdapter.h | 3 ++- cpp/csp/python/PyInputProxy.h | 3 ++- cpp/csp/python/PyNode.h | 3 ++- cpp/csp/python/PyNodeWrapper.h | 8 +++++++- cpp/csp/python/PyNumbaNode.h | 3 ++- cpp/csp/python/PyOutputProxy.h | 3 ++- cpp/csp/python/PyPushInputAdapter.h | 3 ++- cpp/csp/python/PyStructFastList.h | 3 ++- cpp/csp/python/PyStructList.h | 3 ++- 60 files changed, 157 insertions(+), 95 deletions(-) diff --git a/cpp/csp/core/BasicAllocator.h b/cpp/csp/core/BasicAllocator.h index da3aac792..029518a7c 100644 --- a/cpp/csp/core/BasicAllocator.h +++ b/cpp/csp/core/BasicAllocator.h @@ -15,7 +15,7 @@ namespace csp { // Extremely basic non-thread safe fixed-size allocator -class BasicAllocator +class CSP_PUBLIC BasicAllocator { public: //elemsize is size of a single alloc, blockSize is number of elements to diff --git a/cpp/csp/core/DynamicBitSet.h b/cpp/csp/core/DynamicBitSet.h index 5fb120f06..eb4a950fc 100644 --- a/cpp/csp/core/DynamicBitSet.h +++ b/cpp/csp/core/DynamicBitSet.h @@ -9,7 +9,7 @@ namespace csp { template -class DynamicBitSet +class CSP_PUBLIC DynamicBitSet { public: diff --git a/cpp/csp/core/Enum.h b/cpp/csp/core/Enum.h index aac11fd5d..428dadee2 100644 --- a/cpp/csp/core/Enum.h +++ b/cpp/csp/core/Enum.h @@ -73,7 +73,7 @@ bool UnknownOnInvalidValue(long) { return false; } START_PACKED template -struct Enum : public EnumTraits +struct CSP_PUBLIC Enum : public EnumTraits { using EnumV = typename EnumTraits::_enum; using Mapping = std::vector; diff --git a/cpp/csp/core/EnumBitSet.h b/cpp/csp/core/EnumBitSet.h index 660681029..49c0fdac5 100644 --- a/cpp/csp/core/EnumBitSet.h +++ b/cpp/csp/core/EnumBitSet.h @@ -1,6 +1,8 @@ #ifndef _IN_CSP_CORE_ENUMBITSET_H #define _IN_CSP_CORE_ENUMBITSET_H +#include + #include #include #include @@ -12,7 +14,7 @@ namespace csp //Utility class to hold enums as a bitmask ( where enum values are incremental from 0 ) //enum must have a NUM_TYPES entry for number of entries template< typename EnumT > -class EnumBitSet +class CSP_PUBLIC EnumBitSet { using value_type = uint64_t; diff --git a/cpp/csp/core/Generator.h b/cpp/csp/core/Generator.h index 8f33eaddf..fabd1e8ec 100644 --- a/cpp/csp/core/Generator.h +++ b/cpp/csp/core/Generator.h @@ -1,12 +1,13 @@ #ifndef _IN_CSP_CORE_GENERATOR_H #define _IN_CSP_CORE_GENERATOR_H +#include #include namespace csp { template< typename V, typename ...Args > -class Generator +class CSP_PUBLIC Generator { public: using Ptr = std::shared_ptr>; diff --git a/cpp/csp/core/QueueWaiter.h b/cpp/csp/core/QueueWaiter.h index 307930cd5..d8d40bb81 100644 --- a/cpp/csp/core/QueueWaiter.h +++ b/cpp/csp/core/QueueWaiter.h @@ -1,17 +1,20 @@ #ifndef _IN_CSP_CORE_QUEUEBLOCKINGWAIT_H #define _IN_CSP_CORE_QUEUEBLOCKINGWAIT_H +#include +#include +#include + #include #include -#include -#include + namespace csp { class TimeDelta; -class QueueWaiter +class CSP_PUBLIC QueueWaiter { public: QueueWaiter() : m_eventsPending( false ) diff --git a/cpp/csp/core/SRMWLockFreeQueue.h b/cpp/csp/core/SRMWLockFreeQueue.h index 902c8a364..23a05592b 100644 --- a/cpp/csp/core/SRMWLockFreeQueue.h +++ b/cpp/csp/core/SRMWLockFreeQueue.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_CORE_SRMWLOCKFREEQUEUE_H #define _IN_CSP_CORE_SRMWLOCKFREEQUEUE_H +#include #include #include #include @@ -14,7 +15,7 @@ namespace csp one of the simplest! template type is required to have an intrinsic next pointer */ template< typename T > -class alignas(CACHELINE_SIZE) SRMWLockFreeQueue +class alignas(CACHELINE_SIZE) CSP_PUBLIC SRMWLockFreeQueue { public: class Batch diff --git a/cpp/csp/core/TaggedPointerUnion.h b/cpp/csp/core/TaggedPointerUnion.h index 43a41a85f..358bc1744 100644 --- a/cpp/csp/core/TaggedPointerUnion.h +++ b/cpp/csp/core/TaggedPointerUnion.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_CORE_TAGGEDPOINTERUNION_H #define _IN_CSP_CORE_TAGGEDPOINTERUNION_H +#include #include namespace csp @@ -25,7 +26,7 @@ struct IndexOf > template -class TaggedPointerUnion +class CSP_PUBLIC TaggedPointerUnion { public: static inline constexpr size_t NUM_TAGS = sizeof...(Ts); diff --git a/cpp/csp/core/Time.h b/cpp/csp/core/Time.h index f2e73d990..70e8d2f70 100644 --- a/cpp/csp/core/Time.h +++ b/cpp/csp/core/Time.h @@ -21,7 +21,7 @@ const int64_t NANOS_PER_SECOND = 1000000000; const int64_t SECONDS_PER_DAY = 86400; const int64_t NANOS_PER_DAY = NANOS_PER_SECOND * SECONDS_PER_DAY; -class TimeDelta +class CSP_PUBLIC TimeDelta { public: constexpr TimeDelta() : TimeDelta( TimeDelta::NONE() ) {} @@ -165,7 +165,7 @@ inline std::ostream & operator <<( std::ostream &os, const TimeDelta & d ) return os; } -class Date +class CSP_PUBLIC Date { public: Date() : Date( NONE() ) {} @@ -316,7 +316,7 @@ inline std::ostream & operator <<( std::ostream &os, const Date & d ) return os; } -class Time +class CSP_PUBLIC Time { public: Time() : Time( -1 ) {} //NONE @@ -446,7 +446,7 @@ inline std::ostream & operator <<( std::ostream &os, const Time & t ) // Time is internally stored as an int64_t nanoseconds since 1970. // All DateTime objects are stored as UTC and should be treated as such -class DateTime +class CSP_PUBLIC DateTime { public: DateTime() : DateTime( DateTime::NONE() ) {} @@ -597,7 +597,7 @@ inline std::ostream & operator <<( std::ostream &os, const DateTime & dt ) //Helper class to extract day/month/year/etc info from raw timestamp //ie DateTimeEx dte( existingDt ) //dte.day, etc etc -class DateTimeEx : public DateTime +class CSP_PUBLIC DateTimeEx : public DateTime { public: DateTimeEx( const DateTime & dt ); diff --git a/cpp/csp/engine/AdapterManager.h b/cpp/csp/engine/AdapterManager.h index fd71126c9..52e243965 100644 --- a/cpp/csp/engine/AdapterManager.h +++ b/cpp/csp/engine/AdapterManager.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ADAPTER_MANAGER_H #define _IN_CSP_ADAPTER_MANAGER_H +#include #include #include #include @@ -16,7 +17,7 @@ class AdapterManager; class Engine; -class ManagedSimInputAdapter : public InputAdapter +class CSP_PUBLIC ManagedSimInputAdapter : public InputAdapter { public: ManagedSimInputAdapter( csp::Engine *engine, const CspTypePtr &type, AdapterManager *manager, PushMode pushMode ); diff --git a/cpp/csp/engine/AlarmInputAdapter.h b/cpp/csp/engine/AlarmInputAdapter.h index 28b70f704..f0428bac9 100644 --- a/cpp/csp/engine/AlarmInputAdapter.h +++ b/cpp/csp/engine/AlarmInputAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_ALARMINPUTADAPTER_H #define _IN_CSP_ENGINE_ALARMINPUTADAPTER_H +#include #include #include @@ -8,7 +9,7 @@ namespace csp { template -class AlarmInputAdapter final : public InputAdapter +class CSP_PUBLIC AlarmInputAdapter final : public InputAdapter { public: AlarmInputAdapter( Engine * engine, CspTypePtr & type ) : InputAdapter( engine, type, PushMode::NON_COLLAPSING ) diff --git a/cpp/csp/engine/BasketInfo.h b/cpp/csp/engine/BasketInfo.h index 4fa50cb8a..cd4da8a0b 100644 --- a/cpp/csp/engine/BasketInfo.h +++ b/cpp/csp/engine/BasketInfo.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_BASKETINFO_H #include +#include #include #include #include @@ -12,7 +13,7 @@ namespace csp class Node; -class InputBasketInfo +class CSP_PUBLIC InputBasketInfo { using TickedInputs = std::vector; @@ -188,7 +189,7 @@ class InputBasketInfo bool m_isDynamic; }; -class DynamicInputBasketInfo : public InputBasketInfo +class CSP_PUBLIC DynamicInputBasketInfo : public InputBasketInfo { public: using ChangeCallback = std::function; @@ -227,7 +228,7 @@ class DynamicInputBasketInfo : public InputBasketInfo TimeDelta m_timeWindowPolicy; }; -class OutputBasketInfo +class CSP_PUBLIC OutputBasketInfo { public: OutputBasketInfo( CspTypePtr & type, Node * node, size_t size, bool isDynamic = false ); @@ -254,7 +255,7 @@ class OutputBasketInfo bool m_isDynamic; }; -class DynamicOutputBasketInfo : public OutputBasketInfo +class CSP_PUBLIC DynamicOutputBasketInfo : public OutputBasketInfo { public: DynamicOutputBasketInfo( CspTypePtr & type, Node * node ); diff --git a/cpp/csp/engine/Consumer.h b/cpp/csp/engine/Consumer.h index f9d2bc7c6..22bcc077d 100644 --- a/cpp/csp/engine/Consumer.h +++ b/cpp/csp/engine/Consumer.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_CONSUMER_H #define _IN_CSP_ENGINE_CONSUMER_H +#include #include #include #include @@ -13,7 +14,7 @@ namespace csp class InputAdapter; //Base of either regular Nodes or output adapters -class Consumer +class CSP_PUBLIC Consumer { public: Consumer( Engine * ); diff --git a/cpp/csp/engine/CppNode.h b/cpp/csp/engine/CppNode.h index f4d33f58e..22a7a0a0c 100644 --- a/cpp/csp/engine/CppNode.h +++ b/cpp/csp/engine/CppNode.h @@ -13,7 +13,7 @@ namespace csp //CppNode is used specifically for C++ defined Nodes, and should only be used //for definig c++ nodes using the macros defined at the end -class CppNode : public csp::Node +class CSP_PUBLIC CppNode : public csp::Node { public: using Shape = std::variant>; diff --git a/cpp/csp/engine/CspEnum.h b/cpp/csp/engine/CspEnum.h index 93f083369..05e236c7f 100644 --- a/cpp/csp/engine/CspEnum.h +++ b/cpp/csp/engine/CspEnum.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -14,7 +15,7 @@ namespace csp class CspEnumMeta; -class CspEnumInstance +class CSP_PUBLIC CspEnumInstance { public: CspEnumInstance( std::string name, int64_t value, csp::CspEnumMeta * meta ) : m_name( name ), m_value( value ), m_meta( meta ) {} @@ -34,7 +35,7 @@ class CspEnumInstance //As an optimization we do NOT attach meta or value to every instance of an enum. Instead, the enum //holds only a pointer to a singleton CspEnumInstance, which holds the value, name, and meta pointer. -class CspEnum +class CSP_PUBLIC CspEnum { public: CspEnum(); @@ -58,7 +59,7 @@ class CspEnum std::ostream &operator<<( std::ostream &os, const CspEnum & rhs ); -class CspEnumMeta +class CSP_PUBLIC CspEnumMeta { public: using ValueDef = std::unordered_map; diff --git a/cpp/csp/engine/CspType.h b/cpp/csp/engine/CspType.h index b85ab4148..c3c070bbf 100644 --- a/cpp/csp/engine/CspType.h +++ b/cpp/csp/engine/CspType.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_CSPTYPE_H #include +#include #include #include #include @@ -14,7 +15,7 @@ namespace csp class CspStringType; -class CspType +class CSP_PUBLIC CspType { public: @@ -115,7 +116,7 @@ class CspType Type m_type; }; -class CspStringType : public CspType +class CSP_PUBLIC CspStringType : public CspType { public: CspStringType(bool isBytes) @@ -134,7 +135,7 @@ class CspEnum; class CspEnumMeta; -class CspEnumType : public CspType +class CSP_PUBLIC CspEnumType : public CspType { public: CspEnumType( std::shared_ptr & meta ) : CspType( CspType::Type::ENUM ), @@ -154,7 +155,7 @@ using StructPtr = TypedStructPtr; class StructMeta; -class CspStructType : public CspType +class CSP_PUBLIC CspStructType : public CspType { public: CspStructType( const std::shared_ptr & meta ) : CspType( CspType::Type::STRUCT ), @@ -167,7 +168,7 @@ class CspStructType : public CspType std::shared_ptr m_meta; }; -class CspArrayType : public CspType +class CSP_PUBLIC CspArrayType : public CspType { public: CspArrayType( CspTypePtr elemType, bool isPyStructFastList = false ) : diff --git a/cpp/csp/engine/CycleStepTable.h b/cpp/csp/engine/CycleStepTable.h index 8605a7c2e..435377646 100644 --- a/cpp/csp/engine/CycleStepTable.h +++ b/cpp/csp/engine/CycleStepTable.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_CYCLESTEPTABLE_H #include +#include #include #include @@ -11,7 +12,7 @@ namespace csp class Consumer; class Profiler; -class CycleStepTable +class CSP_PUBLIC CycleStepTable { public: CycleStepTable(); diff --git a/cpp/csp/engine/Dictionary.h b/cpp/csp/engine/Dictionary.h index 1e7a2c82a..faf6193f6 100644 --- a/cpp/csp/engine/Dictionary.h +++ b/cpp/csp/engine/Dictionary.h @@ -2,6 +2,7 @@ #define _IN_CSP_CORE_DICTIONARY_H #include +#include #include #include #include @@ -22,7 +23,7 @@ using DictionaryPtr = std::shared_ptr; class StructMeta; using StructMetaPtr = std::shared_ptr; -class Dictionary +class CSP_PUBLIC Dictionary { public: struct Data; diff --git a/cpp/csp/engine/DynamicEngine.h b/cpp/csp/engine/DynamicEngine.h index e45392c6d..aa2b4130b 100644 --- a/cpp/csp/engine/DynamicEngine.h +++ b/cpp/csp/engine/DynamicEngine.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_DYNAMICENGINE_H #define _IN_CSP_ENGINE_DYNAMICENGINE_H +#include #include #include #include @@ -9,7 +10,7 @@ namespace csp { -class DynamicEngine final : public Engine +class CSP_PUBLIC DynamicEngine final : public Engine { public: using ShutdownFn = std::function; diff --git a/cpp/csp/engine/DynamicNode.h b/cpp/csp/engine/DynamicNode.h index 3ad3711a6..6434cf26c 100644 --- a/cpp/csp/engine/DynamicNode.h +++ b/cpp/csp/engine/DynamicNode.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_DYNAMIC_H #define _IN_CSP_ENGINE_DYNAMIC_H +#include #include #include #include @@ -17,7 +18,7 @@ class DynamicEngine; //external inputs and triggering a cycle step. //All dynamic engine input adapters as well as all external timeseries wired into dynamic are registered as inputs //into the DynanicNode instance so that it can invoke cycle step at the appropriate times. -class DynamicNode final : public Node +class CSP_PUBLIC DynamicNode final : public Node { public: using Outputs = std::vector; diff --git a/cpp/csp/engine/Engine.h b/cpp/csp/engine/Engine.h index ed8799625..23afb256a 100644 --- a/cpp/csp/engine/Engine.h +++ b/cpp/csp/engine/Engine.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_ENGINE_H #include +#include #include #include #include @@ -23,7 +24,7 @@ class TimeSeriesProvider; class Engine; class RootEngine; -struct EngineOwned +struct CSP_PUBLIC EngineOwned { //force objects derived from EngineOwned to go through engine createOwnedObject methods //little trick here to force all derivations to fail @@ -34,7 +35,7 @@ struct EngineOwned void operator delete( void* ptr ) { ::operator delete(ptr); } }; -class Engine +class CSP_PUBLIC Engine { using AdapterManagers = std::vector>; using InputAdapters = std::vector>; diff --git a/cpp/csp/engine/Enums.h b/cpp/csp/engine/Enums.h index 9581ba0e0..0a45bb28d 100644 --- a/cpp/csp/engine/Enums.h +++ b/cpp/csp/engine/Enums.h @@ -2,12 +2,13 @@ #define _IN_CSP_ENGINE_ENUMS_H #include +#include namespace csp { // NOTE this must align with the python side Enum definition /// -struct PushModeTraits +struct CSP_PUBLIC PushModeTraits { enum _enum : unsigned char { diff --git a/cpp/csp/engine/EventPropagator.h b/cpp/csp/engine/EventPropagator.h index 3627d6b5f..77e45ca4c 100644 --- a/cpp/csp/engine/EventPropagator.h +++ b/cpp/csp/engine/EventPropagator.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_EVENTPROPAGATOR_H #define _IN_CSP_ENGINE_EVENTPROPAGATOR_H +#include #include #include @@ -9,7 +10,7 @@ namespace csp class Consumer; -class EventPropagator +class CSP_PUBLIC EventPropagator { public: EventPropagator(); diff --git a/cpp/csp/engine/Feedback.h b/cpp/csp/engine/Feedback.h index ae02925aa..c8a128a5b 100644 --- a/cpp/csp/engine/Feedback.h +++ b/cpp/csp/engine/Feedback.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_FEEDBACK_H #define _IN_CSP_ENGINE_FEEDBACK_H +#include #include #include @@ -11,7 +12,7 @@ template class FeedbackInputAdapter; template -class FeedbackOutputAdapter final : public OutputAdapter +class CSP_PUBLIC FeedbackOutputAdapter final : public OutputAdapter { public: FeedbackOutputAdapter( csp::Engine * engine, diff --git a/cpp/csp/engine/GraphOutputAdapter.h b/cpp/csp/engine/GraphOutputAdapter.h index c160f9d1a..14e869361 100644 --- a/cpp/csp/engine/GraphOutputAdapter.h +++ b/cpp/csp/engine/GraphOutputAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_GRAPHOUTPUTADAPTER_H #define _IN_CSP_ENGINE_GRAPHOUTPUTADAPTER_H +#include #include #include @@ -14,7 +15,7 @@ namespace csp //GraphOutputAdapters are also special in that they are registered in both a dynamic engine and the root engine as sahred_ptr. They make it into root //so that the root processes them at the end of the csp.run call ( dynamics could be shutdown by then ). We also register in root //to ensure we dont hit key clashses. -class GraphOutputAdapter : public OutputAdapter, public std::enable_shared_from_this +class CSP_PUBLIC GraphOutputAdapter : public OutputAdapter, public std::enable_shared_from_this { public: GraphOutputAdapter( csp::Engine * engine, int32_t tickCount, TimeDelta tickHistory ); diff --git a/cpp/csp/engine/InputAdapter.h b/cpp/csp/engine/InputAdapter.h index f992d6ff2..462000f2c 100644 --- a/cpp/csp/engine/InputAdapter.h +++ b/cpp/csp/engine/InputAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_INPUTADAPTER_H #define _IN_CSP_ENGINE_INPUTADAPTER_H +#include #include #include #include @@ -11,7 +12,7 @@ namespace csp class Consumer; -class InputAdapter : public TimeSeriesProvider, public EngineOwned +class CSP_PUBLIC InputAdapter : public TimeSeriesProvider, public EngineOwned { public: InputAdapter( Engine * engine, const CspTypePtr & type, PushMode pushMode ); diff --git a/cpp/csp/engine/Node.h b/cpp/csp/engine/Node.h index 23ab37a4d..73bbaadb3 100644 --- a/cpp/csp/engine/Node.h +++ b/cpp/csp/engine/Node.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_NODE_H #include +#include #include #include #include @@ -24,7 +25,7 @@ struct NodeDef INOUT_ID_TYPE numOutputs; }; -class Node : public Consumer, public EngineOwned +class CSP_PUBLIC Node : public Consumer, public EngineOwned { public: Node( NodeDef def, Engine * ); diff --git a/cpp/csp/engine/OutputAdapter.h b/cpp/csp/engine/OutputAdapter.h index 7a3f1040d..53c993f1d 100644 --- a/cpp/csp/engine/OutputAdapter.h +++ b/cpp/csp/engine/OutputAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_OUTPUTADAPTER_H #define _IN_CSP_ENGINE_OUTPUTADAPTER_H +#include #include #include @@ -9,7 +10,7 @@ namespace csp class TimeSeriesProvider; -class OutputAdapter : public Consumer, public EngineOwned +class CSP_PUBLIC OutputAdapter : public Consumer, public EngineOwned { public: OutputAdapter( csp::Engine * engine ); diff --git a/cpp/csp/engine/PendingPushEvents.h b/cpp/csp/engine/PendingPushEvents.h index 5036e7fd2..95b43e43b 100644 --- a/cpp/csp/engine/PendingPushEvents.h +++ b/cpp/csp/engine/PendingPushEvents.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_PENDINGPUSHEVENTS_H #define _IN_CSP_ENGINE_PENDINGPUSHEVENTS_H +#include #include #include @@ -10,7 +11,7 @@ namespace csp struct PushGroup; class PushInputAdapters; -class PendingPushEvents +class CSP_PUBLIC PendingPushEvents { public: PendingPushEvents(); diff --git a/cpp/csp/engine/Profiler.h b/cpp/csp/engine/Profiler.h index 6fb5dfee8..71044aba8 100644 --- a/cpp/csp/engine/Profiler.h +++ b/cpp/csp/engine/Profiler.h @@ -13,7 +13,7 @@ namespace csp { -class Profiler +class CSP_PUBLIC Profiler { // All times are returned as doubles representing time in seconds diff --git a/cpp/csp/engine/PullInputAdapter.h b/cpp/csp/engine/PullInputAdapter.h index 5da071e23..455e21aa0 100644 --- a/cpp/csp/engine/PullInputAdapter.h +++ b/cpp/csp/engine/PullInputAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_PULLINPUTADAPTER_H #define _IN_CSP_ENGINE_PULLINPUTADAPTER_H +#include #include #include #include @@ -9,7 +10,7 @@ namespace csp { template -class PullInputAdapter : public InputAdapter +class CSP_PUBLIC PullInputAdapter : public InputAdapter { public: PullInputAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode ) : InputAdapter( engine, type, pushMode ) diff --git a/cpp/csp/engine/PushEvent.h b/cpp/csp/engine/PushEvent.h index bc16c024d..6e75ce7e0 100644 --- a/cpp/csp/engine/PushEvent.h +++ b/cpp/csp/engine/PushEvent.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_PUSHEVENT_H #define _IN_CSP_ENGINE_PUSHEVENT_H +#include #include namespace csp @@ -8,7 +9,7 @@ namespace csp class PushInputAdapter; -struct PushEvent +struct CSP_PUBLIC PushEvent { PushEvent( PushInputAdapter *adapter ) : m_adapter( adapter ), next( nullptr ) {} diff --git a/cpp/csp/engine/PushInputAdapter.h b/cpp/csp/engine/PushInputAdapter.h index 665962a7a..d17233a19 100644 --- a/cpp/csp/engine/PushInputAdapter.h +++ b/cpp/csp/engine/PushInputAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_PUSHINPUTADAPTER_H #define _IN_CSP_ENGINE_PUSHINPUTADAPTER_H +#include #include #include #include @@ -75,7 +76,7 @@ class PushBatch : public SRMWLockFreeQueue::Batch PushGroup * m_group; //used for assertion check }; -class PushInputAdapter : public InputAdapter +class CSP_PUBLIC PushInputAdapter : public InputAdapter { public: PushInputAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode, diff --git a/cpp/csp/engine/PushPullInputAdapter.h b/cpp/csp/engine/PushPullInputAdapter.h index 2cd46bee7..2f08da998 100644 --- a/cpp/csp/engine/PushPullInputAdapter.h +++ b/cpp/csp/engine/PushPullInputAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ENGINE_PUSHPULLINPUTADAPTER_H #define _IN_CSP_ENGINE_PUSHPULLINPUTADAPTER_H +#include #include #include @@ -9,7 +10,7 @@ namespace csp //A variation of PushInputAdapter that lets you schedule historical data as well. Used for adapters //that can replay history and switch to realtime seamlessly ( ie kafka ) -class PushPullInputAdapter : public PushInputAdapter +class CSP_PUBLIC PushPullInputAdapter : public PushInputAdapter { public: PushPullInputAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode, diff --git a/cpp/csp/engine/RootEngine.h b/cpp/csp/engine/RootEngine.h index 746704580..d8c10be7b 100644 --- a/cpp/csp/engine/RootEngine.h +++ b/cpp/csp/engine/RootEngine.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_ROOTENGINE_H #include +#include #include #include #include @@ -33,7 +34,7 @@ class EndCycleListener bool m_dirty = false; }; -class RootEngine : public Engine +class CSP_PUBLIC RootEngine : public Engine { using PushEventQueue = SRMWLockFreeQueue; diff --git a/cpp/csp/engine/Scheduler.h b/cpp/csp/engine/Scheduler.h index 96efc2c58..438c489a6 100644 --- a/cpp/csp/engine/Scheduler.h +++ b/cpp/csp/engine/Scheduler.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_SCHEDULER_H #include +#include #include #include #include @@ -14,7 +15,7 @@ namespace csp class InputAdapter; -class Scheduler +class CSP_PUBLIC Scheduler { struct Event; diff --git a/cpp/csp/engine/StatusAdapter.h b/cpp/csp/engine/StatusAdapter.h index f243c7c70..aebacc3f6 100644 --- a/cpp/csp/engine/StatusAdapter.h +++ b/cpp/csp/engine/StatusAdapter.h @@ -1,6 +1,7 @@ #ifndef _IN_CSP_ADAPTERS_STATUSADAPTER_H #define _IN_CSP_ADAPTERS_STATUSADAPTER_H +#include #include #include @@ -29,7 +30,7 @@ struct StatusLevelTraits using StatusLevel = csp::Enum; -class StatusAdapter : public PushInputAdapter +class CSP_PUBLIC StatusAdapter : public PushInputAdapter { public: StatusAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode, PushGroup * group = nullptr ) : PushInputAdapter( engine, type, pushMode, group ) diff --git a/cpp/csp/engine/Struct.h b/cpp/csp/engine/Struct.h index 1b09cb97b..692ad842e 100644 --- a/cpp/csp/engine/Struct.h +++ b/cpp/csp/engine/Struct.h @@ -2,6 +2,7 @@ #define _IN_CSP_ENGINE_STRUCT_H #include +#include #include #include #include @@ -18,7 +19,7 @@ class TypedStructPtr; using StructPtr = TypedStructPtr; -class StructField +class CSP_PUBLIC StructField { public: @@ -113,7 +114,7 @@ class StructField using StructFieldPtr = std::shared_ptr; template -class NativeStructField : public StructField +class CSP_PUBLIC NativeStructField : public StructField { static_assert( CspType::Type::fromCType::type <= CspType::Type::MAX_NATIVE_TYPE ); static_assert( sizeof(T) == alignof(T) ); @@ -176,7 +177,7 @@ using TimeDeltaStructField = NativeStructField; using DateStructField = NativeStructField; using TimeStructField = NativeStructField