diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cf132528..adce01b2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # Main CMakeLists. # # @author Steffen Vogel -# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode @@ -22,17 +22,36 @@ cmake_minimum_required(VERSION 3.0) -project(VILLASnode) +project(VILLASnode C CXX) set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 11) -set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig") -find_package(PkgConfig) +if(APPLE) + set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/opt/local/lib/pkgconfig") +endif() + +include(FindPkgConfig) include(CheckIncludeFile) include(FeatureSummary) include(CheckCCompilerFlag) #include(CheckCxxCompilerFlag) +include(GNUInstallDirs) +include(VILLASnodePackaging) + +# Compiler flags +if(BUILD32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") + set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -m32") +endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=auto -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE=1") if(MSVC) check_c_compiler_flag("/W4 /WX" C_SUPPORTS_WERROR) @@ -58,53 +77,58 @@ else() endif() endif() -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - string(APPEND VARIANTS "-debug") -else() - string(APPEND VARIANTS "-release") -endif() - -if(PROFILE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg") - set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -pg") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") - - string(APPEND VARIANTS "-profile") -endif() - -if(COVERAGE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage") - target_link_libraries("gcov") - - string(APPEND VARIANTS "-coverage") -endif() - # Check OS check_include_file("sys/eventfd.h" HAS_EVENTFD) +check_include_file("semaphore.h" HAS_SEMAPHORE) +check_include_file("sys/mman.h" HAS_MMAN) + +pkg_check_modules(JANSSON IMPORTED_TARGET REQUIRED jansson) +pkg_check_modules(LIBNL3_ROUTE IMPORTED_TARGET libnl-route-3.0) +pkg_check_modules(LIBIEC61850 IMPORTED_TARGET libiec61850>=1.2.0) +pkg_check_modules(LIBCONFIG IMPORTED_TARGET libconfig) +pkg_check_modules(RABBITMQ_C IMPORTED_TARGET librabbitmq) +pkg_check_modules(COMEDILIB IMPORTED_TARGET comedilib) +pkg_check_modules(LIBZMQ IMPORTED_TARGET libzmq) +pkg_check_modules(NANOMSG IMPORTED_TARGET nanomsg) +if(NOT NANOMSG_FOUND) + pkg_check_modules(NANOMSG IMPORTED_TARGET libnanomsg) +endif() + +find_package(Libwebsockets REQUIRED) +find_package(OpenSSL REQUIRED) +find_package(CURL REQUIRED) +find_package(Protobuf) +find_package(Opal) # Build options -option(WITH_HOOKS "Build with support for processing hook plugins" ON) -option(WITH_IO "Build with support format plugins" ON) -option(WITH_WEB "Build with internal webserver" ON) -option(WITH_API "Build with remote control API" ON) -option(WITH_CONFIG "Build with support for libconfig configuration syntax" ON) +option(WITH_HOOKS "Build with support for processing hook plugins" ON) +option(WITH_IO "Build with support format plugins" ON) +option(WITH_WEB "Build with internal webserver" ON) +option(WITH_API "Build with remote control API" ON) +option(WITH_CONFIG "Build with support for libconfig configuration syntax" ON) set(V 2) set(PREFIX ${CMAKE_INSTALL_PREFIX}) set(VARIANT "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") +# Add more build configurations +include(cmake/config/Debug.cmake) +include(cmake/config/Release.cmake) +include(cmake/config/Coverage.cmake) +include(cmake/config/Profiling.cmake) + # Add git revision and build variant defines +set(PROJECT_SOVERSION 1) + execute_process( COMMAND git describe --tags --abbrev=0 --match "v*" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE VERSION + OUTPUT_VARIABLE PROJECT_VERSION_STR OUTPUT_STRIP_TRAILING_WHITESPACE ) -string(SUBSTRING ${VERSION} 2 -1 VERSION_NUM) - +string(SUBSTRING ${PROJECT_VERSION_STR} 2 -1 PROJECT_VERSION) string(TIMESTAMP BUILD_DATE "%Y%m%d") if(DEFINED ENV{CI}) @@ -128,20 +152,15 @@ else() endif() if(DEFINED ENV{CI_COMMIT_TAG}) - set(RELEASE 1) + set(PROJECT_RELEASE 1) else() string(REPLACE "-" "_" GIT_BRANCH_NORM ${GIT_BRANCH}) string(REPLACE "-" "_" VARIANT_NORM ${VARIANT}) - set(RELEASE "1.${GIT_BRANCH_NORM}_${VARIANT_NORM}.${BUILD_DATE}git${GIT_REV}") + set(PROJECT_RELEASE "1.${GIT_BRANCH_NORM}_${VARIANT_NORM}.${BUILD_DATE}git${GIT_REV}") endif() -set(BUILDID "${VERSION}-${GIT_REV}-${VARIANT}") - -configure_file( - ${CMAKE_SOURCE_DIR}/include/villas/config.h.in - ${CMAKE_BINARY_DIR}/include/villas/config.h -) +set(BUILDID "${PROJECT_VERSION_STR}-${GIT_REV}-${VARIANT}") include_directories( ${CMAKE_SOURCE_DIR}/include @@ -151,7 +170,18 @@ include_directories( add_subdirectory(lib) add_subdirectory(src) add_subdirectory(tools) +add_subdirectory(plugins) +add_subdirectory(etc) add_subdirectory(doc) +add_subdirectory(web) +add_subdirectory(clients) +add_subdirectory(tests) +add_subdirectory(packaging) + +configure_file( + ${CMAKE_SOURCE_DIR}/include/villas/config.h.in + ${CMAKE_BINARY_DIR}/include/villas/config.h +) # Show feature summary add_feature_info(HOOKS WITH_HOOKS "Build with support for processing hook plugins") diff --git a/clients/CMakeLists.txt b/clients/CMakeLists.txt new file mode 100644 index 000000000..9f97b7376 --- /dev/null +++ b/clients/CMakeLists.txt @@ -0,0 +1,24 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +add_subdirectory(python) +add_subdirectory(opal) diff --git a/clients/opal/CMakeLists.txt b/clients/opal/CMakeLists.txt new file mode 100644 index 000000000..8bdbeeedb --- /dev/null +++ b/clients/opal/CMakeLists.txt @@ -0,0 +1,32 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +if(OPAL_FOUND) + set(ASYNCIP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/models/send_receive) + + set(ASYNCIP_OPTS RTLAB_INTEL_COMPILER=0 PROTOCOL=GTNET_SKT OPAL_LIBS="-lSystem -luuid" OPAL_LIBPATH=-L$(SRCDIR)/thirdparty/libopal/ OPAL_INCPATH=-I$(SRCDIR)/thirdparty/libopal/include/opal) + + # Just call the original Makefile + add_custom_target(clients-opal + COMMAND make -C ${ASYNCIP_PATH} -f Makefile.mk AsyncIP ${ASYNCIP_OPTS} + ) +endif() diff --git a/clients/python/CMakeLists.txt b/clients/python/CMakeLists.txt new file mode 100644 index 000000000..310a2927b --- /dev/null +++ b/clients/python/CMakeLists.txt @@ -0,0 +1,27 @@ +# Makefile. +# +# @author Steffen Vogel +# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +add_custom_command(OUTPUT villas_pb2.py + COMMAND protoc ${CMAKE_SOURCE_DIR}/lib/nodes/villas.proto + MAIN_DEPENDENCY villas.proto +) + diff --git a/cmake/FindMosquitto.cmake b/cmake/FindMosquitto.cmake new file mode 100644 index 000000000..8782092c2 --- /dev/null +++ b/cmake/FindMosquitto.cmake @@ -0,0 +1,40 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +find_path(MOSQUITTO_INCLUDE_DIR + NAMES mosquitto.h +) + +find_library(MOSQUITTO_LIBRARY + NAMES mosquitto +) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set VILLASNODE_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(MOSQUITTO DEFAULT_MSG + MOSQUITTO_LIBRARY MOSQUITTO_INCLUDE_DIR) + +mark_as_advanced(MOSQUITTO_INCLUDE_DIR MOSQUITTO_LIBRARY) + +set(MOSQUITTO_LIBRARIES ${MOSQUITTO_LIBRARY}) +set(MOSQUITTO_INCLUDE_DIRS ${MOSQUITTO_INCLUDE_DIR}) diff --git a/cmake/FindOpal.cmake b/cmake/FindOpal.cmake new file mode 100644 index 000000000..24255d228 --- /dev/null +++ b/cmake/FindOpal.cmake @@ -0,0 +1,39 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +find_path(OPAL_INCLUDE_DIR + NAMES opal/AsyncApi.h +) + +find_library(OPAL_LIBRARY + NAMES OpalAsyncApiCore +) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set VILLASNODE_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(OPAL DEFAULT_MSG OPAL_LIBRARY OPAL_INCLUDE_DIR) + +mark_as_advanced(OPAL_INCLUDE_DIR OPAL_LIBRARY) + +set(OPAL_LIBRARIES ${OPAL_LIBRARY} OpalCore OpalUtils irc) +set(OPAL_INCLUDE_DIRS ${OPAL_INCLUDE_DIR}) diff --git a/cmake/VILLASnodePackaging.cmake b/cmake/VILLASnodePackaging.cmake new file mode 100644 index 000000000..acdee4894 --- /dev/null +++ b/cmake/VILLASnodePackaging.cmake @@ -0,0 +1,54 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +set(PROJECT_AUTHOR "Steffen Vogel") +set(PROJECT_COPYRIGHT "2018, Institute for Automation of Complex Power Systems, RWTH Aachen University") + +set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) +set(CPACK_PACKAGE_VENDOR ${PROJECT_AUTHOR}) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "This is VILLASnode, a gateway for processing and forwardning simulation data between real-time simulators.") +set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_MAJOR_VERSION}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_MINOR_VERSION}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_PATCH_VERSION}) + +set(CPACK_RPM_PACKAGE_VERSION ${PROJECT_VERSION}) +set(CPACK_RPM_PACKAGE_RELEASE ${PROJECT_RELEASE}) +set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64") +set(CPACK_RPM_PACKAGE_LICENSE "GPLv3") +set(CPACK_RPM_PACKAGE_URL "http://www.fein-aachen.org/projects/dpsim/") +set(CPACK_RPM_PACKAGE_REQUIRES "openssl libconfig libnl3 libcurl jansson libwebsockets zeromq nanomsg libiec61850 librabbitmq mosquitto comedilib") +set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries") + +# As close as possible to Fedoras naming +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}.${CPACK_RPM_PACKAGE_ARCHITECTURE}") + +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING.md") +set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") + +set(CPACK_SOURCE_IGNORE_FILES "build/;\\.gitmodules;\\.git/;\\.vscode;\\.editorconfig;\\.gitlab-ci.yml;\\.(docker|git)ignore;\\.DS_Store") + +if(NOT DEFINED CPACK_GENERATOR) + set(CPACK_GENERATOR "RPM;TGZ") +endif() + +include(CPack) diff --git a/cmake/config/Coverage.cmake b/cmake/config/Coverage.cmake new file mode 100644 index 000000000..ef5bfdbbf --- /dev/null +++ b/cmake/config/Coverage.cmake @@ -0,0 +1,58 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +set(CMAKE_CXX_FLAGS_COVERAGE + "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C++ compiler during coverage builds." + FORCE +) + +set(CMAKE_C_FLAGS_COVERAGE + "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C compiler during coverage builds." + FORCE +) + +set(CMAKE_EXE_LINKER_FLAGS_COVERAGE + "${CMAKE_EXE_LINKER_FLAGS}" + CACHE STRING "Flags used for linking binaries during coverage builds." + FORCE +) + +set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "${CMAKE_SHARED_LINKER_FLAGS_COVERAGE}" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." + FORCE +) + +mark_as_advanced( + CMAKE_CXX_FLAGS_COVERAGE + CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE +) + +if(CMAKE_BUILD_TYPE STREQUAL "Coverage") + target_link_libraries("gcov") + + string(APPEND VARIANTS "-coverage") +endif() diff --git a/cmake/config/Debug.cmake b/cmake/config/Debug.cmake new file mode 100644 index 000000000..18d5cea7c --- /dev/null +++ b/cmake/config/Debug.cmake @@ -0,0 +1,25 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + string(APPEND VARIANTS "-debug") +endif() diff --git a/cmake/config/Profiling.cmake b/cmake/config/Profiling.cmake new file mode 100644 index 000000000..c048e310d --- /dev/null +++ b/cmake/config/Profiling.cmake @@ -0,0 +1,58 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +set(CMAKE_CXX_FLAGS_PROFILING + "${CMAKE_CXX_FLAGS} -pg" + CACHE STRING "Flags used by the C++ compiler during coverage builds." + FORCE +) + +set(CMAKE_C_FLAGS_PROFILING + "${CMAKE_C_FLAGS} -pg" + CACHE STRING "Flags used by the C compiler during coverage builds." + FORCE +) + +set(CMAKE_EXE_LINKER_FLAGS_PROFILING + "${CMAKE_EXE_LINKER_FLAGS} -pg" + CACHE STRING "Flags used for linking binaries during coverage builds." + FORCE +) + +set(CMAKE_SHARED_LINKER_FLAGS_PROFILING + "${CMAKE_SHARED_LINKER_FLAGS_COVERAGE} -pg" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." + FORCE +) + +mark_as_advanced( + CMAKE_CXX_FLAGS_PROFILING + CMAKE_C_FLAGS_PROFILING + CMAKE_EXE_LINKER_FLAGS_PROFILING + CMAKE_SHARED_LINKER_FLAGS_PROFILING +) + +if(CMAKE_BUILD_TYPE STREQUAL "Profiling") + string(APPEND VARIANTS "-profile") +endif() + + diff --git a/cmake/config/Release.cmake b/cmake/config/Release.cmake new file mode 100644 index 000000000..cfa3432bc --- /dev/null +++ b/cmake/config/Release.cmake @@ -0,0 +1,25 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +if(CMAKE_BUILD_TYPE STREQUAL "Release") + string(APPEND VARIANTS "-release") +endif() diff --git a/etc/CMakeLists.txt b/etc/CMakeLists.txt new file mode 100644 index 000000000..43c7c9435 --- /dev/null +++ b/etc/CMakeLists.txt @@ -0,0 +1,25 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +install(DIRECTORY . + DESTINATION etc/villas/node/ +) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 86f50325a..cdeb80165 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,7 +1,7 @@ # CMakeLists. # # @author Steffen Vogel -# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode @@ -20,11 +20,6 @@ # along with this program. If not, see . ################################################################################### -find_package(OpenSSL REQUIRED) -find_package(curl REQUIRED) - -pkg_check_modules(JANSSON IMPORTED_TARGET REQUIRED jansson) - set(INCLUDE_DIRS ${JANSSON_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} @@ -73,11 +68,9 @@ set(LIB_SRC add_subdirectory(nodes) -if(WITH_CONFIG) - pkg_check_modules(CONFIG IMPORTED_TARGET REQUIRED libconfig) - - list(APPEND INCLUDE_DIRS ${CONFIG_INCLUDE_DIRS}) - list(APPEND LIBRARIES PkgConfig::CONFIG) +if(LIBCONFIG_FOUND) + list(APPEND INCLUDE_DIRS ${LIBCONFIG_INCLUDE_DIRS}) + list(APPEND LIBRARIES PkgConfig::LIBCONFIG) endif() if(WITH_IO) @@ -95,7 +88,7 @@ if(WITH_HOOKS) hook.c hook_type.c ) - + add_subdirectory(hooks) list(APPEND LIBRARIES villas-hooks) endif() @@ -104,10 +97,6 @@ if(WITH_WEB) list(APPEND LIB_SRC web.c ) - - find_package(libwebsockets REQUIRED) - - message("LWS: ${LIBWEBSOCKETS_LIBRARIES}") list(APPEND INCLUDE_DIRS ${LIBWEBSOCKETS_INCLUDE_DIRS}) list(APPEND LIBRARIES websockets_shared) @@ -122,7 +111,35 @@ if(WITH_API AND WITH_WEB) list(APPEND LIBRARIES villas-api) endif() +# libnl3 is optional but required for network emulation and IRQ pinning +if(LIBNL3_ROUTE_FOUND) + list(APPEND LIB_SRC + kernel/nl.c + kernel/tc.c + kernel/tc_netem.c + kernel/if.c + ) + + list(APPEND INCLUDE_DIRS ${LIBNL3_ROUTE_INCLUDE_DIRS}) + list(APPEND LIBRARIES PkgConfig::LIBNL3_ROUTE) +endif() + add_library(villas SHARED ${LIB_SRC}) target_include_directories(villas PUBLIC ${INCLUDE_DIRS}) target_link_libraries(villas PUBLIC ${LIBRARIES}) + +set_target_properties(villas PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_SOVERSION} +) + +install(TARGETS villas EXPORT VILLASNodeConfig + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + +install(DIRECTORY ../include/villas/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/villas/) + +#install(EXPORT VILLASNodeConfig DESTINATION share/VILLASNode/cmake) +#export(TARGETS villas FILE VILLASNodeConfig.cmake) diff --git a/lib/api/CMakeLists.txt b/lib/api/CMakeLists.txt index 97cc687d8..906b348c0 100644 --- a/lib/api/CMakeLists.txt +++ b/lib/api/CMakeLists.txt @@ -2,7 +2,7 @@ # CMakeLists. # # @author Steffen Vogel -# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode @@ -21,8 +21,6 @@ # along with this program. If not, see . ################################################################################### -find_package(openssl REQUIRED) - set(INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR} ) @@ -31,12 +29,17 @@ set(LIBRARIES ${OPENSSL_LIBRARIES} ) -file(GLOB ACTION_SRC actions/*.c) - -add_library(villas-api STATIC - ${ACTION_SRC} +set(API_SRC session.c + actions/capabiltities.c + actions/config.c + actions/nodes.c + actions/paths.c + actions/restart.c + actions/shutdown.c + actions/status.c ) +add_library(villas-api SHARED ${API_SRC}) target_include_directories(villas-api PUBLIC ${INCLUDE_DIRS}) target_link_libraries(villas-api PUBLIC ${LIBRARIES}) diff --git a/lib/formats/CMakeLists.txt b/lib/formats/CMakeLists.txt index 33670bbd1..f7d7a74fc 100644 --- a/lib/formats/CMakeLists.txt +++ b/lib/formats/CMakeLists.txt @@ -1,7 +1,7 @@ # CMakeLists. # # @author Steffen Vogel -# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode @@ -29,8 +29,6 @@ set(FORMAT_SRC raw.c ) -find_package(openssl REQUIRED) - set(INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR} ) @@ -40,7 +38,6 @@ set(LIBRARIES ) # Enable Google Protobuf format -find_package(Protobuf) if(Protobuf_FOUND) list(APPEND FORMAT_SRC protobuf.c @@ -73,10 +70,6 @@ if(Protobuf_FOUND) ) endif() -add_library(villas-formats STATIC ${FORMAT_SRC}) +add_library(villas-formats SHARED ${FORMAT_SRC}) target_include_directories(villas-formats PUBLIC ${INCLUDE_DIRS}) target_link_libraries(villas-formats PUBLIC ${LIBRARIES}) - -if(Protobuf_FOUND) -# add_dependencies(villas-formats villas.pb-c.c villas.pb-c.h) -endif() diff --git a/lib/hooks/CMakeLists.txt b/lib/hooks/CMakeLists.txt index e49483d99..ef7802d28 100644 --- a/lib/hooks/CMakeLists.txt +++ b/lib/hooks/CMakeLists.txt @@ -1,7 +1,7 @@ # CMakeLists. # # @author Steffen Vogel -# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode @@ -20,8 +20,6 @@ # along with this program. If not, see . ################################################################################### -pkg_check_modules(JANSSON IMPORTED_TARGET REQUIRED jansson) - set(INCLUDE_DIRS ${JANSSON_INCLUDE_DIRS} ) @@ -52,6 +50,6 @@ if(WITH_IO) ) endif() -add_library(villas-hooks STATIC ${HOOK_SRC}) +add_library(villas-hooks SHARED ${HOOK_SRC}) target_include_directories(villas-hooks PUBLIC ${INCLUDE_DIRS}) target_link_libraries(villas-hooks PUBLIC ${LIBRARIES}) diff --git a/lib/nodes/CMakeLists.txt b/lib/nodes/CMakeLists.txt index ce7ab8a36..36c9e76e3 100644 --- a/lib/nodes/CMakeLists.txt +++ b/lib/nodes/CMakeLists.txt @@ -1,7 +1,7 @@ # CMakeLists. # # @author Steffen Vogel -# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode @@ -20,8 +20,6 @@ # along with this program. If not, see . ################################################################################### -pkg_check_modules(JANSSON IMPORTED_TARGET REQUIRED jansson) - set(INCLUDE_DIRS ${JANSSON_INCLUDE_DIRS} ) @@ -33,9 +31,22 @@ set(LIBRARIES set(NODE_SRC influxdb.c stats.c - file.c + signal_generator.c ) +if(LIBNL3_ROUTE_FOUND) + list(APPEND LIBRARIES PkgConfig::LIBNL3_ROUTE) + list(APPEND INCLUDE_DIRS LIBNL3_ROUTE_INCLUDE_DIRS) +endif() + +if(WITH_IO) + list(APPEND NODE_SRC + test_rtt.c + file.c + socket.c + ) +endif() + if(HAS_EVENTFD) list(APPEND NODE_SRC loopback.c @@ -43,6 +54,75 @@ if(HAS_EVENTFD) ) endif() -add_library(villas-nodes STATIC ${NODE_SRC}) +# Enable shared memory node-type +if(HAS_SEMAPHORE AND HAS_MMAN) + list(APPEND NODE_SRC shmem.c) + list(APPEND LIBRARIES "rt") +endif() + +# Enable IEC61850 node-types when libiec61850 is available +if(LIBIEC61850_FOUND) + list(APPEND NODE_SRC iec61850_sv.c iec61850.c) + list(APPEND INCLUDE_DIRS ${LIBIEC61850_INCLUDE_DIRS}) + list(APPEND LIBRARIES PkgConfig::LIBIEC61850) +endif() + +# Enable OPAL-RT Asynchronous Process support (will result in 32bit binary!!!) +if(OPAL_FOUND AND BUILD32) + list(APPEND NODE_SRC opal.c) + list(APPEND INCLUDE_DIRS ${OPAL_INCLUDE_DIRS}) + list(APPEND LIBRARIES ${OPAL_LIBRARIES}) +endif() + +# Enable nanomsg node type when libnanomsg is available +if(NANOMSG_FOUND AND WITH_IO) + list(APPEND NODE_SRC nanomsg.c) + list(APPEND INCLUDE_DIRS ${NANOMSG_INCLUDE_DIRS}) + list(APPEND LIBRARIES PkgConfig::NANOMSG) +endif() + +# Enable ZeroMQ node type when libzmq is available +if(LIBZMQ_FOUND AND WITH_IO) + list(APPEND NODE_SRC zeromq.c) + list(APPEND INCLUDE_DIRS ${LIBZMQ_INCLUDE_DIRS}) + list(APPEND LIBRARIES PkgConfig::LIBZMQ) +endif() + +# Enable NGSI support +if(CURL_FOUND) + list(APPEND NODE_SRC ngsi.c) + list(APPEND INCLUDE_DIRS ${CURL_INCLUDE_DIRS}) + list(APPEND LIBRARIES ${CURL_LIBRARIES}) +endif() + +# Enable WebSocket support +if(LIBWEBSOCKETS_FOUND AND WITH_WEB AND WITH_IO) + list(APPEND NODE_SRC websockets.c) + list(APPEND INCLUDE_DIRS ${LIBWEBSOCKETS_INCLUDE_DIRS}) + list(APPEND LIBRARIES websockets_shared) +endif() + +# Enable AMQP support +if(RABBITMQ_C_FOUND AND WITH_IO) + list(APPEND NODE_SRC amqp.c) + list(APPEND INCLUDE_DIRS ${RABBITMQ_C_INCLUDE_DIRS}) + list(APPEND LIBRARIES PkgConfig::RABBITMQ_C) +endif() + +# Enable MQTT support +if(MOSQUITTO_FOUND AND WITH_IO) + list(APPEND NODE_SRC mqtt.c) + list(APPEND INCLUDE_DIRS ${MOSQUITTO_INCLUDE_DIRS}) + list(APPEND LIBRARIES ${MOSQUITTO_LIBRARIES}) +endif() + +# Enable Comedi support +if(COMEDILIB_FOUND) + list(APPEND NODE_SRC comedi.c) + list(APPEND INCLUDE_DIRS ${COMEDILIB_INCLUDE_DIRS}) + list(APPEND LIBRARIES PkgConfig::COMEDILIB) +endif() + +add_library(villas-nodes SHARED ${NODE_SRC}) target_include_directories(villas-nodes PUBLIC ${INCLUDE_DIRS}) target_link_libraries(villas-nodes PUBLIC ${LIBRARIES}) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt new file mode 100644 index 000000000..8a12f074d --- /dev/null +++ b/packaging/CMakeLists.txt @@ -0,0 +1,54 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +if (NOT DEFINED DEPLOY_USER) + set(DEPLOY_USER deploy) +endif() + +if (NOT DEFINED DEPLOY_HOST) + set(DEPLOY_USER acs-os-fein-website) +endif() + +if (NOT DEFINED DEPLOY_PATH) + set(DEPLOY_USER /var/www/villas/node) +endif() + +add_custom_target(deploy-dist + COMMAND rsync ${CMAKE_BINARY_DIR}/*.tar.gz ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/src +) + +add_custom_target(deploy-rpm + COMMAND rsync -a --progress ${CMAKE_BINARY_DIR}/*.rpm ${DEPLOY_USER}@${DEPLOY_HOST}:/var/www/packages/redhat/ + COMMAND ssh ${DEPLOY_USER}@${DEPLOY_HOST} createrepo /var/www/packages/redhat +) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/libvillas.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/libvillas.pc +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libvillas.pc + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig +) + +add_subdirectory(docker) diff --git a/packaging/docker/CMakeLists.txt b/packaging/docker/CMakeLists.txt new file mode 100644 index 000000000..d26a785d1 --- /dev/null +++ b/packaging/docker/CMakeLists.txt @@ -0,0 +1,66 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +set(DOCKER_FILE Dockerfile) +set(DOCKER_IMAGE villas/node) +set(DOCKER_TAG ${GIT_BRANCH}) +set(DOCKER_RUN_OPTS "--interactive --tty --publish 80:80 --publish 443:443 --publish 12000:12000/udp --publish 12001:12001/udp --privileged --security-opt seccomp:unconfined --volume \"${CMAKE_SOURCE_DIR}:/villas\"") + +foreach(SUFFIX app dev dev-centos dev-ubuntu) + add_custom_target(deploy-docker-${SUFFIX} + COMMAND docker push ${DOCKER_IMAGE}-${SUFFIX}:${DOCKER_TAG} + COMMAND docker push ${DOCKER_IMAGE}-${SUFFIX}:latest + DEPENDS docker-${SUFFIX} + ) + + add_custom_target(run-docker-${SUFFIX} + COMMAND docker run ${DOCKER_RUN_OPTS} ${DOCKER_IMAGE}-${SUFFIX}:${DOCKER_TAG} + DEPENDS docker-${SUFFIX} + ) + + add_custom_target(docker-${SUFFIX} + COMMAND docker build + --file ${CMAKE_CURRENT_SOURCE_DIR}/Dockerfile.${SUFFIX} + --tag ${DOCKER_IMAGE}-${SUFFIX}:${DOCKER_TAG} + --tag ${DOCKER_IMAGE}-${SUFFIX}:latest + --build-arg BUILDER_IMAGE=${DOCKER_IMAGE}-dev:${DOCKER_TAG} + --build-arg DOCKER_TAG=${DOCKER_TAG} + --build-arg GIT_BRANCH=${GIT_BRANCH} + --build-arg GIT_REV=${GIT_REV} + --build-arg VERSION=${PROJECT_VERSION} + --build-arg VARIANT=${VARIANT} + ${DOCKER_BUILD_OPTS} ${CMAKE_SOURCE_DIR} + ) +endforeach() + +# Special cases for 'docker'target +add_custom_target(docker DEPENDS docker-app + COMMAND docker tag ${DOCKER_IMAGE}-app:${DOCKER_TAG} ${DOCKER_IMAGE}:${DOCKER_TAG} + COMMAND docker tag ${DOCKER_IMAGE}-app:${DOCKER_TAG} ${DOCKER_IMAGE}:latest +) + +add_custom_target(deploy-docker DEPENDS docker-app + COMMAND docker push ${DOCKER_IMAGE}:${DOCKER_TAG} + COMMAND docker push ${DOCKER_IMAGE}:latest +) + +add_custom_target(run-docker DEPENDS run-docker-app) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt new file mode 100644 index 000000000..7c04e463f --- /dev/null +++ b/plugins/CMakeLists.txt @@ -0,0 +1,32 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +# Plugins +link_libraries(villas) +include_directories("${CMAKE_SOURCE_DIR}/include") +add_definitions("-DVILLAS") + +add_library(simple_circuit SHARED models/simple_circuit.c) + +if(WITH_HOOKS) + add_library(example_hook SHARED hooks/example_hook.c) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ab489b07b..3f279dcdb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,26 @@ +# CMakeLists. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +# All executables link against libvillas link_libraries(villas) add_executable(villas-node node.c) @@ -6,11 +29,20 @@ add_executable(villas-test-shmem test-shmem.c) if(WITH_IO) add_executable(villas-test-cmp test-cmp.c) + add_executable(villas-convert convert.c) + add_executable(villas-pipe pipe.c) + target_link_libraries(villas-pipe PUBLIC pthread) + add_executable(villas-signal signal.c) endif() if(WITH_IO AND WITH_HOOKS) add_executable(villas-hook hook.c) endif() + +install( + TARGETS ${BUILDSYSTEM_TARGETS} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..7efc9713e --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,46 @@ +# Makefile. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +add_subdirectory(unit) +add_subdirectory(integration) + +if(CMAKE_BUILD_TYPE STREQUAL "Coverage") + #include tests/unit/Makefile.gcov.inc +endif() + +add_custom_target(tests + DEPENDS unit-tests integration-tests +) + +add_custom_target(run-tests + DEPENDS run-unit-tests run-integration-tests +) + +set(VALGRIND "valgrind --leak-check=full --show-leak-kinds=all --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/valgrind.supp") + +add_custom_target(run-valgrind + COMMAND ${VALGRIND} $ & sleep 2; kill %1 + COMMAND ${VALGRIND} $ -t 2 ${CMAKE_SOURCE_DIR}/etc/websocket-loopback.conf ws1 + COMMAND ${VALGRIND} $ mixed -v 4 -l 10 + COMMAND ${VALGRIND} $ stats < <($ mixed -l 5) + DEPENDS villas-node villas-pipe villas-signal villas-hook +) diff --git a/tests/integration/CMakeLists.txt b/tests/integration/CMakeLists.txt new file mode 100644 index 000000000..1cd7fb6df --- /dev/null +++ b/tests/integration/CMakeLists.txt @@ -0,0 +1,33 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +add_custom_target(run-integration-tests + COMMAND + SRCDIR=${CMAKE_SOURCE_DIR} + BUILDDIR=${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/tools/integration-tests.sh + DEPENDS + villas-node + villas-pipe + villas-signal + villas-hook +) diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt new file mode 100644 index 000000000..dae9b6414 --- /dev/null +++ b/tests/unit/CMakeLists.txt @@ -0,0 +1,50 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +set(TEST_SRC + advio.c + bitset.c + config_json.c + hist.c + io.c + json.c + kernel.c + list.c + log.c + main.c + mapping.c + memory.c + pool.c + queue.c + queue_signalled.c + task.c + timing.c + utils.c +) + +add_executable(unit-tests ${TEST_SRC}) +target_link_libraries(unit-tests PUBLIC villas criterion pthread) + +add_custom_target(run-unit-tests + COMMAND $ ${CRITERION_OPTS} + DEPENDS unit-tests +) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index c04a4545d..4137c06e6 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,7 +1,7 @@ # CMakeLists. # # @author Steffen Vogel -# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode @@ -20,9 +20,9 @@ # along with this program. If not, see . ################################################################################### -if(WITH_CONFIG) +if(LIBCONFIG_FOUND) + list(APPEND TOOLS conf2json) add_executable(conf2json conf2json.c) - target_link_libraries(conf2json PUBLIC villas) endif() @@ -34,9 +34,14 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") target_link_libraries(rmsem PUBLIC pthread rt) endif() -pkg_check_modules(ZMQ IMPORTED_TARGET REQUIRED libzmq) -if(ZMQ_FOUND) +if(LIBZMQ_FOUND) add_executable(zmq-keygen zmq-keygen.c) - target_include_directories(zmq-keygen PUBLIC ${ZMQ_INCLUDE_DIRS}) - target_link_libraries(zmq-keygen PUBLIC PkgConfig::ZMQ) + target_include_directories(zmq-keygen PUBLIC ${LIBZMQ_INCLUDE_DIRS}) + target_link_libraries(zmq-keygen PUBLIC PkgConfig::LIBZMQ) endif() + +install( + PROGRAMS villas.sh + DESTINATION ${CMAKE_INSTALL_BINDIR} + RENAME villas +) diff --git a/tools/integration-tests.sh b/tools/integration-tests.sh index 1c2934640..f3360d1d1 100755 --- a/tools/integration-tests.sh +++ b/tools/integration-tests.sh @@ -25,13 +25,11 @@ SCRIPT=$(realpath ${BASH_SOURCE[0]}) SCRIPTPATH=$(dirname $SCRIPT) -VARIANTS=${VARIANTS:-"release"} -VARIANT=${VARIANT:-$(uname -s)-$(uname -m)-$(echo ${VARIANTS} | tr ' ' '_')} SRCDIR=${SRCDIR:-$(realpath ${SCRIPTPATH}/..)} -BUILDDIR=${BUILDDIR:-${SRCDIR}/build/${VARIANT}} +BUILDDIR=${BUILDDIR:-${SRCDIR}/build} LOGDIR=${BUILDDIR}/tests/integration -PATH=${BUILDDIR}:${PATH} +PATH=${BUILDDIR}/src:${PATH} export PATH SRCDIR BUILDDIR LOGDIR diff --git a/web/CMakeLists.txt b/web/CMakeLists.txt new file mode 100644 index 000000000..96286035a --- /dev/null +++ b/web/CMakeLists.txt @@ -0,0 +1,27 @@ +# CMakeLists.txt. +# +# @author Steffen Vogel +# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC +# @license GNU General Public License (version 3) +# +# VILLASnode +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +################################################################################### + +install( + DIRECTORY socket/ + DESTINATION share/villas/node/web + COMPONENT runtime +)