diff --git a/Makefile b/Makefile index f3c682cce..53c5d6d67 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ V ?= 2 GIT_REV=$(shell git rev-parse --short HEAD) # Compiler and linker flags -LDLIBS = -pthread -lrt -lm -lconfig -lvillas +LDLIBS = -pthread -lrt -lm -lconfig -lvillas -ldl LIB_LDFLAGS = -shared diff --git a/etc/fpga.conf b/etc/fpga.conf index e78a84652..18728c56c 100644 --- a/etc/fpga.conf +++ b/etc/fpga.conf @@ -95,6 +95,10 @@ fpga = { ) } +plugins = [ + "./lib/cbmodels/simple_circuit.so" +] + nodes = { dma = { datamover = "dma_0"; diff --git a/lib/cfg.c b/lib/cfg.c index 1ac63d001..06a268de9 100644 --- a/lib/cfg.c +++ b/lib/cfg.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "utils.h" #include "list.h" @@ -83,6 +84,26 @@ int config_parse_global(config_setting_t *cfg, struct settings *set) config_setting_lookup_int(cfg, "priority", &set->priority); config_setting_lookup_int(cfg, "debug", &set->debug); config_setting_lookup_float(cfg, "stats", &set->stats); + + /* Load plugins */ + cfg_plugins = config_setting_get_member(cfg, "plugins"); + if (cfg) { + if (!config_setting_is_array(cfg_plugins)) + cerror(cfg_plugins, "Setting 'plugings' must be a list of strings"); + + for (int i = 0; i < config_setting_length(cfg_plugins); i++) { + void *handle; + const char *path; + + path = config_setting_get_string_elem(cfg_plugins, i); + if (!path) + cerror(cfg_plugins, "Setting 'plugings' must be a list of strings"); + + handle = dlopen(path, RTLD_NOW); + if (!handle) + error("Failed to load plugin %s", dlerror()); + } + } log_setlevel(set->debug, -1);