1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

Merge branch 'cmake' into develop

# Conflicts:
#	lib/Makefile.villas.inc
This commit is contained in:
Steffen Vogel 2018-07-03 18:30:21 +02:00
commit 1026539a4b
89 changed files with 1665 additions and 1922 deletions

View file

@ -1,17 +0,0 @@
build/
thirdparty/
.git/
.gitmodules
.gitignore
.dockerignore
.distignore
.DS_Store
*~
*.o
*.d
villas-*

View file

@ -4,12 +4,15 @@ variables:
PREFIX: /usr/
RSYNC_OPTS: --recursive --ignore-missing-args --chown ${DEPLOY_USER}:${DEPLOY_USER}
CRITERION_OPTS: --ignore-warnings
DOCKER_TAG: $CI_COMMIT_TAG
DOCKER_TAG_DEV: ${CI_COMMIT_REF_NAME}
DOCKER_IMAGE: villas/node
DOCKER_IMAGE_DEV: villas/node-dev
stages:
- prepare
- build
- build2
- test
- deploy
- docker
@ -25,7 +28,7 @@ before_script:
docker-dev:
stage: prepare
script:
- make docker-dev
- docker build -f packaging/docker/Dockerfile.dev -t ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} .
tags:
- shell
- linux
@ -36,12 +39,14 @@ docker-dev:
build:source:
stage: build
script:
- mkdir -p build && cd build
- cmake ..
- make
artifacts:
expire_in: 1 week
name: ${CI_PROJECT_NAME}-${CI_BUILD_REF}
paths:
- build/release/
- build/
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV}
tags:
- docker
@ -51,8 +56,10 @@ build:docs:
artifacts:
name: ${CI_PROJECT_NAME}-doc-${CI_BUILD_REF}
paths:
- build/release/doc/
- build/doc/
script:
- mkdir -p build && cd build
- cmake ..
- make doc
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV}
tags:
@ -61,19 +68,20 @@ build:docs:
- tags
- master
build:packages:
stage: build
before_script:
- dnf -y config-manager --add-repo https://${DEPLOY_USER}:${DEPLOY_PASS}@${DEPLOY_HOST}/packages/villas.repo
- dnf -y --refresh install openssl-devel libconfig-devel libnl3-devel libcurl-devel jansson-devel libxil-devel libwebsockets-devel zeromq-devel nanomsg-devel
build2:packages:
stage: build2
dependencies:
- build:docs
script:
- make rpm-villas-node
- mkdir -p build && cd build
- cmake ..
- make package
artifacts:
expire_in: 1 week
name: ${CI_PROJECT_NAME}-packages-${CI_BUILD_REF}
paths:
- build/release/packaging/*.tar.gz
- build/release/packaging/rpm/RPMS/
- build/*.tar.gz
- build/*.rpm
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV}
tags:
- docker
@ -85,28 +93,13 @@ build:packages:
# Stage: test
##############################################################################
test:coverage:
stage: test
variables:
COVERAGE: "1"
script:
- make coverage
artifacts:
name: ${CI_PROJECT_NAME}-coverage-${CI_BUILD_REF}
paths:
- build/release-coverage/coverage/
- build/release-coverage/coverage.txt
- build/release-coverage/coverage.xml
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV}
coverage: '/lines: (\d+\.\d+\%)/'
tags:
- docker
test:unit:
stage: test
dependencies:
- build:source
script:
- mkdir -p build && cd build
- cmake ..
- make run-unit-tests
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV}
tags:
@ -117,6 +110,8 @@ test:integration:
dependencies:
- build:source
script:
- mkdir -p build && cd build
- cmake ..
- make run-integration-tests
artifacts:
name: ${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF}
@ -127,19 +122,6 @@ test:integration:
tags:
- docker
test:valgrind:
stage: test
variables:
DEBUG: "1"
script:
- make run-valgrind
dependencies:
- build:source
allow_failure: true
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV}
tags:
- docker
# Stage: deploy
##############################################################################
@ -147,13 +129,10 @@ deploy:web:
stage: deploy
script:
- ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p ${DEPLOY_PATH}/{coverage,doc}/${CI_BUILD_REF_NAME}/
- rsync ${RSYNC_OPTS} build/release-coverage/coverage/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/coverage/$CI_BUILD_REF_NAME/
- rsync ${RSYNC_OPTS} build/release/doc/html/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/doc/$CI_BUILD_REF_NAME/
- rsync ${RSYNC_OPTS} build/doc/html/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/doc/$CI_BUILD_REF_NAME/
- rsync ${RSYNC_OPTS} web/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/
dependencies:
- build:docs
- build:packages
- test:coverage
only:
- tags
tags:
@ -163,48 +142,25 @@ deploy:packages:
stage: deploy
script:
- ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p ${DEPLOY_PATH}/{dist,../packages}
- rsync ${RSYNC_OPTS} build/release/packaging/rpm/RPMS/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/../packages/
- rsync ${RSYNC_OPTS} build/release/packaging/*.tar.gz ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/dist/
- rsync ${RSYNC_OPTS} build/*.rpm ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/../packages/x86_64/
- rsync ${RSYNC_OPTS} build/*.tar.gz ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/dist/
- ssh ${DEPLOY_USER}@${DEPLOY_HOST} createrepo ${DEPLOY_PATH}/../packages
dependencies:
- build:packages
- build2:packages
tags:
- villas-deploy
only:
- tags
.deploy:git-mirror:
stage: deploy
script:
- git push --force --mirror https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/VILLASframework/VILLASnode.git
# Stage: docker
##############################################################################
docker:
stage: docker
variables:
DOCKER_IMAGE: villas/node
DOCKER_TAG: $CI_COMMIT_TAG
script:
- make docker
- make deploy-docker
- docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
- docker push ${DOCKER_IMAGE}:latest
dependencies:
- build:packages
- docker build -f packaging/docker/Dockerfile.app -t ${DOCKER_IMAGE}:${DOCKER_TAG} .
- docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV}
tags:
- shell
- linux
only:
- tags
docker:dev:
stage: docker
script:
- make deploy-docker-dev
tags:
- shell
- linux
only:
- develop

230
CMakeLists.txt Normal file
View file

@ -0,0 +1,230 @@
# Main CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
cmake_minimum_required(VERSION 3.3)
# Policies
cmake_policy(SET CMP0068 NEW)
project(VILLASnode C CXX)
# Several CMake settings/defaults
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_THREAD_PREFER_PTHREAD ON)
#set(CMAKE_SKIP_INSTALL_RPATH ON)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
if(APPLE)
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/opt/local/lib/pkgconfig")
endif()
include(FindPkgConfig)
include(CheckIncludeFile)
include(FeatureSummary)
include(GNUInstallDirs)
# Compiler flags
if(BUILD32)
add_compile_options(-m32)
link_libraries(-m32)
endif()
if(APPLE)
add_definitions(-D_DARWIN_C_SOURCE)
endif()
add_definitions(-D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE)
add_compile_options(-fdiagnostics-color=auto)
if(MSVC)
add_compile_options(/W4 /WX)
else()
add_compile_options(-Wall -Werror)
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)
# Check packages
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
find_package(Libwebsockets REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(CURL REQUIRED)
find_package(Opal)
# Check programs
find_program(PROTOBUFC_COMPILER NAMES protoc-c)
find_program(PROTOBUF_COMPILER NAMES protoc)
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig")
pkg_check_modules(PROTOBUFC IMPORTED_TARGET libprotobuf-c)
pkg_check_modules(CRITERION IMPORTED_TARGET criterion)
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()
# 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_TOOLS "Build auxilary tools" ON)
option(WITH_TESTS "Run tests" ON)
option(WITH_PLUGINS "Build plugins" ON)
option(WITH_CLIENTS "Build client applications" ON)
option(WITH_DOC "Build documentation" ON)
set(V 2)
set(PREFIX ${CMAKE_INSTALL_PREFIX})
if(CMAKE_BUILD_TYPE)
string(TOLOWER "${CMAKE_BUILD_TYPE}" VARIANT)
else()
set(VARIANT "release")
endif()
# 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_AUTHOR "Steffen Vogel")
set(PROJECT_COPYRIGHT "2018, Institute for Automation of Complex Power Systems, RWTH Aachen University")
set(PROJECT_SOVERSION 1)
execute_process(
COMMAND git describe --tags --abbrev=0 --match "v*"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE PROJECT_VERSION_STR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX REPLACE "^v([0-9]+\\.[0-9]+\\.[0-9]+)$" "\\1" PROJECT_VERSION ${PROJECT_VERSION_STR})
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" PROJECT_MAJOR_VERSION ${PROJECT_VERSION_STR})
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" PROJECT_MINOR_VERSION ${PROJECT_VERSION_STR})
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" PROJECT_PATCH_VERSION ${PROJECT_VERSION_STR})
string(TIMESTAMP BUILD_DATE "%Y%m%d")
if(DEFINED ENV{CI})
string(APPEND VARIANT "-ci")
string(SUBSTRING $ENV{CI_COMMIT_SHA} 0 7 GIT_REV)
set(GIT_BRANCH $ENV{CI_COMMIT_REF_NAME})
else()
execute_process(
COMMAND git rev-parse --short=7 HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_REV
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
if(DEFINED ENV{CI_COMMIT_TAG})
set(PROJECT_RELEASE 1)
else()
string(REPLACE "-" "_" GIT_BRANCH_NORM ${GIT_BRANCH})
string(REPLACE "-" "_" VARIANT_NORM ${VARIANT})
set(PROJECT_RELEASE "1.${GIT_BRANCH_NORM}_${VARIANT_NORM}.${BUILD_DATE}git${GIT_REV}")
endif()
set(BUILDID "v${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}-${GIT_REV}-${VARIANT}")
include_directories(
${CMAKE_SOURCE_DIR}/include
${CMAKE_BINARY_DIR}/include
)
add_subdirectory(etc)
add_subdirectory(lib)
add_subdirectory(src)
add_subdirectory(web)
add_subdirectory(packaging)
if(WITH_TOOLS)
add_subdirectory(tools)
endif()
if(WITH_TOOLS)
add_subdirectory(plugins)
endif()
if(WITH_DOC)
add_subdirectory(doc)
endif()
if(WITH_CLIENTS)
add_subdirectory(clients)
endif()
if(WITH_TESTS)
add_subdirectory(tests)
endif()
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")
add_feature_info(IO WITH_IO "Build with support format plugins")
add_feature_info(WEB WITH_WEB "Build with internal webserver")
add_feature_info(API WITH_API "Build with remote control API")
add_feature_info(CONFIG WITH_CONFIG "Build with support for libconfig configuration syntax")
add_feature_info(TOOLS WITH_TOOLS "Build auxilary tools")
add_feature_info(TESTS WITH_TESTS "Run tests")
add_feature_info(PLUGINS WITH_PLUGINS "Build plugins")
add_feature_info(CLIENTS WITH_CLIENTS "Build client applications")
add_feature_info(DOC WITH_DOC "Build documentation")
if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
feature_summary(WHAT ALL VAR FEATURES)
message(STATUS "${FEATURES}")
message(STATUS "Building VILLASnode: ${BUILDID}")
endif()
include(VILLASnodePackaging)

182
Makefile
View file

@ -1,182 +0,0 @@
## Main project Makefile
#
# The build system of this project is based on GNU Make and pkg-config
#
# To retain maintainability, the project is divided into multiple modules.
# Each module has its own Makefile which gets included.
#
# Please read "Recursive Make Considered Harmful" from Peter Miller
# to understand the motivation for this structure.
#
# [1] http://aegis.sourceforge.net/auug97.pdf
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
# Project modules
MODULES = lib packaging doc etc web tests
# Modules which are not included in default, install and clean targets
MODULES_EXCLUDE = thirdparty packaging doc
# Default prefix for install target
PREFIX ?= /usr/local
# Default out-of-source build path
BUILDDIR ?= build
# Default debug level for executables
V ?= 2
# Platform
PLATFORM ?= $(shell uname)
include Makefile.config
ifeq ($(WITH_SRC),1)
MODULES += src
endif
ifeq ($(WITH_TOOLS),1)
MODULES += tools
endif
ifeq ($(WITH_PLUGINS),1)
MODULES += plugins
endif
ifeq ($(WITH_TESTS),1)
MODULES += tests
endif
# Common flags
LDLIBS =
CFLAGS += -std=c11 -MMD -mcx16 -I$(BUILDDIR)/include -I$(SRCDIR)/include
CFLAGS += -Wall -Werror -fdiagnostics-color=auto -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE=1
ifeq ($(PLATFORM),Darwin)
CFLAGS += -D_DARWIN_C_SOURCE
endif
LDFLAGS += -L$(BUILDDIR)
# Some tools
PKG_CONFIG_PATH := $(PKG_CONFIG_PATH):/opt/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
PKGCONFIG := PKG_CONFIG_PATH=:$(PKG_CONFIG_PATH) pkg-config
SHELL := bash
# We must compile without optimizations for gcov!
ifdef DEBUG
CFLAGS += -O0 -g
VARIANTS += debug
else
CFLAGS += -O3
VARIANTS += release
endif
ifdef PROFILE
CFLAGS += -pg
LDFLAGS += -pg
VARIANTS += profile
endif
ifdef COVERAGE
CFLAGS += --coverage
LDLIBS += -lgcov
VARIANTS += coverage
endif
EMPTY :=
SPACE := $(EMPTY) $(EMPTY)
VARIANT = $(shell uname -s)-$(shell uname -m)-$(subst $(SPACE),-,$(strip $(VARIANTS)))
BUILDDIR := $(BUILDDIR)/$(VARIANT)
SRCDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
VPATH = $(SRCDIR)
# Add git revision and build variant defines
VERSION := $(shell git describe --tags --abbrev=0 --match 'v*')
VERSION_NUM := $(shell VERSION=$(VERSION); echo $${VERSION:1})
export BUILDDIR VARIANT VERSION VERSION_NUM
ifdef CI
VARIANT := $(VARIANT)-ci
GIT_REV := $(shell echo $${CI_COMMIT_SHA:0:7})
GIT_BRANCH := $(CI_COMMIT_REF_NAME)
ifdef CI_COMMIT_TAG
RELEASE = 1
else
RELEASE = 1.$(subst -,_,$(CI_COMMIT_REF_NAME))_$(subst -,_,$(VARIANT)).$(shell date +%Y%m%d)git$(GIT_REV)
endif
else
GIT_REV := $(shell git rev-parse --short=7 HEAD)
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
RELEASE = 1.$(subst -,_,$(GIT_BRANCH))_$(subst -,_,$(VARIANT)).$(shell date +%Y%m%d)git$(GIT_REV)
endif
BUILDID = "$(VERSION)-$(GIT_REV)-$(VARIANT)"
# pkg-config dependencies
PKGS = openssl jansson
ifeq ($(WITH_CONFIG),1)
PKGS += libconfig
endif
######## Targets ########
# Add flags by pkg-config
CFLAGS += $(shell $(PKGCONFIG) --cflags ${PKGS})
LDLIBS += $(shell $(PKGCONFIG) --libs ${PKGS})
all: $(filter-out $(MODULES_EXCLUDE),$(MODULES))
install: $(addprefix install-,$(filter-out $(MODULES_EXCLUDE),$(MODULES)))
clean: $(addprefix clean-, $(filter-out $(MODULES_EXCLUDE),$(MODULES)))
src plugins tools tests: lib
# Build all variants: debug, coverage, ...
everything:
$(MAKE) RELEASE=1
$(MAKE) DEBUG=1
$(MAKE) COVERAGE=1
$(MAKE) PROFILE=1
# Create non-existent directories
.SECONDEXPANSION:
.PRECIOUS: %/
%/:
mkdir -p $@
escape = $(shell echo $1 | tr a-z- A-Z_ | tr -dc ' A-Z0-9_')
.PHONY: all everything clean install
include $(wildcard $(BUILDDIR)/**/*.d)
include $(patsubst %,$(SRCDIR)/%/Makefile.inc,$(MODULES))
include Makefile.help

View file

@ -1,74 +0,0 @@
## Main project Makefile
#
# The build system of this project is based on GNU Make and pkg-config
#
# To retain maintainability, the project is divided into multiple modules.
# Each module has its own Makefile which gets included.
#
# Please read "Recursive Make Considered Harmful" from Peter Miller
# to understand the motivation for this structure.
#
# [1] http://aegis.sourceforge.net/auug97.pdf
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
# Select modules
WITH_SRC ?= 1
WITH_TOOLS ?= 1
WITH_PLUGINS ?= 1
WITH_TESTS ?= 0
WITH_CLIENTS ?= 0
# Select features
WITH_CONFIG ?= 1
WITH_HOOKS ?= 1
WITH_WEB ?= 1
WITH_API ?= 1
WITH_IO ?= 1
# Select IO formats
WITH_FORMAT_PROTOBUF ?= 1
# Select node-types
ifeq ($(PLATFORM),Linux)
IS_LINUX = 1
else
IS_LINUX = 0
endif
WITH_NODE_FPGA ?= $(IS_LINUX)
WITH_NODE_CBUILDER ?= $(IS_LINUX)
WITH_NODE_LOOPBACK ?= $(IS_LINUX)
WITH_NODE_COMEDI ?= $(IS_LINUX)
WITH_NODE_TEST_RTT ?= 1
WITH_NODE_FILE ?= 1
WITH_NODE_SIGNAL ?= 1
WITH_NODE_NGSI ?= 1
WITH_NODE_WEBSOCKET ?= 1
WITH_NODE_SOCKET ?= 1
WITH_NODE_ZEROMQ ?= 1
WITH_NODE_NANOMSG ?= 1
WITH_NODE_SHMEM ?= 1
WITH_NODE_STATS ?= 1
WITH_NODE_INFLUXDB ?= 1
WITH_NODE_AMQP ?= 1
WITH_NODE_IEC61850 ?= 1
WITH_NODE_MQTT ?= 1

View file

@ -1,102 +0,0 @@
# Makefile for clang autocompletion
#
# This Makefile produces .clang_complete files containing compiler flags
# which are used by clang autocompletion tools such as:
#
# - https://atom.io/packages/autocomplete-clang
# - https://github.com/Rip-Rip/clang_complete
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
E = @echo
help:
$E "The following make targets are available:"
$E
$E " - make all"
$E " Build libvillas, villas CLI tools, tests"
$E
$E " - make everything"
$E " Build all in all available build variants"
$E
$E " - make docker"
$E " - make run-docker"
$E " - make deploy-docker"
$E
$E " - make docker-{app,dev,dev-centos,dev-fedora}"
$E " Build Docker images"
$E
$E " - make run-docker-{app,dev,dev-centos,dev-fedora}"
$E " Run Docker containers"
$E
$E " - make deploy-docker-{app,dev,dev-centos,dev-fedora}"
$E " Deploy Docker images to official registry"
$E
$E "The following environment variables can change the build:"
$E " DEBUG = 1"
$E " COVERAGE = 1"
$E
$E "Use the following variables to enable/disabled certain features of VILLASnode"
$E " The list also shows the currently active (default) value"
$E
$E "Enable modules:"
$E " WITH_SRC = $(WITH_SRC)"
$E " WITH_TOOLS = $(WITH_TOOLS)"
$E " WITH_PLUGINS = $(WITH_PLUGINS)"
$E " WITH_TESTS = $(WITH_TESTS)"
$E " WITH_CLIENTS = $(WITH_CLIENTS)"
$E
$E "Enable features:"
$E " WITH_CONFIG = $(WITH_CONFIG)"
$E " WITH_HOOKS = $(WITH_HOOKS)"
$E " WITH_WEB = $(WITH_WEB)"
$E " WITH_API = $(WITH_API)"
$E " WITH_IO = $(WITH_IO)"
$E
$E "Enable IO formats:"
$E " WITH_FORMAT_PROTOBUF = $(WITH_FORMAT_PROTOBUF)"
$E
$E "Enable node-types:"
$E " WITH_NODE_FPGA = $(WITH_NODE_FPGA)"
$E " WITH_NODE_CBUILDER = $(WITH_NODE_CBUILDER)"
$E " WITH_NODE_LOOPBACK = $(WITH_NODE_LOOPBACK)"
$E " WITH_NODE_TEST_RTT = $(WITH_NODE_TEST_RTT)"
$E " WITH_NODE_FILE = $(WITH_NODE_FILE)"
$E " WITH_NODE_SIGNAL = $(WITH_NODE_SIGNAL)"
$E " WITH_NODE_NGSI = $(WITH_NODE_NGSI)"
$E " WITH_NODE_WEBSOCKET = $(WITH_NODE_WEBSOCKET)"
$E " WITH_NODE_SOCKET = $(WITH_NODE_SOCKET)"
$E " WITH_NODE_ZEROMQ = $(WITH_NODE_ZEROMQ)"
$E " WITH_NODE_NANOMSG = $(WITH_NODE_NANOMSG)"
$E " WITH_NODE_SHMEM = $(WITH_NODE_SHMEM)"
$E " WITH_NODE_STATS = $(WITH_NODE_STATS)"
$E " WITH_NODE_INFLUXDB = $(WITH_NODE_INFLUXDB)"
$E " WITH_NODE_AMQP = $(WITH_NODE_AMQP)"
$E " WITH_NODE_MQTT = $(WITH_NODE_MQTT)"
$E " WITH_NODE_IEC61850 = $(WITH_NODE_IEC61850)"
$E " WITH_NODE_MQTT = $(WITH_NODE_MQTT)"
$E " WITH_NODE_COMEDI = $(WITH_NODE_COMEDI)"
$E
$E "Available dependencies: $(LIB_PKGS)"
$E "Enabled node-types: $(LIB_NODES)"
$E "Enabled formats: $(LIB_FORMATS)"
.PHONY: help

View file

@ -16,19 +16,16 @@ VILLASnode is a client/server application to connect simulation equipment and so
by using protcols such as:
- IEEE 802.2 Ethernet / IP / UDP,
- ZeroMQ,
- nanomsg,
- ZeroMQ & nanomsg,
- MQTT & AMQP
- WebSockets
- Shared Memory
- Files
- IEC 61850 Sampled Values / GOOSE
- Analog/Digital IO via Comedi drivers
- Infiniband (ibverbs)
Planned:
- IEC 61850-9-2 Sampled Values,
- IEC 61850-8-1 GOOSE,
- AMQP
It's designed with a focus on very low latency to achieve almost realtime exchange of simulation data.
It's designed with a focus on very low latency to achieve real-time exchange of simulation data.
VILLASnode is used in distributed- and co-simulation scenarios and developed for the field of power grid simulation at the EON Energy Research Center in Aachen, Germany.
## Documentation
@ -37,7 +34,7 @@ User documentation is available here: <https://villas.fein-aachen.org/doc/node.h
## Copyright
2017, Institute for Automation of Complex Power Systems, EONERC
2018, Institute for Automation of Complex Power Systems, EONERC
## License

View file

@ -1,7 +1,7 @@
# Makefile.
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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,6 +20,5 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
LIB_SRCS += $(wildcard lib/api/*.c)
include lib/api/actions/Makefile.inc
add_subdirectory(python)
add_subdirectory(opal)

View file

@ -0,0 +1,32 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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()

View file

@ -1,46 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
ifneq ($(wildcard $(SRCDIR)/thirdparty/libopal/include/opal/AsyncApi.h),)
CLIENTS += opal
ASYNCIP_PATH = $(SRCDIR)/clients/opal/models/send_receive
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
clients-opal:
$(MAKE) -C $(ASYNCIP_PATH) -f Makefile.mk AsyncIP $(ASYNCIP_OPTS)
clean-clients-opal:
$(MAKE) -C $(ASYNCIP_PATH) -f Makefile.mk clean $(ASYNCIP_OPTS)
install-clients-opal:
$(MAKE) -C $(ASYNCIP_PATH) -f Makefile.mk install $(ASYNCIP_OPTS)
.PHONY: clients-opal clean-clients-opal install-clients-opal
endif

View file

@ -20,4 +20,4 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
LIB_SRCS += $(wildcard lib/api/actions/*.c)

40
cmake/FindMosquitto.cmake Normal file
View file

@ -0,0 +1,40 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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})

View file

@ -1,7 +1,7 @@
# Makefile.
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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,13 +20,18 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
CLIENTS =
find_path(OPAL_INCLUDE_DIR
NAMES opal/AsyncApi.h
)
include $(SRCDIR)/clients/python/Makefile.inc
include $(SRCDIR)/clients/opal/Makefile.inc
find_library(OPAL_LIBRARY
NAMES OpalAsyncApiCore
)
clients: $(addprefix clients-,$(filter-out opal,$(CLIENTS)))
clean-clients: $(addprefix clean-clients-,$(filter-out opal,$(CLIENTS)))
install-clients: $(addprefix install-clients-,$(filter-out opal,$(CLIENTS)))
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Opal DEFAULT_MSG OPAL_LIBRARY OPAL_INCLUDE_DIR)
.PHONY: clients clean-clients install-clients
mark_as_advanced(OPAL_INCLUDE_DIR OPAL_LIBRARY)
set(OPAL_LIBRARIES ${OPAL_LIBRARY} OpalCore OpalUtils irc)
set(OPAL_INCLUDE_DIRS ${OPAL_INCLUDE_DIR})

View file

@ -0,0 +1,73 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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_COMPONENT_INSTALL ON)
set(CPACK_RPM_MAIN_COMPONENT bin)
set(CPACK_RPM_LIB_PACKAGE_NAME libvillas)
set(CPACK_RPM_DEVEL_PACKAGE_NAME libvillas-devel)
set(CPACK_RPM_BIN_PACKAGE_NAME villas-node)
set(CPACK_RPM_PLUGINS_PACKAGE_NAME villas-node-plugins)
set(CPACK_RPM_TOOLS_PACKAGE_NAME villas-node-tools)
set(CPACK_RPM_DOC_PACKAGE_NAME villas-node-doc)
set(SUFFIX "${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
set(CPACK_RPM_LIB_FILE_NAME "${CPACK_RPM_LIB_PACKAGE_NAME}-${SUFFIX}")
set(CPACK_RPM_DEVEL_FILE_NAME "${CPACK_RPM_DEVEL_PACKAGE_NAME}-devel-${SUFFIX}")
set(CPACK_RPM_BIN_FILE_NAME "${CPACK_RPM_BIN_PACKAGE_NAME}-${SUFFIX}")
set(CPACK_RPM_PLUGINS_FILE_NAME "${CPACK_RPM_PLUGINS_PACKAGE_NAME}-${SUFFIX}")
set(CPACK_RPM_TOOLS_FILE_NAME "${CPACK_RPM_TOOLS_PACKAGE_NAME}-${SUFFIX}")
set(CPACK_RPM_DOC_FILE_NAME "${CPACK_RPM_DOC_PACKAGE_NAME}-${SUFFIX}")
set(CPACK_RPM_LIB_PACKAGE_REQUIRES "openssl libconfig libnl3 libcurl jansson libwebsockets zeromq nanomsg libiec61850 librabbitmq mosquitto comedilib")
set(CPACK_RPM_BIN_PACKAGE_REQUIRES ${CPACK_RPM_LIB_PACKAGE_NAME})
set(CPACK_RPM_PLUGINS_PACKAGE_REQUIRES ${CPACK_RPM_LIB_PACKAGE_NAME})
set(CPACK_RPM_TOOLS_PACKAGE_REQUIRES ${CPACK_RPM_LIB_PACKAGE_NAME})
set(CPACK_RPM_DEVEL_PACKAGE_SUGGESTS ${CPACK_RPM_LIB_PACKAGE_NAME})
set(CPACK_RPM_BIN_PACKAGE_SUGGESTS "villas-node-tools villas-node-plugins villas-node-doc")
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
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/villas-node/")
set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries")
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)

View file

@ -0,0 +1,56 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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")
endif()

View file

@ -1,7 +1,7 @@
# Makefile.
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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
@ -19,6 +19,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
clients/python/villas_pb2.py: lib/io/villas.proto
protoc --proto_path=$(dir $^) --python_out=$(dir $@) $^

View file

@ -0,0 +1,54 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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
)

View file

@ -1,7 +1,7 @@
# Makefile.
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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
@ -19,8 +19,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
integration-tests: src tools
run-integration-tests: integration-tests
@$(SRCDIR)/tools/integration-tests.sh

64
doc/CMakeLists.txt Normal file
View file

@ -0,0 +1,64 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
find_package(Doxygen)
if(DOXYGEN_FOUND)
set(DOXYGEN_PROJECT_LOGO doc/pictures/villas_node.svg)
set(DOXYGEN_WARN_LOGFILE ${CMAKE_CURRENT_BINARY_DIR}/warnings.log)
set(DOXYGEN_TAB_SIZE 8)
set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES)
set(DOXYGEN_LAYOUT_FILE doc/theme/layout.xml)
set(DOXYGEN_RECURSIVE YES)
set(DOXYGEN_EXAMPLE_PATH etc/)
set(DOXYGEN_EXAMPLE_RECURSIVE YES)
set(DOXYGEN_IMAGE_PATH doc/pictures)
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE README.md)
set(DOXYGEN_SOURCE_BROWSER YES)
set(DOXYGEN_REFERENCED_BY_RELATION YES)
set(DOXYGEN_HTML_HEADER doc/theme/header.html)
set(DOXYGEN_HTML_EXTRA_STYLESHEET doc/theme/style.css)
set(DOXYGEN_HTML_EXTRA_FILES doc/pictures/acs_eonerc_logo.svg)
set(DOXYGEN_HTML_COLORSTYLE_HUE 209)
set(DOXYGEN_HTML_COLORSTYLE_SAT 88)
set(DOXYGEN_HTML_TIMESTAMP YES)
set(DOXYGEN_HTML_DYNAMIC_SECTIONS YES)
set(DOXYGEN_GENERATE_TREEVIEW YES)
set(DOXYGEN_TREEVIEW_WIDTH 280)
set(DOXYGEN_UML_LOOK YES)
set(DOXYGEN_CALL_GRAPH YES)
set(DOXYGEN_CALLER_GRAPH YES)
set(DOXYGEN_DOT_IMAGE_FORMAT svg)
set(DOXYGEN_INTERACTIVE_SVG YES)
set(DOXYGEN_DIAFILE_DIRS doc/figures/)
doxygen_add_docs(doc
README.md CONTRIBUTING.md COPYING.md src/ lib/ tests/ include/ doc/
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/villas/node
COMPONENT doc
)
endif()

View file

@ -58,7 +58,7 @@ PROJECT_LOGO = doc/pictures/villas_node.svg
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY = build/doc/
OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and

View file

@ -1,33 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
doc: | $(BUILDDIR)/doc/
( cat Doxyfile ; echo "OUTPUT_DIRECTORY=$(BUILDDIR)/doc/" ) | doxygen -
install-doc: doc
mkdir -p $(DESTDIR)$(PREFIX)/share/villas/node/doc/
cp -R $(BUILDDIR)/doc/html/* $(DESTDIR)$(PREFIX)/share/villas/node/doc/
clean-doc:
rm -rf $(BUILDDIR)/doc/
.PHONY: doc install-doc clean-doc

View file

@ -1,7 +1,7 @@
# Makefile.
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
etc:
install-etc: | $(DESTDIR)/etc/villas/node/
install -D -t $(DESTDIR)/etc/villas/node $(SRCDIR)/etc/*.conf
clean-etc:
.PHONY: etc install-etc clean-etc
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMPONENT bin
DESTINATION etc/villas/node
FILES_MATCHING
PATTERN "*.conf"
PATTERN "*.json"
)

View file

@ -61,6 +61,27 @@ extern "C"{
#define KERNEL_VERSION_MAJ 3
#define KERNEL_VERSION_MIN 6
#cmakedefine BUILDID "@BUILDID@"
#cmakedefine V @V@
#cmakedefine PREFIX "@PREFIX@"
/* Available Features */
#cmakedefine WITH_WEB
#cmakedefine WITH_API
#cmakedefine WITH_HOOKS
#cmakedefine WITH_IO
/* OS Headers */
#cmakedefine HAS_EVENTFD
#cmakedefine HAS_SEMAPHORE
#cmakedefine LIBWEBSOCKETS_FOUND
#cmakedefine HDF5_FOUND
#cmakedefine PROTOBUF_FOUND
#cmakedefine LIBNL3_ROUTE_FOUND
#cmakedefine LIBCONFIG_FOUND
#ifdef __cplusplus
}
#endif

View file

@ -24,7 +24,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
/** @addtogroup kernel Kernel @{ */
/** @addtogroup kernel Kernel
* @{
*/
#pragma once

View file

@ -21,7 +21,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
/** @addtogroup kernel Kernel @{ */
/** @addtogroup kernel Kernel
* @{
*/
#pragma once

View file

@ -21,7 +21,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
/** @addtogroup kernel Kernel @{ */
/** @addtogroup kernel Kernel
* @{
*/
#pragma once

View file

@ -22,7 +22,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
/** @addtogroup kernel Kernel @{ */
/** @addtogroup kernel Kernel
* @{
*/
#pragma once

View file

@ -26,7 +26,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
/** @addtogroup kernel Kernel @{ */
/** @addtogroup kernel Kernel
* @{
*/
#pragma once

View file

@ -26,7 +26,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
/** @addtogroup kernel Kernel @{ */
/** @addtogroup kernel Kernel
* @{
*/
#pragma once

View file

@ -31,6 +31,12 @@
#include <stdint.h>
#ifdef __APPLE__
#include <net/ethernet.h>
#else
#include <netinet/ether.h>
#endif
#include <libiec61850/hal_ethernet.h>
#include <libiec61850/goose_receiver.h>
#include <libiec61850/sv_subscriber.h>

View file

@ -40,13 +40,13 @@
#include <villas/config.h>
#include <villas/io.h>
#ifdef WITH_LIBNL_ROUTE_30
#ifdef LIBNL3_ROUTE_FOUND
#include <villas/kernel/if.h>
#include <villas/kernel/nl.h>
#include <villas/kernel/tc.h>
#define WITH_NETEM
#endif /* WITH_LIBNL_ROUTE_30 */
#endif /* LIBNL3_ROUTE_FOUND */
#include <villas/node.h>

View file

@ -36,7 +36,7 @@ enum queue_signalled_flags {
QUEUE_SIGNALLED_AUTO = (0 << 0), /**< We will choose the best method available on the platform */
QUEUE_SIGNALLED_PTHREAD = (1 << 0),
QUEUE_SIGNALLED_POLLING = (2 << 0),
#ifdef __linux__
#ifdef HAS_EVENTFD
QUEUE_SIGNALLED_EVENTFD = (3 << 0),
#elif defined(__APPLE__)
QUEUE_SIGNALLED_PIPE = (3 << 0),

171
lib/CMakeLists.txt Normal file
View file

@ -0,0 +1,171 @@
# CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
add_compile_options(-fPIC)
set(INCLUDE_DIRS
${JANSSON_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
${CURL_INCLUDE_DIRS}
)
set(LIBRARIES
PkgConfig::JANSSON
${OPENSSL_LIBRARIES}
${CURL_LIBRARIES}
)
set(LIB_SRC
kernel/kernel.c
kernel/rt.c
sample.c
path.c
node.c
log.c
log_config.c
utils.c
super_node.c
hist.c
timing.c
pool.c
list.c
hash_table.c
queue.c
queue_signalled.c
memory.c
advio.c
plugin.c
node_type.c
stats.c
mapping.c
shmem.c
config_helper.c
crypt.c
compat.c
log_helper.c
task.c
buffer.c
table.c
bitset.c
signal.c
)
add_subdirectory(nodes)
list(APPEND WHOLE_ARCHIVES nodes)
if(LIBCONFIG_FOUND)
list(APPEND INCLUDE_DIRS ${LIBCONFIG_INCLUDE_DIRS})
list(APPEND LIBRARIES PkgConfig::LIBCONFIG)
endif()
if(WITH_IO)
list(APPEND LIB_SRC
io.c
format_type.c
)
add_subdirectory(formats)
list(APPEND WHOLE_ARCHIVES formats)
endif()
if(WITH_HOOKS)
list(APPEND LIB_SRC
hook.c
hook_type.c
)
add_subdirectory(hooks)
list(APPEND WHOLE_ARCHIVES hooks)
endif()
if(WITH_WEB)
list(APPEND LIB_SRC
web.c
)
list(APPEND INCLUDE_DIRS ${LIBWEBSOCKETS_INCLUDE_DIRS})
list(APPEND LIBRARIES websockets_shared)
endif()
if(WITH_API AND WITH_WEB)
list(APPEND LIB_SRC
api.c
)
add_subdirectory(api)
list(APPEND WHOLE_ARCHIVES 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})
if(APPLE)
target_link_libraries(villas PRIVATE -Wl,-all_load ${WHOLE_ARCHIVES} -Wl,-noall_load)
else()
target_link_libraries(villas PRIVATE -Wl,--whole-archive ${WHOLE_ARCHIVES} -Wl,--no-whole-archive)
endif()
set_target_properties(villas PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION}
)
install(
TARGETS villas
EXPORT VILLASNodeConfig
COMPONENT lib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(
DIRECTORY ../include/villas/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/villas
COMPONENT devel
FILES_MATCHING
PATTERN "*.h"
)
#install(
# EXPORT VILLASNodeConfig
# DESTINATION share/VILLASNode/cmake
#)
#export(
# TARGETS villas
# FILE VILLASNodeConfig.cmake
#)

View file

@ -1,64 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
SONAMES = villas villas-ext
LIBS = $(patsubst %, lib%, $(SONAMES))
LIB_CFLAGS += $(CFLAGS) -fPIC
include $(patsubst %, lib/Makefile.%.inc, $(SONAMES))
$(BUILDDIR)/include/villas/config.h: include/villas/config.h.in Makefile.config | $$(dir $$@)
cp $< $@
echo -e "\n" >> $@
echo "#define BUILDID \"$(BUILDID)\"" >> $@
echo "#define V $(V)" >> $@
echo "#define PREFIX \"$(PREFIX)\"" >> $@
echo -e "\n" >> $@
echo "/* Available Features */" >> $@
if (( $(WITH_WEB) )); then echo "#define WITH_WEB 1" >> $@; fi
if (( $(WITH_API) )); then echo "#define WITH_API 1" >> $@; fi
if (( $(WITH_HOOKS) )); then echo "#define WITH_HOOKS 1" >> $@; fi
if (( $(WITH_IO) )); then echo "#define WITH_IO 1" >> $@; fi
if (( $(WITH_CONFIG) )); then echo "#define WITH_CONFIG 1" >> $@; fi
for NODE in $(call escape,$(LIB_NODES)); do echo "#define WITH_NODE_$${NODE} 1" >> $@; done
for FORMAT in $(call escape,$(LIB_FORMATS)); do echo "#define WITH_FORMAT_$${FORMAT} 1" >> $@; done
for PKG in $(call escape,$(LIB_PKGS)); do echo "#define WITH_$${PKG} 1" >> $@; done
# Compile
$(BUILDDIR)/lib/%.o: lib/%.c $(BUILDDIR)/include/villas/config.h | $$(dir $$@)
$(CC) $(LIB_CFLAGS) -c $< -o $@
lib: $(patsubst %, lib%, $(SONAMES))
install-lib: $(patsubst %, install-lib%, $(SONAMES))
clean-lib: $(patsubst %, clean-lib%, $(SONAMES))
rm -rf $(BUILDDIR)/lib
rm -rf $(BUILDDIR)/include
.PHONY: lib install-lib clean-lib

View file

@ -1,54 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
LIBEXT_NAME = libvillas-ext
LIBEXT_ABI_VERSION = 1
LIBEXT = $(BUILDDIR)/$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION)
LIBEXT_SRCS += $(addprefix lib/, sample.c queue.c queue_signalled.c \
memory.c log.c shmem.c utils.c kernel/kernel.c list.c \
timing.c pool.c log_helper.c \
)
LIBEXT_LDFLAGS = -shared
LIBEXT_LDLIBS +=
ifeq ($(PLATFORM),Linux)
LIBEXT_LDLIBS += -ldl -lrt -Wl,-soname,$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION)
endif
LIBEXT_OBJS = $(patsubst %.c, $(BUILDDIR)/%.o, $(LIBEXT_SRCS))
$(LIBEXT_NAME): $(LIBEXT)
$(LIBEXT): $(LIBEXT_OBJS)
$(CC) $(LIBEXT_LDFLAGS) -o $@ $^ $(LIBEXT_LDLIBS)
ln -srf $@ $(BUILDDIR)/$(LIBEXT_NAME).so
install-libvillas-ext: libvillas-ext
install -m 0755 -D -T $(LIBEXT) $(DESTDIR)$(PREFIX)/lib/$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION)
ln -srf $(DESTDIR)$(PREFIX)/lib/$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION) $(DESTDIR)$(PREFIX)/lib/$(LIBEXT_NAME).so
clean-libvillas-ext:
rm -f $(LIBEXT)
.PHONY: install-libvillas-ext clean-libvillas-ext $(LIBEXT_NAME)

View file

@ -1,94 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
LIB_NAME = libvillas
LIB_ABI_VERSION = 1
LIB = $(BUILDDIR)/$(LIB_NAME).so.$(LIB_ABI_VERSION)
# Object files for libvillas
LIB_SRCS += $(addprefix lib/kernel/, kernel.c rt.c) \
$(addprefix lib/, sample.c path.c node.c hook.c log.c log_config.c \
utils.c super_node.c hist.c timing.c pool.c list.c queue.c \
queue_signalled.c memory.c advio.c plugin.c node_type.c stats.c \
mapping.c shmem.c config_helper.c crypt.c compat.c \
log_helper.c task.c buffer.c table.c bitset.c signal.c \
hash_table.c \
)
LIB_LDFLAGS += -shared
LIB_LDLIBS += $(LDLIBS)
ifeq ($(PLATFORM),Linux)
LIB_LDLIBS += -ldl -lrt -Wl,-soname,$(LIB_NAME).so.$(LIB_ABI_VERSION)
endif
LIB_PKGS += openssl libcurl
include lib/nodes/Makefile.inc
ifeq ($(WITH_IO),1)
LIB_SRCS += lib/io.c lib/format_type.c
include lib/formats/Makefile.inc
endif
ifeq ($(WITH_HOOKS),1)
LIB_SRCS += lib/hook.c lib/hook_type.c
include lib/hooks/Makefile.inc
endif
ifeq ($(WITH_WEB),1)
LIB_SRCS += lib/web.c
LIB_PKGS += libwebsockets
endif
ifeq ($(WITH_API),1)
LIB_SRCS += lib/api.c
include lib/api/Makefile.inc
endif
LIB_SRCS += $(patsubst %, lib/nodes/%.c, $(LIB_NODES))
LIB_SRCS += $(patsubst %, lib/formats/%.c, $(LIB_FORMATS))
# Add flags by pkg-config
LIB_LDLIBS += $(shell $(PKGCONFIG) --libs $(LIB_PKGS))
LIB_CFLAGS += $(shell $(PKGCONFIG) --cflags $(LIB_PKGS))
LIB_OBJS = $(patsubst %.c, $(BUILDDIR)/%.o, $(LIB_SRCS))
$(LIB_NAME): $(LIB)
# Link
$(LIB): $(LIB_OBJS)
$(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS)
ln -srf $@ $(BUILDDIR)/$(LIB_NAME).so
# Install
install-libvillas: libvillas | $(DESTDIR)$(PREFIX)/include/villas/
install -m 0755 -D -T $(LIB) $(DESTDIR)$(PREFIX)/lib/$(LIB_NAME).so.$(LIB_ABI_VERSION)
install -m 0644 -D -t $(DESTDIR)$(PREFIX)/include/villas/ include/villas/*.h
ln -srf $(DESTDIR)$(PREFIX)/lib/$(LIB_NAME).so.$(LIB_ABI_VERSION) $(DESTDIR)$(PREFIX)/lib/$(LIB_NAME).so
if [ "$(PLATFORM)" == "Linux" ]; then ldconfig; fi
clean-libvillas:
rm -f $(LIB)
.PHONY: install-libvillas clean-libvillas $(LIB_NAME)

View file

@ -1,7 +1,8 @@
# Makefile.
# CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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,10 +21,25 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
LIB_SRCS += $(addprefix lib/hooks/, convert.c decimate.c drop.c jitter_calc.c \
map.c restart.c shift_seq.c shift_ts.c \
skip_first.c stats.c ts.c limit_rate.c scale.c)
set(INCLUDE_DIRS
${OPENSSL_INCLUDE_DIR}
)
ifeq ($(WITH_IO),1)
LIB_SRCS += lib/hooks/print.c
endif
set(LIBRARIES
${OPENSSL_LIBRARIES}
)
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(api STATIC ${API_SRC})
target_include_directories(api PUBLIC ${INCLUDE_DIRS})
target_link_libraries(api INTERFACE ${LIBRARIES})

View file

@ -26,7 +26,7 @@
#include <villas/config_helper.h>
#include <villas/utils.h>
#ifdef WITH_CONFIG
#ifdef LIBCONFIG_FOUND
static int json_to_config_type(int type)
{
@ -143,7 +143,7 @@ int json_to_config(json_t *json, config_setting_t *parent)
return 0;
}
#endif /* WITH_CONFIG */
#endif /* LIBCONFIG_FOUND */
void json_object_extend_key_value(json_t *obj, const char *key, const char *value)
{

View file

@ -0,0 +1,92 @@
# CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
set(FORMAT_SRC
json.c
json_reserve.c
villas_binary.c
villas_human.c
csv.c
raw.c
msg.c
)
set(INCLUDE_DIRS
${OPENSSL_INCLUDE_DIR}
)
set(LIBRARIES
${OPENSSL_LIBRARIES}
)
if(DEFINED PROTOBUF_COMPILER)
add_custom_target(protobuf ALL
COMMAND ${PROTOBUF_COMPILER}
--python_out=${CMAKE_CURRENT_BINARY_DIR}
#--php_out=${CMAKE_BINARY_DIR}
--js_out=${CMAKE_CURRENT_BINARY_DIR}
--cpp_out=${CMAKE_CURRENT_BINARY_DIR}
villas.proto
DEPENDS villas.proto
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
if(DEFINED PROTOBUFC_COMPILER)
add_custom_target(protobuf-c ALL
COMMAND ${PROTOBUFC_COMPILER}
--c_out=${CMAKE_CURRENT_BINARY_DIR}
villas.proto
DEPENDS villas.proto
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_dependencies(protobuf protobuf-c)
endif()
# Enable Google Protobuf format
if(ProtobufC_FOUND)
list(APPEND FORMAT_SRC
protobuf.c
${CMAKE_CURRENT_BINARY_DIR}/villas.pb-c.c
)
list(APPEND INCLUDE_DIRS
${PROTOBUFC_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
)
list(APPEND LIBRARIES
${PROTOBUFC_LIBRARIES}
)
set_source_files_properties(villas.pb-c.h villas.pb-c.c
PROPERTIES
GENERATED TRUE
)
add_dependencies(formats protobuf-c)
endif()
add_library(formats STATIC ${FORMAT_SRC})
target_include_directories(formats PUBLIC ${INCLUDE_DIRS})
target_link_libraries(formats INTERFACE ${LIBRARIES})

View file

@ -1,41 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
LIB_FORMATS += json json_reserve villas_binary villas_human csv raw
LIB_SRCS += lib/formats/msg.c
# Enable Google Protobuf format
ifeq ($(WITH_FORMAT_PROTOBUF),1)
ifeq ($(shell $(PKGCONFIG) libprotobuf-c; echo $$?),0)
LIB_SRCS += lib/formats/protobuf.c lib/formats/villas.pb-c.c
LIB_PKGS += libprotobuf-c
LIB_FORMATS += protobuf
endif
endif
%.pb-c.c %.pb-c.h: %.proto
protoc-c --proto_path=$(SRCDIR) --c_out=$(SRCDIR) --dependency_out=$(BUILDDIR)/$*.d $(realpath $^)
$(BUILDDIR)/%.pb-c.o: LIB_CFLAGS += -I$(SRCDIR)
$(BUILDDIR)/lib/formats/protobuf.o: LIB_CFLAGS += -I$(SRCDIR)/lib/formats
$(BUILDDIR)/lib/formats/protobuf.o: lib/formats/villas.pb-c.h

55
lib/hooks/CMakeLists.txt Normal file
View file

@ -0,0 +1,55 @@
# CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
set(INCLUDE_DIRS
${JANSSON_INCLUDE_DIRS}
)
set(LIBRARIES
PkgConfig::JANSSON
)
set(HOOK_SRC
convert.c
decimate.c
drop.c
jitter_calc.c
map.c
restart.c
shift_seq.c
shift_ts.c
skip_first.c
stats.c
ts.c
limit_rate.c
scale.c
)
if(WITH_IO)
list(APPEND HOOK_SRC
print.c
)
endif()
add_library(hooks STATIC ${HOOK_SRC})
target_include_directories(hooks PUBLIC ${INCLUDE_DIRS})
target_link_libraries(hooks INTERFACE ${LIBRARIES})

View file

@ -27,6 +27,7 @@
#include <time.h>
#include <unistd.h>
#include <syslog.h>
#include <signal.h>
#include <villas/config.h>
#include <villas/log.h>

131
lib/nodes/CMakeLists.txt Normal file
View file

@ -0,0 +1,131 @@
# CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
set(INCLUDE_DIRS
${JANSSON_INCLUDE_DIRS}
)
set(LIBRARIES
PkgConfig::JANSSON
)
set(NODE_SRC
influxdb.c
stats.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
cbuilder.c
)
endif()
# Enable shared memory node-type
if(HAS_SEMAPHORE AND HAS_MMAN)
list(APPEND NODE_SRC shmem.c)
if(CMAKE_SUSTEM_NAME STREQUAL Linux)
list(APPEND LIBRARIES rt)
endif()
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(nodes STATIC ${NODE_SRC})
target_include_directories(nodes PUBLIC ${INCLUDE_DIRS})
target_link_libraries(nodes LINK_PRIVATE ${LIBRARIES})

View file

@ -1,166 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
# Enabled loopback node-type
ifeq ($(WITH_NODE_LOOPBACK),1)
LIB_NODES += loopback
endif
# Enabled Cbuilder node-type
ifeq ($(WITH_NODE_CBUILDER),1)
LIB_NODES += cbuilder
endif
# Enable InfluxDB node-type
ifeq ($(WITH_NODE_INFLUXDB),1)
LIB_NODES += influxdb
endif
# Enable stats node-type
ifeq ($(WITH_NODE_STATS),1)
LIB_NODES += stats
endif
# Enable file node-type
ifeq ($(WITH_NODE_FILE),1)
LIB_NODES += file
WITH_IO = 1
endif
# Enable shared memory node-type
ifeq ($(WITH_NODE_SHMEM),1)
LIB_NODES += shmem
endif
# Enable signal generator node-type
ifeq ($(WITH_NODE_SIGNAL),1)
LIB_NODES += signal_generator
endif
# Enable RTT test node-tyoe
ifeq ($(WITH_NODE_TEST_RTT),1)
LIB_NODES += test_rtt
WITH_IO = 1
endif
# Enable IEC61850 node-types when libiec61850 is available
ifeq ($(WITH_NODE_IEC61850),1)
ifeq ($(shell $(PKGCONFIG) --atleast-version=1.2.0 libiec61850; echo $$?),0)
LIB_SRCS += lib/nodes/iec61850_sv.c
LIB_NODES += iec61850
LIB_PKGS += libiec61850
endif
endif
# Enable OPAL-RT Asynchronous Process support (will result in 32bit binary!!!)
ifeq ($(WITH_NODE_OPAL),1)
ifneq ($(wildcard $(SRCDIR)/thirdparty/libopal/include/opal/AsyncApi.h),)
LIB_CFLAGS += -I $(SRCDIR)/thirdparty/libopal/include/opal/
LIB_LDFLAGS += -L/lib/i386-linux-gnu/ -L/usr/lib/i386-linux-gnu/ -L$(SRCDIR)/thirdparty/libopal/
LIB_LDLIBS += -lOpalAsyncApiCore -lOpalCore -lOpalUtils -lirc
LIB_NODES += opal
# libOpalAsyncApi is a 32bit library. So we need to build everything in 32bit
CFLAGS += -m32
LDFLAGS += -m32
endif
endif
# Enable Socket node type when libnl3 is available
ifeq ($(WITH_NODE_SOCKET),1)
LIB_NODES += socket
WITH_IO = 1
# libnl3 is optional but required for network emulation and IRQ pinning
ifeq ($(shell $(PKGCONFIG) libnl-route-3.0; echo $$?),0)
LIB_SRCS += $(addprefix lib/kernel/, nl.c tc.c tc_netem.c if.c)
LIB_PKGS += libnl-route-3.0
endif
endif
# Enable nanomsg node type when libnanomsg is available
ifeq ($(WITH_NODE_NANOMSG),1)
ifeq ($(shell $(PKGCONFIG) nanomsg; echo $$?),0)
LIB_PKGS += nanomsg
LIB_NODES += nanomsg
WITH_IO = 1
else ifeq ($(shell $(PKGCONFIG) libnanomsg; echo $$?),0)
LIB_PKGS += libnanomsg
LIB_NODES += nanomsg
WITH_IO = 1
endif
endif
# Enable ZeroMQ node type when libzmq is available
ifeq ($(WITH_NODE_ZEROMQ),1)
ifeq ($(shell $(PKGCONFIG) libzmq; echo $$?),0)
LIB_PKGS += libzmq
LIB_NODES += zeromq
WITH_IO = 1
endif
endif
# Enable NGSI support
ifeq ($(WITH_NODE_NGSI),1)
ifeq ($(shell $(PKGCONFIG) libcurl; echo $$?),0)
LIB_PKGS += libcurl
LIB_NODES += ngsi
endif
endif
# Enable WebSocket support
ifeq ($(WITH_NODE_WEBSOCKET),1)
ifeq ($(shell $(PKGCONFIG) libwebsockets; echo $$?),0)
LIB_PKGS += libwebsockets
LIB_NODES += websocket
WITH_IO = 1
WITH_WEB = 1
endif
endif
# Enable AMQP support
ifeq ($(WITH_NODE_AMQP),1)
ifeq ($(shell $(PKGCONFIG) librabbitmq; echo $$?),0)
LIB_PKGS += librabbitmq
LIB_NODES += amqp
WITH_IO = 1
endif
endif
# Enable MQTT support
ifeq ($(WITH_NODE_MQTT),1)
ifneq ($(wildcard /usr/include/mosquitto.h),)
LIB_SRCS += lib/nodes/mqtt.c
LIB_NODES += mqtt
LIB_LDLIBS += -lmosquitto
WITH_IO = 1
endif
endif
# Enable Comedi support
ifeq ($(WITH_NODE_COMEDI),1)
ifeq ($(shell $(PKGCONFIG) comedilib; echo $$?),0)
LIB_PKGS += comedilib
LIB_SRCS += lib/nodes/comedi.c
LIB_NODES += comedi
endif
endif

View file

@ -25,7 +25,6 @@
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <netinet/ether.h>
#include "villas/nodes/iec61850_sv.h"
#include "villas/plugin.h"

View file

@ -27,7 +27,6 @@
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <netinet/ether.h>
#include "villas/nodes/iec61850_sv.h"
#include "villas/plugin.h"
@ -166,8 +165,14 @@ int iec61850_sv_parse(struct node *n, json_t *json)
if (interface)
i->interface = strdup(interface);
if (dst_address)
if (dst_address) {
#ifdef __APPLE__
struct ether_addr *ether = ether_aton(dst_address);
memcpy(&i->dst_address, ether, sizeof(struct ether_addr));
#else
ether_aton_r(dst_address, &i->dst_address);
#endif
}
if (json_pub) {
i->publisher.enabled = true;

View file

@ -22,6 +22,7 @@
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <errno.h>

View file

@ -188,11 +188,7 @@ int test_rtt_parse(struct node *n, json_t *cfg)
else
c->limit = 1000; /* default value */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
asprintf(&c->filename, "%s/%s_%d_%.0f.log", t->output, t->prefix, c->values, c->rate);
#pragma GCC diagnostic pop
c->filename = strf("%s/%s_%d_%.0f.log", t->output, t->prefix, c->values, c->rate);
list_push(&t->cases, c);
}

View file

@ -589,7 +589,7 @@ int path_parse(struct path *p, json_t *cfg, struct list *nodes)
}
}
#if WITH_HOOKS
#ifdef WITH_HOOKS
if (json_hooks) {
ret = hook_parse_list(&p->hooks, json_hooks, p, NULL);
if (ret)

View file

@ -21,10 +21,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
#include <villas/config.h>
#include <villas/queue_signalled.h>
#include <villas/log.h>
#ifdef __linux__
#ifdef HAS_EVENTFD
#include <sys/eventfd.h>
#endif
@ -83,7 +84,7 @@ int queue_signalled_init(struct queue_signalled *qs, size_t size, struct memtype
else if (qs->mode == QUEUE_SIGNALLED_POLLING) {
/* Nothing todo */
}
#ifdef __linux__
#ifdef HAS_EVENTFD
else if (qs->mode == QUEUE_SIGNALLED_EVENTFD) {
qs->eventfd = eventfd(0, 0);
if (qs->eventfd < 0)
@ -117,7 +118,7 @@ int queue_signalled_destroy(struct queue_signalled *qs)
else if (qs->mode == QUEUE_SIGNALLED_POLLING) {
/* Nothing todo */
}
#ifdef __linux__
#ifdef HAS_EVENTFD
else if (qs->mode == QUEUE_SIGNALLED_EVENTFD) {
ret = close(qs->eventfd);
if (ret)
@ -152,7 +153,7 @@ int queue_signalled_push(struct queue_signalled *qs, void *ptr)
else if (qs->mode == QUEUE_SIGNALLED_POLLING) {
/* Nothing todo */
}
#ifdef __linux__
#ifdef HAS_EVENTFD
else if (qs->mode == QUEUE_SIGNALLED_EVENTFD) {
int ret;
uint64_t incr = 1;
@ -191,7 +192,7 @@ int queue_signalled_push_many(struct queue_signalled *qs, void *ptr[], size_t cn
else if (qs->mode == QUEUE_SIGNALLED_POLLING) {
/* Nothing todo */
}
#ifdef __linux__
#ifdef HAS_EVENTFD
else if (qs->mode == QUEUE_SIGNALLED_EVENTFD) {
int ret;
uint64_t incr = 1;
@ -233,7 +234,7 @@ int queue_signalled_pull(struct queue_signalled *qs, void **ptr)
pthread_cond_wait(&qs->pthread.ready, &qs->pthread.mutex);
else if (qs->mode == QUEUE_SIGNALLED_POLLING)
continue; /* Try again */
#ifdef __linux__
#ifdef HAS_EVENTFD
else if (qs->mode == QUEUE_SIGNALLED_EVENTFD) {
int ret;
uint64_t cntr;
@ -282,7 +283,7 @@ int queue_signalled_pull_many(struct queue_signalled *qs, void *ptr[], size_t cn
pthread_cond_wait(&qs->pthread.ready, &qs->pthread.mutex);
else if (qs->mode == QUEUE_SIGNALLED_POLLING)
continue; /* Try again */
#ifdef __linux__
#ifdef HAS_EVENTFD
else if (qs->mode == QUEUE_SIGNALLED_EVENTFD) {
int ret;
uint64_t cntr;
@ -328,7 +329,7 @@ int queue_signalled_close(struct queue_signalled *qs)
else if (qs->mode == QUEUE_SIGNALLED_POLLING) {
/* Nothing todo */
}
#ifdef __linux__
#ifdef HAS_EVENTFD
else if (qs->mode == QUEUE_SIGNALLED_EVENTFD) {
int ret;
uint64_t incr = 1;
@ -356,7 +357,7 @@ int queue_signalled_close(struct queue_signalled *qs)
int queue_signalled_fd(struct queue_signalled *qs)
{
switch (qs->mode) {
#ifdef __linux__
#ifdef HAS_EVENTFD
case QUEUE_SIGNALLED_EVENTFD:
return qs->eventfd;
#elif defined(__APPLE__)

View file

@ -103,7 +103,7 @@ int super_node_parse_uri(struct super_node *sn, const char *uri)
/* Parse config */
sn->cfg = json_loadf(f, 0, &err);
if (sn->cfg == NULL) {
#ifdef WITH_CONFIG
#ifdef LIBCONFIG_FOUND
int ret;
config_t cfg;
@ -150,7 +150,7 @@ int super_node_parse_uri(struct super_node *sn, const char *uri)
config_destroy(&cfg);
#else
jerror(&err, "Failed to parse configuration file");
#endif /* WITH_CONFIG */
#endif /* LIBCONFIG_FOUND */
}
/* Close configuration file */

View file

@ -58,14 +58,14 @@ lws_callback_function websocket_protocol_cb;
.rx_buffer_size = 0
},
#endif /* WITH_API */
#ifdef WITH_NODE_WEBSOCKET
#ifdef LIBWEBSOCKETS_FOUND
{
.name = "live",
.callback = websocket_protocol_cb,
.per_session_data_size = sizeof(struct websocket_connection),
.rx_buffer_size = 0
},
#endif /* WITH_NODE_WEBSOCKET */
#endif /* LIBWEBSOCKETS_FOUND */
#if 0 /* not supported yet */
{
.name = "log",

56
packaging/CMakeLists.txt Normal file
View file

@ -0,0 +1,56 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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
@ONLY
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libvillas.pc
COMPONENT devel
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig
)
add_subdirectory(docker)

View file

@ -1,56 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
TAR_OPTS = --exclude-ignore-recursive=$(SRCDIR)/.distignore --transform='s|^\.|villas-node-$(VERSION_NUM)|' --show-transformed-names
TAR_VILLAS = $(BUILDDIR)/packaging/villas-node-$(VERSION_NUM)-$(RELEASE).tar.gz
DEPLOY_USER ?= deploy
DEPLOY_HOST ?= acs-os-fein-website
DEPLOY_PATH ?= /var/www/villas/node
packaging: rpm dist
deploy: deploy-dist deploy-rpm deploy-docker
# Source tarballs
dist: $(TAR_VILLAS)
$(TAR_VILLAS): | $$(dir $$@)
tar $(TAR_OPTS) -C $(SRCDIR) -czf $@ .
deploy-dist: $(TAR_VILLAS)
rsync $(TAR_VILLAS) $(DEPLOY_USER)@$(DEPLOY_HOST):$(DEPLOY_PATH)/src
deploy-rpm:
rsync -a --progress $(BUILDDIR)/../Linux-x86_64-release/packaging/rpm/RPMS/ $(DEPLOY_USER)@$(DEPLOY_HOST):/var/www/packages/redhat/
ssh $(DEPLOY_USER)@$(DEPLOY_HOST) createrepo /var/www/packages/redhat
clean-packaging:
rm -f $(BUILDDIR)/packaging/villas-node-$(VERSION_NUM).tar.gz
install-packaging:
.PHONY: packaging install-packaging clean-packaging deploy deploy-dist deploy-rpm dist $(TAR_VILLAS)
include packaging/rpm/Makefile.inc
include packaging/docker/Makefile.inc

View file

@ -0,0 +1,84 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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
--publish 2345:2345
--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
)
add_custom_target(run-docker-${SUFFIX}
COMMAND docker run ${DOCKER_RUN_OPTS} ${DOCKER_IMAGE}-${SUFFIX}:${DOCKER_TAG}
)
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}
)
add_dependencies(deploy-docker-${SUFFIX} docker-${SUFFIX})
add_dependencies(run-docker-${SUFFIX} docker-${SUFFIX})
endforeach()
# Special cases for 'docker'target
add_custom_target(run-docker
COMMAND docker run ${DOCKER_RUN_OPTS} ${DOCKER_IMAGE}:${DOCKER_TAG} node -h
)
add_custom_target(docker
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_dependencies(docker docker-app)
add_dependencies(deploy-docker deploy-docker-app)
add_dependencies(run-docker docker)

View file

@ -1,11 +1,11 @@
# Dockerfile for VILLASnode dependencies.
# Dockerfile
#
# This Dockerfile builds an image which contains all library dependencies
# and tools to build VILLASnode.
# However, VILLASnode itself it not part of the image.
# This image can be used for running VILLASnode
# by running:
# make docker
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC
# @copyright 2017-2018, Institute for Automation of Complex Power Systems, EONERC
# @license GNU General Public License (version 3)
#
# VILLASnode
@ -25,45 +25,29 @@
###################################################################################
ARG BUILDER_IMAGE=villas/node-dev
ARG DOCKER_TAG=latest
ARG GIT_REV=unknown
ARG GIT_BRANCH=unknown
ARG VERSION=unknown
ARG VARIANT=unknown
# This image is built by villas-node-git/packaging/docker/Dockerfile.dev
FROM villas/node-dev:develop AS builder
FROM $BUILDER_IMAGE AS builder
COPY . /villas-node/
COPY . /villas/
RUN rm -rf /villas-node/build
WORKDIR /villas-node
#RUN dnf -y install
RUN make -j2 rpm-villas-node
RUN rm -rf /villas/build && mkdir /villas/build
WORKDIR /villas/build
RUN cmake -DCPACK_GENERATOR=RPM ..
RUN make -j$(nproc) doc
RUN make -j$(nproc) package
FROM fedora:28
ARG GIT_REV=unkown
ARG GIT_BRANCH=unkown
ARG VERSION=unkown
ARG VARIANT=unkown
# Some of the dependencies are only available in our own repo
ADD https://packages.fein-aachen.org/redhat/fein.repo /etc/yum.repos.d/
# Usually the following dependecies would be resolved by dnf
# when installing villas-node.
# We add them here to utilise Dockers caching and layer feature
# in order reduce bandwidth and space usage.
RUN dnf -y install \
openssl \
libconfig \
libnl3 \
libcurl \
jansson \
iproute \
module-init-tools
ADD https://villas.fein-aachen.org/packages/villas.repo /etc/yum.repos.d/
COPY --from=builder /villas-node/build/Linux-x86_64-release/packaging/rpm/RPMS/x86_64/*.rpm /tmp/
COPY --from=builder /villas/build/*.rpm /tmp/
RUN dnf -y install /tmp/*.rpm
# For WebSocket / API access

View file

@ -6,10 +6,10 @@
#
# This image can be used for developing VILLASnode
# by running:
# make docker
# make docker-dev
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @copyright 2017, Institute for Automation of Complex Power Systems, EONERC
# @copyright 2017-2018, Institute for Automation of Complex Power Systems, EONERC
# @license GNU General Public License (version 3)
#
# VILLASnode
@ -30,17 +30,15 @@
FROM fedora:28
ARG GIT_REV=unkown
ARG GIT_BRANCH=unkown
ARG VERSION=unkown
ARG VARIANT=unkown
ARG GIT_REV=unknown
ARG GIT_BRANCH=unknown
ARG VERSION=unknown
ARG VARIANT=unknown
# Toolchain
RUN dnf -y install \
gcc gcc-c++ \
pkgconfig make cmake \
autoconf automake autogen libtool \
flex bison \
pkgconfig cmake make ninja-build \
texinfo git curl tar \
protobuf-compiler protobuf-c-compiler
@ -64,6 +62,11 @@ RUN pip install \
# Some of the dependencies are only available in our own repo
ADD https://packages.fein-aachen.org/redhat/fein.repo /etc/yum.repos.d/
# We need to use our own RPM packages of libwebsockets
# as the official ones do contain the CMake files
RUN dnf -y install --repo=villas \
libwebsockets-2.4.2
# Dependencies
RUN dnf -y install \
openssl openssl-devel \
@ -71,9 +74,9 @@ RUN dnf -y install \
libnl3-devel \
libcurl-devel \
jansson-devel \
libwebsockets-devel \
zeromq-devel \
nanomsg-devel \
protobuf-devel \
protobuf-c-devel \
libiec61850-devel \
librabbitmq-devel \

View file

@ -30,10 +30,10 @@
FROM centos:7
ARG GIT_REV=unkown
ARG GIT_BRANCH=unkown
ARG VERSION=unkown
ARG VARIANT=unkown
ARG GIT_REV=unknown
ARG GIT_BRANCH=unknown
ARG VERSION=unknown
ARG VARIANT=unknown
# Some of the dependencies are only available in our own repo
ADD https://villas.fein-aachen.org/packages/villas.repo /etc/yum.repos.d/

View file

@ -32,10 +32,10 @@
FROM ubuntu:xenial
#FROM debian:jessie
ARG GIT_REV=unkown
ARG GIT_BRANCH=unkown
ARG VERSION=unkown
ARG VARIANT=unkown
ARG GIT_REV=unknown
ARG GIT_BRANCH=unknown
ARG VERSION=unknown
ARG VARIANT=unknown
# Toolchain
RUN apt-get update && apt-get install -y \

View file

@ -1,74 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
DOCKER = docker
DOCKER_FILE ?= Dockerfile
DOCKER_IMAGE ?= villas/node
DOCKER_TAG ?= $(GIT_BRANCH)
DOCKER_TARGETS = docker-app docker-dev docker-dev-centos docker-dev-ubuntu
DOCKER_RUN_TARGETS = $(addprefix run-,$(DOCKER_TARGETS))
DOCKER_DEPLOY_TARGETS = $(addprefix deploy-,$(DOCKER_TARGETS))
ifneq ($(CI_COMMIT_TAG),)
DOCKER_OPTS += --tag $(DOCKER_IMAGE)-$*:$(CI_COMMIT_TAG)
endif
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 "$(SRCDIR):/villas"
# Special cases for 'docker'target
run-docker: run-docker-app
deploy-docker: deploy-docker-app
docker: docker-app
$(DOCKER) tag $(DOCKER_IMAGE)-app:$(DOCKER_TAG) $(DOCKER_IMAGE):$(DOCKER_TAG)
$(DOCKER) tag $(DOCKER_IMAGE)-app:$(DOCKER_TAG) $(DOCKER_IMAGE):latest
.PHONY: docker run-docker deploy-docker
$(DOCKER_DEPLOY_TARGETS): deploy-docker-%: docker-%
$(DOCKER) push $(DOCKER_IMAGE)-$*:$(DOCKER_TAG)
$(DOCKER_RUN_TARGETS): run-docker-%: docker-%
$(DOCKER) run $(DOCKER_RUN_OPTS) $(DOCKER_IMAGE)-$*:$(DOCKER_TAG)
$(DOCKER_TARGETS): docker-%: $(BUILDDIR)/packaging/docker/Image.%
# The docker build targets use the --iidfile option to write the newly build image
# id to an file. Make is using the modification timestamp of this file and the Dockerfile
# to determine when the image needs to be rebuild.
$(BUILDDIR)/packaging/docker/Image.%: packaging/docker/Dockerfile.% | $(BUILDDIR)/packaging/docker/
$(DOCKER) build \
--file $< --iidfile $@ \
--tag $(DOCKER_IMAGE)-$*:$(DOCKER_TAG) \
--tag $(DOCKER_IMAGE)-$*: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=${VERSION} \
--build-arg VARIANT=${VARIANT} \
$(DOCKER_OPTS) $(SRCDIR)
.PHONY: $(DOCKER_TARGETS) $(DOCKER_RUN_TARGETS) $(DOCKER_DEPLOY_TARGETS)

13
packaging/libvillas.pc.in Normal file
View file

@ -0,0 +1,13 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=@CMAKE_INSTALL_PREFIX@
libdir=@CMAKE_INSTALL_LIBDIR@
sharedlibdir=@CMAKE_INSTALL_LIBDIR@
includedir=@CMAKE_INSTALL_INCLUDEDIR@
Name: @PROJECT_NAME@
Description: @PROJECT_DESCRIPTION@
Version: @PROJECT_VERSION@
Requires:
Libs: -L${libdir} -L${sharedlibdir} -lz
Cflags: -I${includedir}

View file

@ -1,70 +0,0 @@
Name: libiec61850
Version: 1.2
Vendor: MZ Automation
Packager: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Release: 1%{?dist}
Summary: Open source libraries for IEC 61850 and IEC 60870-5-104
License: GPL-3.0
URL: https://github.com/mz-automation/libiec61850
#Source0: https://github.com/mz-automation/libiec61850/repository/archive.tar.gz?ref=v1.2.0
Source0: libiec61850_1.2.0.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: gcc cmake
%description
IEC 61850 is an international standard for communication systems in Substation Automation Systems (SAS) and management of Decentralized Energy Resources (DER).
It is seen as one of the communication standards of the emerging Smart Grid.
Despite of its complexity and other drawbacks that make it difficult to implement and to use, the protocol is the only one of its kind that is in widespread use by utility companies and equipment manufacturers.
The project libIEC61850 provides a server and client library for the IEC 61850/MMS, IEC 61850/GOOSE and IEC 61850-9-2/Sampled Values communication protocols written in C.
It is available under the GPLv3 license. With this library available everybody can now become easily familiar with IEC 61850.
A tabular overview of the provided IEC 61850 ACSI services is available on the project website.
The library is designed according to edition 2 of the IEC 61850 standard series, but should be compatible to edition 1 in most cases.
%package devel
Summary: Headers and libraries for building apps that use libiec61850
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
%description devel
The development headers for libiec61850.
%prep
%setup -q -n libiec61850_1.2.0/
%build
mkdir -p build
cd build
rm CMakeCache.txt
%cmake -DCMAKE_INSTALL_LIBDIR=${_libdir} -DBUILD_EXAMPLES=0 -DBUILD_PYTHON_BINDINGS=0 ..
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
cd build
make install DESTDIR=$RPM_BUILD_ROOT
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%clean
rm -rf $RPM_BUILD_ROOT
%files
%{_prefix}/lib/libiec61850.so.1.2.0
%{_prefix}/lib/libiec61850.so
%files devel
%{_includedir}/libiec61850/*
%{_prefix}/share/pkgconfig/libiec61850.pc
%{_prefix}/lib/libiec61850.a
%changelog
* Mon Nov 6 2017 Steffen Vogel <stvogel@eonerc.rwth-aachen.de
- Initial RPM release

View file

@ -1,157 +0,0 @@
# Don't create static libraries (unless we want to)
%bcond_with static
Name: nanomsg
Version: 1.0.0
Release: 40.master.20170523gitg5cc0074%{?dist}
Summary: A fast, scalable, and easy to use socket library
Group: System Environment/Libraries
License: MIT
URL: http://nanomsg.org/
Source0: nanomsg-1.0.0-40-g5cc0074.tar.gz
BuildRequires: rubygem-asciidoctor xmlto cmake
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%description
nanomsg is a socket library that provides several common communication
patterns. It aims to make the networking layer fast, scalable, and easy
to use. Implemented in C, it works on a wide range of operating systems
with no further dependencies.
The communication patterns, also called "scalability protocols", are
basic blocks for building distributed systems. By combining them you can
create a vast array of distributed applications.
%if %{with static}
%package static
Summary: Libraries for static linking of applications which will use nanomsg
Group: Development/Libraries
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
%description static
nanomsg is a socket library that provides several common communication
patterns. The nanomsg-static package includes static libraries needed to
link and develop applications using this library.
Most users will not need to install this package.
%endif
%package devel
Summary: Development files for the nanomsg socket library
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
This package contains files needed to develop applications using nanomsg,
a socket library that provides several common communication patterns.
%package utils
Summary: Command line interface for communicating with nanomsg
Group: Applications/Internet
%description utils
Includes nanocat, a simple utility for reading and writing to nanomsg
sockets and bindings, which can include local and remote connections.
%prep
%setup -q -n nanomsg-1.0.0-40-g5cc0074/
%build
# Enabling static library build disables the dynamic library.
# First configure and build the static library, then reconfigure and build
# the dynamic libs, tools and docs afterwards instead of patching CMake build files
%if %{with static}
%cmake -DNN_STATIC_LIB=ON -DNN_ENABLE_DOC=OFF -DNN_ENABLE_TEST=OFF -DNN_ENABLE_TOOLS=OFF .
make %{?_smp_mflags} V=1
%endif
%cmake -DNN_STATIC_LIB=OFF -DNN_ENABLE_DOC=ON -DNN_ENABLE_TEST=ON -DNN_ENABLE_TOOLS=ON .
make %{?_smp_mflags} V=1
%install
rm -fR %{buildroot}
make install DESTDIR="%{buildroot}"
%check
#make test LD_LIBRARY_PATH="%{buildroot}%{_libdir}" DESTDIR="%{buildroot}"
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%clean
rm -fR %{buildroot}
%files
%defattr(-,root,root)
%doc AUTHORS COPYING README.md
%{_libdir}/*.so.*
%if %{with static}
%files static
%defattr(-,root,root)
%{_libdir}/*.a*
%endif
%files devel
%defattr(-,root,root)
%{_docdir}/%{name}
%{_mandir}/man7/*
%{_mandir}/man3/*
%{_includedir}/*
%{_libdir}/*.so
%{_libdir}/pkgconfig/*.pc
%files utils
%defattr(-,root,root)
%{_mandir}/man1/*
%{_bindir}/*
%changelog
* Sat Apr 1 2017 Tarjei Knapstad <tarjei.knapstad@gmail.com> - 1.0.0-1
- Updated to 1.0.0 final release
- nanomsg moved to CMake, so this spec did too
- Changed source URL
- Moved contents of -doc package into -devel
- Removed conditional check, all tests should pass
- The nanocat symlink stuff is gone, nanocat is now a single binary with options
* Tue Oct 27 2015 Japheth Cleaver <cleaver@terabithia.org> 0.7-0.1.beta
- update to 0.7-beta release
* Fri Nov 14 2014 Japheth Cleaver <cleaver@terabithia.org> 0.5-0.1.beta
- update to 0.5-beta release
* Sun Jul 27 2014 Japheth Cleaver <cleaver@terabithia.org> 0.4-0.3.beta
- compile with correct Fedora flags
- move documentation back to base package
- spec file cleanups
* Thu Jul 17 2014 Japheth Cleaver <cleaver@terabithia.org> 0.4-0.2.beta
- drop the 'lib' prefix from package name
- remove explicit pkgconfig requires in nanomsg-devel
- move overview man pages to devel subpackage
- move html to doc subpackage
* Thu Jul 17 2014 Japheth Cleaver <cleaver@terabithia.org> 0.4-0.1.beta
- new "libnanomsg" package based on BZ#1012392, with current versioning
- devel and utils subpackages created, static lib a build conditional
- check section added as a build conditional
- ensure man pages for nanocat symlinks present
- disable RPATH in library
- License set to MIT

View file

@ -1,89 +0,0 @@
Name: villas-node
Version: §VERSION§
Vendor: Institute for Automation of Complex Power Systems
Packager: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Release: §RELEASE§%{?dist}
Summary: This is VILLASnode, a gateway for processing and forwardning simulation data between real-time simulators.
License: GPLv3
URL: https://git.rwth-aachen.de/VILLASframework/VILLASnode
Source0: villas-node-§VERSION§-§RELEASE§.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: gcc pkgconfig make
Requires: iproute module-init-tools
BuildRequires: openssl-devel libconfig-devel libnl3-devel libcurl-devel jansson-devel libwebsockets-devel zeromq-devel nanomsg-devel libiec61850-devel librabbitmq-devel mosquitto-devel comedilib-devel comedilib
Requires: openssl libconfig libnl3 libcurl jansson libwebsockets zeromq nanomsg libiec61850 librabbitmq mosquitto comedilib
%description
%package doc
Summary: HTML documentation for users and developers.
Group: Documentation
%package devel
Summary: Headers and libraries for building apps that use libvillas.
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
%description devel
The development headers for libvillas.
%description doc
%prep
%setup -q
%build
make DEBUG=1 PREFIX=/usr
%install
rm -rf %{?buildroot}
make DEBUG=1 PREFIX=/usr DESTDIR=%{?buildroot} install
make DEBUG=1 PREFIX=/usr DESTDIR=%{?buildroot} install-doc
%check
make DEBUG=1 run-unit-tests
make DEBUG=1 run-integration-tests
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%clean
rm -rf %{?buildroot}
%files
/usr/bin/rmsem
/usr/bin/rmshm
/usr/bin/villas
/usr/bin/villas-*
/usr/bin/conf2json
/usr/bin/zmq-keygen
/usr/lib/libvillas.so
/usr/lib/libvillas.so.*
/usr/lib/libvillas-ext.so
/usr/lib/libvillas-ext.so.*
/usr/share/villas/node/web/
/usr/share/villas/node/plugins/
%config /etc/villas/node/*.conf
%license COPYING.md
%files doc
%docdir /usr/share/villas/node/doc/
/usr/share/villas/node/doc/
%files devel
/usr/include/villas/
%changelog
* Fri Mar 17 2017 Steffen Vogel <stvogel@eonerc.rwth-aachen.de
- Initial RPM release

42
plugins/CMakeLists.txt Normal file
View file

@ -0,0 +1,42 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
# Plugins
link_libraries(villas)
include_directories("${CMAKE_SOURCE_DIR}/include")
add_definitions("-DVILLAS")
add_library(simple_circuit MODULE models/simple_circuit.c)
install(
TARGETS simple_circuit
COMPONENT plugins
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/villas/node/plugins
)
if(WITH_HOOKS)
add_library(example_hook MODULE hooks/example_hook.c)
install(
TARGETS example_hook
COMPONENT plugins
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/villas/node/plugins
)
endif()

View file

@ -1,55 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
# Plugins
PLUGINS = $(BUILDDIR)/simple_circuit.so
ifeq ($(WITH_HOOKS),1)
PLUGINS += $(BUILDDIR)/example_hook.so
endif
PLUGIN_CFLAGS = -fPIC -DVILLAS -I../include/villas
PLUGIN_LDFLAGS = -shared -L$(BUILDDIR)
PLUGIN_LDLIBS = -lvillas
# Dependencies for plugins
$(BUILDDIR)/example_hook.so: $(BUILDDIR)/plugins/hooks/example_hook.o
$(BUILDDIR)/simple_circuit.so: $(BUILDDIR)/plugins/models/simple_circuit.o
plugins: $(PLUGINS)
# Compile
$(BUILDDIR)/plugins/%.o: plugins/%.c | $$(dir $$@)
$(CC) $(CFLAGS) $(PLUGIN_CFLAGS) -c $< -o $@
# Link
$(PLUGINS):
$(CC) $(PLUGIN_LDFLAGS) -o $@ $^ $(PLUGIN_LDLIBS)
# Plugins are not installed to the system for now...
install-plugins: plugins | $(DESTDIR)$(PREFIX)/share/villas/node/plugins/
install -D -t $(DESTDIR)$(PREFIX)/share/villas/node/plugins $(PLUGINS)
clean-plugins:
rm -rf $(BUILDDIR)/plugins $(PLUGINS)
.PHONY: plugins install-plugins clean-plugins

60
src/CMakeLists.txt Normal file
View file

@ -0,0 +1,60 @@
# CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
# All executables link against libvillas
link_libraries(villas)
add_executable(villas-node villas-node.c)
add_executable(villas-test-rtt villas-test-rtt.c)
add_executable(villas-test-shmem villas-test-shmem.c)
install(
TARGETS villas-node villas-test-rtt villas-test-shmem
COMPONENT bin
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(WITH_IO)
add_executable(villas-test-cmp villas-test-cmp.c)
add_executable(villas-convert villas-convert.c)
add_executable(villas-pipe villas-pipe.c)
add_executable(villas-signal villas-signal.c)
target_link_libraries(villas-pipe PUBLIC Threads::Threads)
install(
TARGETS villas-convert villas-pipe villas-signal villas-test-cmp
COMPONENT bin
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endif()
if(WITH_IO AND WITH_HOOKS)
add_executable(villas-hook villas-hook.c)
install(
TARGETS villas-hook
COMPONENT bin
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endif()

View file

@ -1,66 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
# Executables
TARGETS = $(BUILDDIR)/villas-node \
$(BUILDDIR)/villas-test-rtt \
$(BUILDDIR)/villas-test-shmem \
$(BUILDDIR)/villas-convert
ifeq ($(WITH_IO),1)
ifeq ($(WITH_HOOKS),1)
TARGETS += $(BUILDDIR)/villas-hook
endif
TARGETS += $(BUILDDIR)/villas-pipe \
$(BUILDDIR)/villas-signal \
$(BUILDDIR)/villas-test-cmp
endif
SRC_LDLIBS = $(LDLIBS) -pthread -lm -lvillas
SRC_CFLAGS = $(CFLAGS)
SRC_LDFLAGS = $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
src: $(TARGETS)
$(TARGETS): $(BUILDDIR)/villas-%: $(BUILDDIR)/src/%.o
# Compile executable objects
$(BUILDDIR)/src/%.o: src/%.c | $$(dir $$@)
$(CC) $(SRC_CFLAGS) -c $< -o $@
# Build villas-shmem only with libvillas-ext (to ensure that libext contains everything needed)
$(BUILDDIR)/villas-shmem: $(BUILDDIR)/src/shmem.o libvillas-ext
$(CC) $(SRC_LDFLAGS) $(BUILDDIR)/src/shmem.o $(filter-out -lvillas,$(SRC_LDLIBS)) -lvillas-ext -o $@
# Link target executables
$(TARGETS): | $(LIBS)
$(CC) $(SRC_LDFLAGS) $^ $(SRC_LDLIBS) -o $@
# Install
install-src: src
install -m 0755 -D -t $(DESTDIR)$(PREFIX)/bin $(TARGETS)
clean-src:
rm -rf $(BUILDDIR)/src $(TARGETS)
.PHONY: src src-tests src-tests

View file

@ -341,13 +341,13 @@ check: if (optarg == endptr)
if (!node)
error("Node '%s' does not exist!", nodestr);
#ifdef WITH_NODE_WEBSOCKET
#ifdef LIBWEBSOCKETS_FOUND
/* Only start web subsystem if villas-pipe is used with a websocket node */
if (node->_vt->start == websocket_start) {
web_start(&sn.web);
api_start(&sn.api);
}
#endif /* WITH_NODE_WEBSOCKET */
#endif /* LIBWEBSOCKETS_FOUND */
if (reverse)
node_reverse(node);

View file

@ -1,7 +1,7 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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,25 +20,23 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
RPMDIR = $(BUILDDIR)/packaging/rpm
add_subdirectory(unit)
add_subdirectory(integration)
SPEC_VILLAS = $(BUILDDIR)/packaging/rpm/villas-node.spec
add_custom_target(tests
DEPENDS unit-tests integration-tests
)
rpm: rpm-villas-node
add_custom_target(run-tests
DEPENDS run-unit-tests run-integration-tests
)
rpm-villas-node: $(TAR_VILLAS) $(SPEC_VILLAS) | $(RPMDIR)/SOURCES/
cp $(TAR_VILLAS) $(RPMDIR)/SOURCES
rpmbuild -ba --define="_topdir $$(pwd)/$(RPMDIR)" $(BUILDDIR)/packaging/rpm/villas-node.spec
set(VALGRIND "valgrind --leak-check=full --show-leak-kinds=all --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/valgrind.supp")
# We patch version number and release fields of the spec file based on the current Git commit
$(SPEC_VILLAS): packaging/rpm/villas-node.spec | $$(dir $$@)
sed -e "s/§VERSION§/$(VERSION_NUM)/g" \
-e "s/§RELEASE§/$(RELEASE)/g" < $^ > $@
sign-rpm:
rpmsign $(RPMDIR)/RPMS/*/.rpm
clean-rpm:
rm -rf $(RPMDIR)
.PHONY: rpm clean-rpm rpm-libwebsockets rpm-libxil $(SPEC_VILLAS)
add_custom_target(run-valgrind
COMMAND ${VALGRIND} $<TARGET_FILE:villas-node> & sleep 2; kill %1
COMMAND ${VALGRIND} $<TARGET_FILE:villas-pipe> -t 2 ${CMAKE_SOURCE_DIR}/etc/websocket-loopback.conf ws1
COMMAND ${VALGRIND} $<TARGET_FILE:villas-signal> mixed -v 4 -l 10
COMMAND ${VALGRIND} $<TARGET_FILE:villas-hook> stats < <($<TARGET_FILE:villas-signal> mixed -l 5)
DEPENDS villas-node villas-pipe villas-signal villas-hook
)

View file

@ -1,43 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
include tests/unit/Makefile.inc
ifdef COVERAGE
include tests/unit/Makefile.gcov.inc
endif
include tests/integration/Makefile.inc
tests: unit-tests integration-tests
run-tests: run-unit-tests run-integration-tests run-valgrind
VALGRIND = valgrind --leak-check=full --show-leak-kinds=all --suppressions=$(SRCDIR)/tests/valgrind.supp
run-valgrind: src
$(VALGRIND) $(BUILDDIR)/villas-node & sleep 2; kill %1
$(VALGRIND) $(BUILDDIR)/villas-pipe -t 2 $(SRCDIR)/etc/websocket-loopback.conf ws1
$(VALGRIND) $(BUILDDIR)/villas-signal mixed -v 4 -l 10
$(VALGRIND) $(BUILDDIR)/villas-hook stats < <($(BUILDDIR)/villas-signal mixed -l 5)
.PHONY: tests run-tests run-valgrind

View file

@ -0,0 +1,33 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
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
)

57
tests/unit/CMakeLists.txt Normal file
View file

@ -0,0 +1,57 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
if(CRITERION_FOUND)
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
${CRITERION_LIBRARIES}
villas
Threads::Threads
)
add_custom_target(run-unit-tests
COMMAND $<TARGET_FILE:unit-tests> ${CRITERION_OPTS}
DEPENDS unit-tests
)
endif()

View file

@ -1,56 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
COVERAGE_TESTS = $(BUILDDIR)/unit-tests
COVERAGE_OBJS = $(LIB_OBJS) $(SRC_OBJS)
GCDAS = $(COVERAGE_OBJS:.o=.gcda)
GCNOS = $(COVERAGE_OBJS:.o=.gcno)
GCOVR_OPTS = --exclude $(SRCDIR)/include --root $(SRCDIR) --sort-percentage --print-summary
coverage: $(BUILDDIR)/coverage/index.html $(BUILDDIR)/coverage.xml $(BUILDDIR)/coverage.txt
$(BUILDDIR)/coverage.txt: $(addsuffix .gcdas,$(COVERAGE_TESTS)) | $$(dir $$@)
gcovr $(GCOVR_OPTS) -o $@
$(BUILDDIR)/coverage.xml: $(addsuffix .gcdas,$(COVERAGE_TESTS)) | $$(dir $$@)
gcovr $(GCOVR_OPTS) --xml --xml-pretty -o $@
$(BUILDDIR)/coverage/index.html: $(addsuffix .gcdas,$(COVERAGE_TESTS)) | $$(dir $$@)
gcovr $(GCOVR_OPTS) --html --html-details -o $@
# This is an intermediate target. It is used to run the test only once for all gcovr rules.
%.gcdas: %
@echo "Delete previous coverage information"
rm -f $(GCDAS)
@echo "Run $< for collecting coverage information (.gcda)"
$^ $(CRITERION_OPTS)
clean-coverage:
rm -rf $(BUILDDIR)/coverage $(BUILDDIR)/coverage.txt $(BUILDDIR)/coverage.xml
rm -f $(GCDAS)
install-coverage:
.INTERMEDIATE: $(addsuffix .gcdas,$(COVERAGE_TESTS))
.PHONY: coverage gcda clean-coverage install-coverage

View file

@ -1,49 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
TEST_SRCS = $(wildcard tests/unit/*.c)
TEST_OBJS = $(patsubst %.c,$(BUILDDIR)/%.o,$(TEST_SRCS))
TEST_CFLAGS = $(CFLAGS)
TEST_LDFLAGS = $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
TEST_LDLIBS = $(LDLIBS) -lcriterion -lvillas -pthread -ljansson
unit-tests: $(BUILDDIR)/unit-tests
run-unit-tests: tests
$(BUILDDIR)/unit-tests $(CRITERION_OPTS)
# Compile
$(BUILDDIR)/tests/unit/%.o: tests/unit/%.c $(BUILDDIR)/include/villas/config.h | $$(dir $$@)
$(CC) $(TEST_CFLAGS) -c $< -o $@
# Link
$(BUILDDIR)/unit-tests: $(TEST_OBJS) $(LIB)
$(CC) $(TEST_LDFLAGS) $^ $(TEST_LDLIBS) -o $@
# Tests are not installed
install-tests:
clean-tests:
rm -rf $(BUILDDIR)/tests $(BUILDDIR)/testsuite
.PHONY: unit-tests install-unit-tests clean-unit-tests run-unit-tests

View file

@ -22,7 +22,7 @@
#include <criterion/criterion.h>
#ifdef WITH_LIBCONFIG
#ifdef LIBCONFIG_FOUND
#include <jansson.h>
#include <libconfig.h>
@ -117,4 +117,4 @@ Test(utils, json_to_config)
json_decref(json);
}
#endif
#endif /* LIBCONFIG_FOUND */

View file

@ -39,10 +39,10 @@
#define NUM_VALUES 10
static char formats[][32] = {
#ifdef WITH_FORMAT_HDF5
#ifdef LIBHDF5_FOUND
"hdf5",
#endif
#ifdef WITH_FORMAT_PROTOBUF
#ifdef LIBPROTOBUF_FOUND
"protobuf",
#endif
"raw.int8",

61
tools/CMakeLists.txt Normal file
View file

@ -0,0 +1,61 @@
# CMakeLists.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
if(LIBCONFIG_FOUND)
add_executable(conf2json conf2json.c)
target_link_libraries(conf2json PUBLIC villas)
list(APPEND TOOLS conf2json)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
add_executable(rmshm rmshm.c)
target_link_libraries(rmshm PUBLIC Threads::Threads rt)
add_executable(rmsem rmsem.c)
target_link_libraries(rmsem PUBLIC Threads::Threads rt)
list(APPEND TOOLS rmsem rmshm)
endif()
if(LIBZMQ_FOUND)
add_executable(zmq-keygen zmq-keygen.c)
target_include_directories(zmq-keygen PUBLIC ${LIBZMQ_INCLUDE_DIRS})
target_link_libraries(zmq-keygen PUBLIC PkgConfig::LIBZMQ)
list(APPEND TOOLS zmq-keygen)
endif()
install(
TARGETS ${TOOLS}
COMPONENT tools
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(
PROGRAMS villas.sh
COMPONENT bin
DESTINATION ${CMAKE_INSTALL_BINDIR}
RENAME villas
)

View file

@ -1,61 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
ifeq ($(WITH_CONFIG),1)
ifeq ($(shell $(PKGCONFIG) libconfig; echo $$?),0)
TOOLS += $(BUILDDIR)/conf2json
endif
endif
TOOLS_CFLAGS = $(CFLAGS)
TOOLS_LDLIBS = $(LDLIBS) -lconfig -ljansson -lvillas
TOOLS_LDFLAGS = $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
ifeq ($(shell $(PKGCONFIG) libzmq; echo $$?),0)
TOOLS += $(BUILDDIR)/zmq-keygen
TOOLS_CFLAGS += $(shell $(PKGCONFIG) --cflags libzmq)
TOOLS_LDLIBS += $(shell $(PKGCONFIG) --libs libzmq)
endif
ifeq ($(IS_LINUX),1)
TOOLS += $(BUILDDIR)/rmshm $(BUILDDIR)/rmsem
TOOLS_LDLIBS += -lrt -pthread
endif
# Compile executable objects
$(BUILDDIR)/tools/%.o: tools/%.c | $$(dir $$@)
$(CC) $(TOOLS_CFLAGS) -c $< -o $@
# Link target executables
$(TOOLS): $(BUILDDIR)/%: $(BUILDDIR)/tools/%.o | $(LIBS)
$(CC) $(TOOLS_LDFLAGS) $^ $(TOOLS_LDLIBS) -o $@
tools: $(TOOLS)
clean-tools:
rm -rf $(BUILDDIR)/tools $(TOOLS)
install-tools: $(TOOLS)
install -m 0755 tools/villas.sh $(DESTDIR)$(PREFIX)/bin/villas
install -m 0755 -D -t $(DESTDIR)$(PREFIX)/bin $(TOOLS)
.PHONY: tools clean-tools install-tools

View file

@ -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

27
web/CMakeLists.txt Normal file
View file

@ -0,0 +1,27 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
install(
DIRECTORY socket/
COMPONENT bin
DESTINATION share/villas/node/web
)

View file

@ -1,29 +0,0 @@
# Makefile.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @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 <http://www.gnu.org/licenses/>.
###################################################################################
install-web:
mkdir -p $(DESTDIR)$(PREFIX)/share/villas/node/web/
cp -R $(SRCDIR)/web/socket/* $(DESTDIR)$(PREFIX)/share/villas/node/web/
clean-web:
.PHONY: web install-web clean-web