function(add_component COMPONENT_NAME) set(COMPONENT_TARGET_NAME wmtk_${COMPONENT_NAME}) option(WMTK_ENABLE_COMPONENT_${COMPONENT_NAME} "Enable wmtk component ${COMPONENT_NAME}" ON) IF(NOT ${WMTK_ENABLE_COMPONENT_${COMPONENT_NAME}}) return() ENDIF() message(STATUS "Add component wmtk::${COMPONENT_NAME}.") add_library(${COMPONENT_TARGET_NAME}) add_library(wmtk::${COMPONENT_NAME} ALIAS ${COMPONENT_TARGET_NAME}) target_link_libraries(${COMPONENT_TARGET_NAME} PRIVATE wmtk::warnings wmtk::toolkit jse::jse) target_include_directories(${COMPONENT_TARGET_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../../..") # append include path to autogenerated files file(APPEND "${CMAKE_SOURCE_DIR}/app/components_include.hpp" "#include \n") # append function pointer to autogenerated files file(APPEND "${CMAKE_SOURCE_DIR}/app/components_map.hpp" "components_map[\"${COMPONENT_NAME}\"] = wmtk::components::${COMPONENT_NAME}::${COMPONENT_NAME};\n") # add component to wmtk app target_link_libraries(wmtk_app PRIVATE wmtk::${COMPONENT_NAME}) # Group source files for IDEs file(GLOB_RECURSE COMPONENTS_FILES_FOR_SOURCE_GROUP "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "src" FILES ${COMPONENTS_FILES_FOR_SOURCE_GROUP}) set_target_properties(${COMPONENT_TARGET_NAME} PROPERTIES FOLDER wmtk_components) endfunction()