Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMake find package #619

Merged
merged 14 commits into from
Jul 15, 2024
144 changes: 65 additions & 79 deletions ManiVault/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,8 @@ include(CMakeMvSourcesResources) # defines RESOURCE_FILES, MAIN_APP_ICON_RE
# -----------------------------------------------------------------------------
add_library(${MV_PUBLIC_LIB} SHARED)

add_library(ManiVault::Core ALIAS Core)

set_target_properties(${MV_PUBLIC_LIB} PROPERTIES
POSITION_INDEPENDENT_CODE ON
AUTOMOC ON
Expand All @@ -201,10 +203,7 @@ target_sources(${MV_PUBLIC_LIB}
${SHADERS}
)

target_include_directories(${MV_PUBLIC_LIB} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:include>
)
target_include_directories(${MV_PUBLIC_LIB} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src")

target_compile_features(${MV_PUBLIC_LIB} PRIVATE cxx_std_17)

Expand Down Expand Up @@ -293,6 +292,26 @@ if(APPLE)
set_target_properties( ${MV_EXE} PROPERTIES BUILD_WITH_INSTALL_RPATH True)
endif()


# -----------------------------------------------------------------------------
# Plugin projects
# -----------------------------------------------------------------------------

# System plugins
add_subdirectory(src/plugins/DataHierarchyPlugin)
add_subdirectory(src/plugins/DataPropertiesPlugin)
add_subdirectory(src/plugins/SharedParametersPlugin)
add_subdirectory(src/plugins/LoggingPlugin)
add_subdirectory(src/plugins/TasksPlugin)

# Data plugins
add_subdirectory(src/plugins/PointData)
add_subdirectory(src/plugins/ColorData)
add_subdirectory(src/plugins/TextData)
add_subdirectory(src/plugins/ClusterData)
add_subdirectory(src/plugins/ImageData)


# -----------------------------------------------------------------------------
# Installation
# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -368,65 +387,52 @@ endforeach()

# Install public library
install(TARGETS ${MV_PUBLIC_LIB}
EXPORT ManiVaultPublicExport
RUNTIME DESTINATION . COMPONENT MVPUBLIC_LINKLIB # Windows .dll
ARCHIVE DESTINATION lib COMPONENT MVPUBLIC_LINKLIB # Linux/Mac .so
LIBRARY DESTINATION lib COMPONENT MVPUBLIC_LINKLIB # Windows .lib
INCLUDES DESTINATION include
EXPORT "ManiVaultPublicExport"
RUNTIME DESTINATION $<CONFIGURATION> COMPONENT MVPUBLIC_LINKLIB # Windows .dll
ARCHIVE DESTINATION "$<CONFIGURATION>/lib/" COMPONENT MVPUBLIC_LINKLIB # Linux/Mac .so
LIBRARY DESTINATION "$<CONFIGURATION>/lib/" COMPONENT MVPUBLIC_LINKLIB # Windows .lib
)

# Generate a .cmake file that can be imported from the install to enable plugin building
install(EXPORT "ManiVaultPublicExport"
FILE ManiVaultTargets.cmake
NAMESPACE ManiVault::
DESTINATION cmake/mv
COMPONENT MVPUBLIC_EXPORT
)

if(MSVC)
# Install program database (.pdb) files
install(FILES $<TARGET_PDB_FILE:${MV_PUBLIC_LIB}> DESTINATION . COMPONENT MVPUBLIC_LINKLIB CONFIGURATIONS "Debug" OPTIONAL)
install(FILES $<TARGET_PDB_FILE:${MV_EXE}> DESTINATION . COMPONENT MV_EXECUTABLE CONFIGURATIONS "Debug" OPTIONAL)
install(FILES $<TARGET_PDB_FILE:${MV_PUBLIC_LIB}> DESTINATION $<CONFIGURATION> COMPONENT MVPUBLIC_LINKLIB CONFIGURATIONS "Debug" OPTIONAL)
install(FILES $<TARGET_PDB_FILE:${MV_EXE}> DESTINATION . COMPONENT MV_EXECUTABLE CONFIGURATIONS "Debug" OPTIONAL)
endif()

# TODO: Create a ManiVaultCore package to support the find_package command

# Generate a .cmake file that can be imported from the install
# to enable plugin building
# Plugin building requires MV_Public.lib and the include headers
# By convention this is placed in the lib directory
install(EXPORT ManiVaultPublicExport
FILE ManiVaultTargets.cmake
NAMESPACE ManiVault::
DESTINATION lib/cmake/mv
COMPONENT MVPUBLIC_TARGET
)

# Generate the version file for use with find_package
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/ManiVaultConfigVersion.cmake"
VERSION "${version}"
# When the ManiVault core is stable - version 1.0 or greater -
# compatibility can change to
# AnyNewerVersion or SameMajorVersion
# until then employ ExactVersion
COMPATIBILITY ExactVersion
ManiVaultConfigVersion.cmake
VERSION ${MV_VERSION}
COMPATIBILITY SameMajorVersion
)

# create config file
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/MvCoreConfig.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/ManiVaultConfig.cmake"
INSTALL_DESTINATION lib/cmake/mv
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/MvCoreConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/ManiVaultConfig.cmake"
INSTALL_DESTINATION cmake/mv
PATH_VARS MV_INSTALL_DIR
)

# install the package files
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/ManiVaultConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/ManiVaultConfigVersion.cmake"
DESTINATION lib/cmake/mv
"${CMAKE_CURRENT_BINARY_DIR}/ManiVaultConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/ManiVaultConfigVersion.cmake"
DESTINATION cmake/mv
COMPONENT MVPUBLIC_PACKAGE
)

# could be used for the plugins subdirectories
# see doc https://cmake.org/cmake/help/v3.18/command/export.html
#
# export(EXPORT HdpsCoreTargets
# FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/HdpsCoreTargets.cmake"
# NAMESPACE HdpsCore::
# )
set(ManiVault_INCLUDE_DIR "${MV_INSTALL_DIR}/$<CONFIGURATION>/include/" CACHE INTERNAL "")
set(ManiVault_LIB_DIR "${MV_INSTALL_DIR}/$<CONFIGURATION>/lib/" CACHE INTERNAL "")
set(ManiVault_INSTALL_DIR "${MV_INSTALL_DIR}" CACHE INTERNAL "")

# Call the install functions of the all public targets
# needed for plugins directly after the build
Expand All @@ -436,29 +442,28 @@ add_custom_command(TARGET ${MV_PUBLIC_LIB} POST_BUILD
--install ${CMAKE_CURRENT_BINARY_DIR}
--config $<CONFIGURATION>
--component MVPUBLIC_HEADERS
--prefix ${MV_INSTALL_DIR}/$<CONFIGURATION>
--verbose
COMMAND ${CMAKE_COMMAND} -E echo "Installing: ManiVault public link library"
COMMAND ${CMAKE_COMMAND}
--install ${CMAKE_CURRENT_BINARY_DIR}
--config $<CONFIGURATION>
--component MVPUBLIC_LINKLIB
--prefix ${MV_INSTALL_DIR}/$<CONFIGURATION>
--prefix ${MV_INSTALL_DIR}
--verbose
COMMAND ${CMAKE_COMMAND} -E echo "Installing: ManiVault cmake config files"
COMMAND ${CMAKE_COMMAND}
--install ${CMAKE_CURRENT_BINARY_DIR}
--config $<CONFIGURATION>
--component MVPUBLIC_PACKAGE
--prefix ${MV_INSTALL_DIR}
--verbose
COMMAND ${CMAKE_COMMAND} -E echo "Installing: ManiVault cmake target files"
COMMAND ${CMAKE_COMMAND}
--install ${CMAKE_CURRENT_BINARY_DIR}
--config $<CONFIGURATION>
--component MVPUBLIC_EXPORT
--prefix ${MV_INSTALL_DIR}
--verbose
# COMMAND ${CMAKE_COMMAND} -E echo "Installing: ManiVault cmake config files"
# COMMAND ${CMAKE_COMMAND}
# --install ${CMAKE_CURRENT_BINARY_DIR}
# --config $<CONFIGURATION>
# --component MVPUBLIC_PACKAGE
# --prefix ${MV_INSTALL_DIR}/$<CONFIGURATION>
# --verbose
# COMMAND ${CMAKE_COMMAND} -E echo "Installing: ManiVault cmake target files"
# COMMAND ${CMAKE_COMMAND}
# --install ${CMAKE_CURRENT_BINARY_DIR}
# --config $<CONFIGURATION>
# --component MVPUBLIC_TARGET
# --prefix ${MV_INSTALL_DIR}/$<CONFIGURATION>
# --verbose
# If no plugin directory exists, ManiVault might try to import
# any library in the executable directory as a plugin
COMMAND ${CMAKE_COMMAND}
Expand Down Expand Up @@ -542,25 +547,6 @@ if(${MV_INSTALL_ZLIB})
)
endif()

# -----------------------------------------------------------------------------
# Plugin projects
# -----------------------------------------------------------------------------

# System plugins
add_subdirectory(src/plugins/DataHierarchyPlugin)
add_subdirectory(src/plugins/DataPropertiesPlugin)
add_subdirectory(src/plugins/SharedParametersPlugin)
add_subdirectory(src/plugins/LoggingPlugin)
add_subdirectory(src/plugins/TasksPlugin)

# Data plugins
add_subdirectory(src/plugins/PointData)
add_subdirectory(src/plugins/ColorData)
add_subdirectory(src/plugins/TextData)
add_subdirectory(src/plugins/ClusterData)
add_subdirectory(src/plugins/ImageData)


# -----------------------------------------------------------------------------
# Miscellaneous
# -----------------------------------------------------------------------------
Expand Down
7 changes: 0 additions & 7 deletions ManiVault/MvCoreConfig.cmake.in

This file was deleted.

15 changes: 15 additions & 0 deletions ManiVault/cmake/MvCoreConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
@PACKAGE_INIT@

set(ManiVault_INSTALL_DIR "@PACKAGE_MV_INSTALL_DIR@")
set(ManiVault_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../$<CONFIGURATION>/include/")
set(ManiVault_LIB_DIR "${CMAKE_CURRENT_LIST_DIR}/../../$<CONFIGURATION>/lib/")
list(APPEND ManiVault_LINK_LIBS ManiVault::Core ManiVault::PointData ManiVault::ClusterData ManiVault::ImageData ManiVault::ColorData ManiVault::TextData)

include("${CMAKE_CURRENT_LIST_DIR}/ManiVaultTargets.cmake")

check_required_components("@PROJECT_NAME@")

message(STATUS "Found ManiVault version ${ManiVault_VERSION}. Use for example as:")
message(STATUS " find_package(ManiVault COMPONENTS Core PointData ClusterData ImageData ColorData TextData CONFIG)")
message(STATUS " target_include_directories(\${YOURLIB} PRIVATE \"\${ManiVault_INCLUDE_DIR})\"")
message(STATUS " target_link_libraries(\${YOURLIB} PRIVATE ManiVault::Core ManiVault::PointData ManiVault::ClusterData ManiVault::ImageData ManiVault::ColorData ManiVault::TextData)")
21 changes: 11 additions & 10 deletions ManiVault/src/plugins/ClusterData/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ source_group(Dialog FILES ${DIALOG_SOURCES})

add_library(${CLUSTERDATA} SHARED ${CLUSTERD_SOURCES} ${ACTIONS_SOURCES} ${MODEL_SOURCES} ${DIALOG_SOURCES})

add_library(ManiVault::${CLUSTERDATA} ALIAS ${CLUSTERDATA})

qt_wrap_cpp(CLUSTERDATA_MOC ${PLUGIN_MOC_HEADERS} TARGET ${CLUSTERDATA})
target_sources(${CLUSTERDATA} PRIVATE ${CLUSTERDATA_MOC})

Expand All @@ -121,25 +123,24 @@ target_link_libraries(${CLUSTERDATA} PRIVATE PointData)
# Use AVX if enabled and available
check_and_set_AVX(${CLUSTERDATA} ${MV_USE_AVX})

set_target_properties(${CLUSTERDATA} PROPERTIES PUBLIC_HEADER "${CLUSTER_HEADERS}")

if(MV_UNITY_BUILD)
set_target_properties(${CLUSTERDATA} PROPERTIES UNITY_BUILD ON)
set_source_files_properties(${CLUSTERDATA_MOC} PROPERTIES
SKIP_UNITY_BUILD_INCLUSION TRUE)

set_source_files_properties(${CLUSTERDATA_MOC} PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE)
endif()

set_target_properties(${CLUSTERDATA} PROPERTIES PUBLIC_HEADER "${CLUSTER_HEADERS}")

install(TARGETS ${CLUSTERDATA}
RUNTIME DESTINATION Plugins COMPONENT PLUGINS # Windows .dll
LIBRARY DESTINATION Plugins COMPONENT PLUGINS # Linux/Mac .so
ARCHIVE DESTINATION lib COMPONENT LINKLIB # Windows .lib
PUBLIC_HEADER DESTINATION include/${CLUSTERDATA} COMPONENT HEADERS
EXPORT "ManiVaultPublicExport"
RUNTIME DESTINATION "$<CONFIGURATION>/Plugins/" COMPONENT PLUGINS # Windows .dll
LIBRARY DESTINATION "$<CONFIGURATION>/Plugins/" COMPONENT PLUGINS # Linux/Mac .so
ARCHIVE DESTINATION "$<CONFIGURATION>/lib/" COMPONENT LINKLIB # Windows .lib
PUBLIC_HEADER DESTINATION "$<CONFIGURATION>/include/${CLUSTERDATA}/" COMPONENT HEADERS
)

add_custom_command(TARGET ${CLUSTERDATA} POST_BUILD
COMMAND ${CMAKE_COMMAND}
--install ${CMAKE_CURRENT_BINARY_DIR}
--config $<CONFIGURATION>
--prefix ${MV_INSTALL_DIR}/$<CONFIGURATION>
--prefix ${MV_INSTALL_DIR}
)
13 changes: 8 additions & 5 deletions ManiVault/src/plugins/ColorData/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ source_group( Plugin FILES ${COLORDATA_SOURCES})

add_library(${COLORDATA} SHARED ${COLORDATA_SOURCES})

add_library(ManiVault::${COLORDATA} ALIAS ${COLORDATA})

qt_wrap_cpp(COLORDATA_MOC ${PLUGIN_MOC_HEADERS} TARGET ${COLORDATA})
target_sources(${COLORDATA} PRIVATE ${COLORDATA_MOC})

Expand All @@ -63,15 +65,16 @@ target_link_libraries(${COLORDATA} PRIVATE ${MV_PUBLIC_LIB})
set_target_properties(${COLORDATA} PROPERTIES PUBLIC_HEADER "${COLORDATA_HEADERS}")

install(TARGETS ${COLORDATA}
RUNTIME DESTINATION Plugins COMPONENT PLUGINS # Windows .dll
LIBRARY DESTINATION Plugins COMPONENT PLUGINS # Linux/Mac .so
ARCHIVE DESTINATION lib COMPONENT LINKLIB # Windows .lib
PUBLIC_HEADER DESTINATION include/${COLORDATA} COMPONENT HEADERS
EXPORT "ManiVaultPublicExport"
RUNTIME DESTINATION "$<CONFIGURATION>/Plugins/" COMPONENT PLUGINS # Windows .dll
LIBRARY DESTINATION "$<CONFIGURATION>/Plugins/" COMPONENT PLUGINS # Linux/Mac .so
ARCHIVE DESTINATION "$<CONFIGURATION>/lib/" COMPONENT LINKLIB # Windows .lib
PUBLIC_HEADER DESTINATION "$<CONFIGURATION>/include/${COLORDATA}/" COMPONENT HEADERS
)

add_custom_command(TARGET ${COLORDATA} POST_BUILD
COMMAND ${CMAKE_COMMAND}
--install ${CMAKE_CURRENT_BINARY_DIR}
--config $<CONFIGURATION>
--prefix ${MV_INSTALL_DIR}/$<CONFIGURATION>
--prefix ${MV_INSTALL_DIR}
)
20 changes: 13 additions & 7 deletions ManiVault/src/plugins/ImageData/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,16 @@ source_group(Aux FILES ${AUX})

add_library(${IMAGEDATA} SHARED ${IMAGE_DATA_HEADERS} ${IMAGE_DATA_SOURCES} ${ACTIONS_SOURCES} ${AUX})

add_library(ManiVault::${IMAGEDATA} ALIAS ${IMAGEDATA})

qt_wrap_cpp(IMAGEDATA_MOC ${PLUGIN_MOC_HEADERS} TARGET ${IMAGEDATA})
target_sources(${IMAGEDATA} PRIVATE ${IMAGEDATA_MOC})

target_include_directories(${IMAGEDATA} PRIVATE "${MV_INSTALL_DIR}/$<CONFIGURATION>/include/")

target_compile_features(${IMAGEDATA} PRIVATE cxx_std_17)

# Generate a header file that contains the EXPORT macro for this library.
include(GenerateExportHeader)
generate_export_header(${IMAGEDATA})

Expand All @@ -76,24 +79,27 @@ target_link_libraries(${IMAGEDATA} PRIVATE ${MV_PUBLIC_LIB})
target_link_libraries(${IMAGEDATA} PRIVATE PointData)
target_link_libraries(${IMAGEDATA} PRIVATE ClusterData)

# Use AVX if enabled and available
check_and_set_AVX(${IMAGEDATA} ${MV_USE_AVX})

set_target_properties(${IMAGEDATA} PROPERTIES PUBLIC_HEADER "${IMAGE_DATA_HEADERS}")

if(MV_UNITY_BUILD)
set_target_properties(${IMAGEDATA} PROPERTIES UNITY_BUILD ON)
set_source_files_properties(${IMAGEDATA_MOC} PROPERTIES
SKIP_UNITY_BUILD_INCLUSION TRUE)
set_source_files_properties(${IMAGEDATA_MOC} PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE)
endif()

install(TARGETS ${IMAGEDATA}
RUNTIME DESTINATION Plugins COMPONENT PLUGINS # Windows .dll
LIBRARY DESTINATION Plugins COMPONENT PLUGINS # Linux/Mac .so
ARCHIVE DESTINATION lib COMPONENT LINKLIB # Windows .lib
PUBLIC_HEADER DESTINATION include/${IMAGEDATA} COMPONENT HEADERS
EXPORT "ManiVaultPublicExport"
RUNTIME DESTINATION "$<CONFIGURATION>/Plugins/" COMPONENT PLUGINS # Windows .dll
LIBRARY DESTINATION "$<CONFIGURATION>/Plugins/" COMPONENT PLUGINS # Linux/Mac .so
ARCHIVE DESTINATION "$<CONFIGURATION>/lib/" COMPONENT LINKLIB # Windows .lib
PUBLIC_HEADER DESTINATION "$<CONFIGURATION>/include/${IMAGEDATA}/" COMPONENT HEADERS
)

add_custom_command(TARGET ${IMAGEDATA} POST_BUILD
COMMAND ${CMAKE_COMMAND}
--install ${CMAKE_CURRENT_BINARY_DIR}
--config $<CONFIGURATION>
--prefix ${MV_INSTALL_DIR}/$<CONFIGURATION>
--prefix ${MV_INSTALL_DIR}
)
Loading
Loading