diff --git a/src/IhtaAddLibrary.cmake b/src/IhtaAddLibrary.cmake new file mode 100644 index 0000000000000000000000000000000000000000..a9c4881b8260cbd1b8d3b49720593ae7231bc4df --- /dev/null +++ b/src/IhtaAddLibrary.cmake @@ -0,0 +1,74 @@ +include_guard () + +#[=======================================================================[.rst: +..command:: ihta_add_library + + Macro to generate doxygen documentation with custom logo and style sheet. + + :: + + build_doc( + SOURCES <documentation-folder...> + [README_MAINPAGE <readme-file-for-main-page>] + [COLOR_STYLE <css-style-sheet>] + [LOGO <logo-file>] + [ADD_DEV_SECTION] + [SIDEBAR_ONLY] + ) + + .. variable:: SIDEBAR_ONLY + + Specifies, that the `doxygen-awesome-css` sidebar ony style should be used. + + +#]=======================================================================] +macro (ihta_add_library) + set (options) + set (oneValueArgs NAMESPACE NAME LIBRARY_TYPE INCLUDE_DIR IDE_FOLDER) + set (multiValueArgs SOURCES) + cmake_parse_arguments (IHTA_ADD_LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (DEFINED IHTA_ADD_LIB_LIBRARY_TYPE) + set (IHTA_ADD_LIB_TYPES "STATIC" "SHARED" "INTERFACE" "OBJECT") + if (NOT (${IHTA_ADD_LIB_LIBRARY_TYPE} IN_LIST IHTA_ADD_LIB_TYPES)) + message ( + FATAL_ERROR + "ihta_add_library only supports the following LIBRARY_TYPE's: STATIC, SHARED, INTERFACE or OBJECT" + ) + endif () + endif () + + if (NOT DEFINED IHTA_ADD_LIB_INCLUDE_DIR) + set (IHTA_ADD_LIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) + endif () + + if (DEFINED IHTA_ADD_LIB_NAMESPACE AND NOT DEFINED IHTA_ADD_LIB_IDE_FOLDER) + set (IHTA_ADD_LIB_IDE_FOLDER ${IHTA_ADD_LIB_NAMESPACE}) + elseif (NOT DEFINED IHTA_ADD_LIB_NAMESPACE AND DEFINED IHTA_ADD_LIB_IDE_FOLDER) + set (IHTA_ADD_LIB_NAMESPACE ${IHTA_ADD_LIB_IDE_FOLDER}) + elseif (NOT DEFINED IHTA_ADD_LIB_NAMESPACE AND NOT DEFINED IHTA_ADD_LIB_IDE_FOLDER) + message (FATAL_ERROR "ihta_add_library requires to set either a NAMESPACE or an IDE_FOLDER") + endif () + + add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} "") + add_library (${IHTA_ADD_LIB_NAMESPACE}::${IHTA_ADD_LIB_NAME} ALIAS ${IHTA_ADD_LIB_NAME}) + + target_sources (${IHTA_ADD_LIB_NAME} PRIVATE ${IHTA_ADD_LIB_SOURCES}) + + # Include Directory + target_include_directories ( + ${IHTA_ADD_LIB_NAME} PUBLIC $<BUILD_INTERFACE:${IHTA_ADD_LIB_INCLUDE_DIR}> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${IHTA_ADD_LIB_NAME}> + ) + + # Required compiler features + target_compile_features (${IHTA_ADD_LIB_NAME} PUBLIC cxx_std_17) + + # If build out of parent project, add parent folder library to parent project folder + if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + set_property (TARGET ${IHTA_ADD_LIB_NAME} PROPERTY FOLDER ${IHTA_ADD_LIB_FOLDER}) + endif () + + # Organize sources in folders + GroupSourcesByFolder (${IHTA_ADD_LIB_NAME}) +endmacro () diff --git a/src/Index.cmake b/src/Index.cmake index 0909b6aae142734a5a7c1be32f9c8eb81b1b81f4..5208ea284fa46df76ee65acfeb371c90bb2ebb34 100644 --- a/src/Index.cmake +++ b/src/Index.cmake @@ -23,3 +23,4 @@ include (${CPM_MODULE_LOCATION}) include (${CMAKE_CURRENT_LIST_DIR}/GetCommonLibraries.cmake) include (${CMAKE_CURRENT_LIST_DIR}/BuildDoc.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/IhtaAddLibrary.cmake)