mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
160 lines
3.9 KiB
Nix
160 lines
3.9 KiB
Nix
# SPDX-FileCopyrightText: 2023 OPAL-RT Germany GmbH
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
{
|
|
# General configuration
|
|
src,
|
|
version,
|
|
withGpl ? true,
|
|
withAllExtras ? false,
|
|
withAllFormats ? false,
|
|
withAllHooks ? false,
|
|
withAllNodes ? false,
|
|
# Extra features
|
|
withExtraConfig ? withAllExtras,
|
|
withExtraGraphviz ? withAllExtras,
|
|
# Format-types
|
|
withFormatProtobuf ? withAllFormats,
|
|
# Hook-types
|
|
withHookLua ? withAllHooks,
|
|
# Node-types
|
|
withNodeAmqp ? withAllNodes,
|
|
withNodeComedi ? withAllNodes,
|
|
withNodeEthercat ? withAllNodes,
|
|
withNodeIec60870 ? withAllNodes,
|
|
withNodeIec61850 ? withAllNodes,
|
|
withNodeInfiniband ? withAllNodes,
|
|
withNodeKafka ? withAllNodes,
|
|
withNodeModbus ? withAllNodes,
|
|
withNodeMqtt ? withAllNodes,
|
|
withNodeNanomsg ? withAllNodes,
|
|
withNodeRedis ? withAllNodes,
|
|
withNodeRtp ? withAllNodes,
|
|
withNodeSocket ? withAllNodes,
|
|
withNodeTemper ? withAllNodes,
|
|
withNodeUldaq ? withAllNodes,
|
|
withNodeWebrtc ? withAllNodes,
|
|
withNodeZeromq ? withAllNodes,
|
|
# Minimal dependencies
|
|
cmake,
|
|
coreutils,
|
|
graphviz,
|
|
jq,
|
|
lib,
|
|
makeWrapper,
|
|
pkg-config,
|
|
stdenv,
|
|
# Optional dependencies
|
|
comedilib,
|
|
curl,
|
|
czmq,
|
|
ethercat,
|
|
gnugrep,
|
|
jansson,
|
|
lib60870,
|
|
libconfig,
|
|
libdatachannel,
|
|
libiec61850,
|
|
libmodbus,
|
|
libnl,
|
|
libre,
|
|
libsodium,
|
|
libuldaq,
|
|
libusb,
|
|
libuuid,
|
|
libwebsockets,
|
|
lua,
|
|
mosquitto,
|
|
nanomsg,
|
|
openssl,
|
|
pkgsBuildBuild,
|
|
protobufc,
|
|
protobufcBuildBuild ? pkgsBuildBuild.protobufc,
|
|
rabbitmq-c,
|
|
rdkafka,
|
|
rdma-core,
|
|
redis-plus-plus,
|
|
spdlog,
|
|
}:
|
|
stdenv.mkDerivation {
|
|
inherit src version;
|
|
pname = "villas";
|
|
outputs = [
|
|
"out"
|
|
"dev"
|
|
];
|
|
separateDebugInfo = true;
|
|
cmakeFlags =
|
|
[ ]
|
|
++ lib.optionals (!withGpl) [ "-DWITHOUT_GPL=ON" ]
|
|
++ lib.optionals withFormatProtobuf [ "-DCMAKE_FIND_ROOT_PATH=${protobufcBuildBuild}/bin" ];
|
|
postPatch = ''
|
|
patchShebangs --host ./tools
|
|
'';
|
|
postInstall = ''
|
|
if [ -d $out/include/villas/ ] && [ -d $dev/include/villas/ ]; then
|
|
mv $out/include/villas/* $dev/include/villas/
|
|
rm -d $out/include/villas
|
|
fi
|
|
wrapProgram $out/bin/villas \
|
|
--set PATH ${
|
|
lib.makeBinPath [
|
|
(placeholder "out")
|
|
gnugrep
|
|
coreutils
|
|
]
|
|
}
|
|
wrapProgram $out/bin/villas-api \
|
|
--set PATH ${
|
|
lib.makeBinPath [
|
|
coreutils
|
|
curl
|
|
jq
|
|
]
|
|
}
|
|
'';
|
|
nativeBuildInputs = [
|
|
cmake
|
|
makeWrapper
|
|
pkg-config
|
|
];
|
|
depsBuildBuild = lib.optionals withFormatProtobuf [ protobufcBuildBuild ];
|
|
buildInputs =
|
|
[
|
|
jansson
|
|
libwebsockets
|
|
libuuid
|
|
openssl
|
|
curl
|
|
spdlog
|
|
]
|
|
++ lib.optionals withExtraConfig [ libconfig ]
|
|
++ lib.optionals withExtraGraphviz [ graphviz ]
|
|
++ lib.optionals withFormatProtobuf [ protobufc ]
|
|
++ lib.optionals withHookLua [ lua ]
|
|
++ lib.optionals withNodeAmqp [ rabbitmq-c ]
|
|
++ lib.optionals withNodeComedi [ comedilib ]
|
|
++ lib.optionals withNodeEthercat [ ethercat ]
|
|
++ lib.optionals withNodeIec60870 [ lib60870 ]
|
|
++ lib.optionals withNodeIec61850 [ libiec61850 ]
|
|
++ lib.optionals withNodeInfiniband [ rdma-core ]
|
|
++ lib.optionals withNodeKafka [ rdkafka ]
|
|
++ lib.optionals withNodeModbus [ libmodbus ]
|
|
++ lib.optionals withNodeMqtt [ mosquitto ]
|
|
++ lib.optionals withNodeNanomsg [ nanomsg ]
|
|
++ lib.optionals withNodeRedis [ redis-plus-plus ]
|
|
++ lib.optionals withNodeRtp [ libre ]
|
|
++ lib.optionals withNodeSocket [ libnl ]
|
|
++ lib.optionals withNodeTemper [ libusb ]
|
|
++ lib.optionals withNodeUldaq [ libuldaq ]
|
|
++ lib.optionals withNodeWebrtc [ libdatachannel ]
|
|
++ lib.optionals withNodeZeromq [
|
|
czmq
|
|
libsodium
|
|
];
|
|
meta = with lib; {
|
|
mainProgram = "villas";
|
|
description = "a tool connecting real-time power grid simulation equipment";
|
|
homepage = "https://villas.fein-aachen.org/";
|
|
license = licenses.asl20;
|
|
};
|
|
}
|