Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ if(NOT CMAKE_BUILD_TYPE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
option(BUILD_SHARED_LIBS "Set to OFF to build static libraries" ON)
if(NOT BUILD_SHARED_LIBS)
add_definitions(-DVSOMEIP_STATIC_PLUGINS)
endif()

set(CMAKE_CXX_STANDARD 17)

Expand Down Expand Up @@ -287,7 +291,7 @@ file(GLOB ${VSOMEIP_NAME}-cfg_SRC
)
list(SORT ${VSOMEIP_NAME}-cfg_SRC)
if (VSOMEIP_ENABLE_MULTIPLE_ROUTING_MANAGERS EQUAL 0)
add_library(${VSOMEIP_NAME}-cfg SHARED ${${VSOMEIP_NAME}-cfg_SRC})
add_library(${VSOMEIP_NAME}-cfg ${${VSOMEIP_NAME}-cfg_SRC})
set_target_properties (${VSOMEIP_NAME}-cfg PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION})
target_compile_features(${VSOMEIP_NAME}-cfg PRIVATE cxx_std_17)
if (MSVC)
Expand Down Expand Up @@ -322,7 +326,7 @@ endif()

list(SORT ${VSOMEIP_NAME}_SRC)

add_library(${VSOMEIP_NAME} SHARED ${${VSOMEIP_NAME}_SRC})
add_library(${VSOMEIP_NAME} ${${VSOMEIP_NAME}_SRC})
set_target_properties (${VSOMEIP_NAME} PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION})
target_compile_features(${VSOMEIP_NAME} PRIVATE cxx_std_17)
if (MSVC)
Expand Down Expand Up @@ -354,7 +358,7 @@ file(GLOB ${VSOMEIP_NAME}-sd_SRC
)
list(SORT ${VSOMEIP_NAME}-sd_SRC)

add_library(${VSOMEIP_NAME}-sd SHARED ${${VSOMEIP_NAME}-sd_SRC})
add_library(${VSOMEIP_NAME}-sd ${${VSOMEIP_NAME}-sd_SRC})
target_compile_features(${VSOMEIP_NAME}-sd PRIVATE cxx_std_17)
set_target_properties (${VSOMEIP_NAME}-sd PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION})
if (MSVC)
Expand All @@ -372,7 +376,7 @@ file(GLOB_RECURSE ${VSOMEIP_NAME}-e2e_SRC
)
list(SORT ${VSOMEIP_NAME}-e2e_SRC)

add_library(${VSOMEIP_NAME}-e2e SHARED ${${VSOMEIP_NAME}-e2e_SRC})
add_library(${VSOMEIP_NAME}-e2e ${${VSOMEIP_NAME}-e2e_SRC})
target_compile_features(${VSOMEIP_NAME}-e2e PRIVATE cxx_std_17)
set_target_properties (${VSOMEIP_NAME}-e2e PROPERTIES VERSION ${VSOMEIP_VERSION} SOVERSION ${VSOMEIP_MAJOR_VERSION})
if (MSVC)
Expand Down Expand Up @@ -404,7 +408,7 @@ file(GLOB_RECURSE ${VSOMEIP_COMPAT_NAME}_SRC
)
list(SORT ${VSOMEIP_COMPAT_NAME}_SRC)

add_library(${VSOMEIP_COMPAT_NAME} SHARED ${${VSOMEIP_COMPAT_NAME}_SRC})
add_library(${VSOMEIP_COMPAT_NAME} ${${VSOMEIP_COMPAT_NAME}_SRC})
target_compile_features(${VSOMEIP_COMPAT_NAME} PRIVATE cxx_std_17)
set_target_properties (${VSOMEIP_COMPAT_NAME} PROPERTIES VERSION ${VSOMEIP_COMPAT_VERSION} SOVERSION ${VSOMEIP_COMPAT_MAJOR_VERSION})
if (MSVC)
Expand Down
3 changes: 3 additions & 0 deletions examples/routingmanagerd/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ target_link_libraries(routingmanagerd ${VSOMEIP_NAME} ${Boost_LIBRARIES} ${DL_LI
if(${CMAKE_SYSTEM_NAME} MATCHES "QNX")
target_link_libraries(routingmanagerd socket)
endif()
if(NOT BUILD_SHARED_LIBS)
target_link_libraries(routingmanagerd ${VSOMEIP_NAME}-cfg ${VSOMEIP_NAME}-e2e ${VSOMEIP_NAME}-sd)
endif()
add_dependencies(routingmanagerd ${VSOMEIP_NAME})

option(VSOMEIP_INSTALL_ROUTINGMANAGERD "Whether or not to install the routing manager daemon.")
Expand Down
11 changes: 11 additions & 0 deletions implementation/configuration/src/configuration_plugin_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,18 @@
#include "../include/configuration_plugin_impl.hpp"
#include "../include/configuration_impl.hpp"

#ifdef VSOMEIP_STATIC_PLUGINS
namespace vsomeip_v3 {

create_plugin_func plugin_manager_impl_init_hook_cfg()
{
return configuration_plugin_impl::get_plugin;
}

} // namespace vsomeip_v3
#else
VSOMEIP_PLUGIN(vsomeip_v3::configuration_plugin_impl)
#endif

namespace vsomeip_v3 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,18 @@ value_t read_value_from_config(const std::shared_ptr<vsomeip_v3::cfg::e2e> &_con

} // namespace

#ifdef VSOMEIP_STATIC_PLUGINS
namespace vsomeip_v3 {

create_plugin_func plugin_manager_impl_init_hook_e2e()
{
return e2e::e2e_provider_impl::get_plugin;
}

} // namespace vsomeip_v3
#else
VSOMEIP_PLUGIN(vsomeip_v3::e2e::e2e_provider_impl)
#endif

namespace vsomeip_v3 {
namespace e2e {
Expand Down
10 changes: 10 additions & 0 deletions implementation/plugin/include/plugin_manager_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,18 @@ class plugin_manager_impl : public plugin_manager {
std::recursive_mutex plugins_mutex_;

static std::shared_ptr<plugin_manager_impl> the_plugin_manager__;

#ifdef VSOMEIP_STATIC_PLUGINS
plugin_init_func get_static_init_func(const std::string &library_);
#endif
};

#ifdef VSOMEIP_STATIC_PLUGINS
vsomeip_v3::create_plugin_func plugin_manager_impl_init_hook_cfg();
vsomeip_v3::create_plugin_func plugin_manager_impl_init_hook_sd();
vsomeip_v3::create_plugin_func plugin_manager_impl_init_hook_e2e();
#endif

} // namespace vsomeip_v3

#endif // VSOMEIP_V3_PLUGIN_MANAGER_IMPL_HPP
51 changes: 45 additions & 6 deletions implementation/plugin/src/plugin_manager_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,24 @@ plugin_manager_impl::~plugin_manager_impl() {
plugins_.clear();
}

#ifdef VSOMEIP_STATIC_PLUGINS
plugin_init_func plugin_manager_impl::get_static_init_func(const std::string &library_)
{
if (library_ == VSOMEIP_CFG_LIBRARY) {
return plugin_manager_impl_init_hook_cfg;
}
else if (library_ == VSOMEIP_SD_LIBRARY) {
return plugin_manager_impl_init_hook_sd;
}
else if (library_ == VSOMEIP_E2E_LIBRARY) {
return plugin_manager_impl_init_hook_e2e;
}
else {
return nullptr;
}
}
#endif

void plugin_manager_impl::load_plugins() {
{
std::lock_guard<std::mutex> its_lock_start_stop(loader_mutex_);
Expand All @@ -72,9 +90,18 @@ void plugin_manager_impl::load_plugins() {
std::lock_guard<std::recursive_mutex> its_lock_start_stop(plugins_mutex_);
// Load plug-in info from libraries parsed before
for (const auto& plugin_name : plugins) {
void* handle = load_library(plugin_name);
plugin_init_func its_init_func = reinterpret_cast<plugin_init_func>(
load_symbol(handle, VSOMEIP_PLUGIN_INIT_SYMBOL));
void* handle;
plugin_init_func its_init_func;
#ifdef VSOMEIP_STATIC_PLUGINS
handle = nullptr;
its_init_func = get_static_init_func(plugin_name);
if (!its_init_func)
#endif
{
handle = load_library(plugin_name);
its_init_func = reinterpret_cast<plugin_init_func>(
load_symbol(handle, VSOMEIP_PLUGIN_INIT_SYMBOL));
}
if (its_init_func) {
create_plugin_func its_create_func = (*its_init_func)();
if (its_create_func) {
Expand Down Expand Up @@ -126,9 +153,18 @@ std::shared_ptr<plugin> plugin_manager_impl::get_plugin(plugin_type_e _type,

std::shared_ptr<plugin> plugin_manager_impl::load_plugin(const std::string& _library,
plugin_type_e _type, uint32_t _version) {
void* handle = load_library(_library);
plugin_init_func its_init_func = reinterpret_cast<plugin_init_func>(
load_symbol(handle, VSOMEIP_PLUGIN_INIT_SYMBOL));
void* handle;
plugin_init_func its_init_func;
#ifdef VSOMEIP_STATIC_PLUGINS
handle = nullptr;
its_init_func = get_static_init_func(_library);
if (!its_init_func)
#endif
{
handle = load_library(_library);
its_init_func = reinterpret_cast<plugin_init_func>(
load_symbol(handle, VSOMEIP_PLUGIN_INIT_SYMBOL));
}
if (its_init_func) {
create_plugin_func its_create_func = (*its_init_func)();
if (its_create_func) {
Expand All @@ -154,6 +190,9 @@ bool plugin_manager_impl::unload_plugin(plugin_type_e _type) {
const auto found_handle = handles_.find(_type);
if (found_handle != handles_.end()) {
for (const auto& its_name : found_handle->second) {
if (!its_name.second) { // Skip statically linked plugins
continue;
}
#ifdef _WIN32
FreeLibrary((HMODULE)its_name.second);
#else
Expand Down
11 changes: 11 additions & 0 deletions implementation/service_discovery/src/runtime_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,18 @@
#include "../include/runtime_impl.hpp"
#include "../include/service_discovery_impl.hpp"

#ifdef VSOMEIP_STATIC_PLUGINS
namespace vsomeip_v3 {

create_plugin_func plugin_manager_impl_init_hook_sd()
{
return sd::runtime_impl::get_plugin;
}

} // namespace vsomeip_v3
#else
VSOMEIP_PLUGIN(vsomeip_v3::sd::runtime_impl)
#endif

namespace vsomeip_v3 {
namespace sd {
Expand Down
7 changes: 6 additions & 1 deletion vsomeip3Config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,9 @@ if (NOT TARGET vsomeip AND NOT vsomeip_BINARY_DIR)
endif ()

# These are IMPORTED targets created by vsomeipTargets.cmake
set (VSOMEIP_LIBRARIES vsomeip3)
if (NOT @BUILD_SHARED_LIBS@)
link_directories(@CMAKE_INSTALL_PREFIX@/@INSTALL_LIB_DIR@)
set (VSOMEIP_LIBRARIES vsomeip3 vsomeip3-cfg vsomeip3-e2e vsomeip3-sd)
else ()
set (VSOMEIP_LIBRARIES vsomeip3)
endif ()
7 changes: 6 additions & 1 deletion vsomeipConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,9 @@ if (NOT TARGET vsomeip AND NOT vsomeip_BINARY_DIR)
endif ()

# These are IMPORTED targets created by vsomeipTargets.cmake
set (VSOMEIP_LIBRARIES vsomeip)
if (NOT @BUILD_SHARED_LIBS@)
link_directories(@CMAKE_INSTALL_PREFIX@/@INSTALL_LIB_DIR@)
set (VSOMEIP_LIBRARIES vsomeip vsomeip3-cfg vsomeip3-e2e vsomeip3-sd)
else ()
set (VSOMEIP_LIBRARIES vsomeip)
endif ()
Loading