diff --git a/Makefile b/Makefile index dd3bdd921..92da5815b 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ ################################################################################### # Project modules -MODULES = lib plugins src tests thirdparty tools packaging doc etc web +MODULES = lib libext plugins src tests thirdparty tools packaging doc etc web # Default prefix for install target PREFIX ?= /usr/local @@ -132,4 +132,4 @@ clean: $(addprefix clean-,$(filter-out thirdparty doc,$(MODULES))) .PHONY: all everything clean install -include $(wildcard $(BUILDDIR)/**/*.d) --include $(addsuffix /Makefile.inc,$(MODULES)) \ No newline at end of file +-include $(addsuffix /Makefile.inc,$(MODULES)) diff --git a/lib/Makefile.inc b/lib/Makefile.inc index 79307906e..c44e997b9 100644 --- a/lib/Makefile.inc +++ b/lib/Makefile.inc @@ -1,7 +1,10 @@ LIB_NAME = libvillas +LIBEXT_NAME = libvillas-ext LIB_ABI_VERSION = 1 +LIBEXT_ABI_VERSION = 1 LIB = $(BUILDDIR)/$(LIB_NAME).so.$(LIB_ABI_VERSION) +LIBEXT = $(BUILDDIR)/$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION) # Object files for libvillas LIB_SRCS = $(addprefix lib/nodes/, file.c cbuilder.c shmem.c) \ @@ -12,10 +15,18 @@ LIB_SRCS = $(addprefix lib/nodes/, file.c cbuilder.c shmem.c) \ plugin.c node_type.c stats.c mapping.c sample_io.c shmem.c \ ) +LIBEXT_SRCS = $(addprefix lib/, sample.c node.c queue.c queue_signalled.c \ + memory.c shmem.c utils.c kernel/kernel.c log.c list.c sample_io.c \ + plugin.c timing.c) + LIB_CFLAGS = $(CFLAGS) -fPIC LIB_LDFLAGS = -shared LIB_LDLIBS = $(LDLIBS) -ldl -lrt -Wl,-soname,$(LIB_NAME).so.$(LIB_ABI_VERSION) +LIBEXT_CFLAGS = $(CFLAGS) -fPIC +LIBEXT_LDFLAGS = -shared +LIBEXT_LDLIBS = -ljansson -lcrypto -lrt -Wl,-soname,$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION) + -include lib/hooks/Makefile.inc -include lib/apis/Makefile.inc -include lib/fpga/Makefile.inc @@ -102,4 +113,19 @@ install-lib: lib clean-lib: rm -rf $(BUILDDIR)/lib $(LIB) -.PHONY: lib install-lib clean-lib $(BUILDDIR)/lib/defines +LIBEXT_OBJS = $(patsubst %.c, $(BUILDDIR)/%.o, $(LIBEXT_SRCS)) + +libext: $(LIBEXT) + +$(LIBEXT): $(LIBEXT_OBJS) + $(CC) $(LIBEXT_LDFLAGS) -o $@ $^ $(LIBEXT_LDLIBS) + ln -srf $@ $(BUILDDIR)/$(LIBEXT_NAME).so + +install-libext: libext + 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-libext: + rm -rf $(BUILDDIR)/lib $(LIBEXT) + +.PHONY: lib install-lib libext install-libext clean-lib $(BUILDDIR)/lib/defines diff --git a/src/Makefile.inc b/src/Makefile.inc index 7ec204d9a..4e434f365 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -2,7 +2,6 @@ TARGETS = $(BUILDDIR)/villas-node \ $(BUILDDIR)/villas-pipe \ $(BUILDDIR)/villas-signal \ - $(BUILDDIR)/villas-shmem \ $(BUILDDIR)/villas-test-rtt \ $(BUILDDIR)/villas-test-cmp \ $(BUILDDIR)/villas-hook @@ -26,7 +25,7 @@ ifeq ($(shell pkg-config libxil; echo $$?),0) endif endif -src: $(TARGETS) +src: $(TARGETS) $(BUILDDIR)/villas-shmem $(TARGETS): $(BUILDDIR)/villas-%: $(BUILDDIR)/src/%.o @@ -37,6 +36,10 @@ $(BUILDDIR)/villas-fpga: $(addprefix $(BUILDDIR)/src/,fpga-bench.o $(BENCH_OBJS) $(BUILDDIR)/src/%.o: src/%.c $(BUILDDIR)/defines | $$(dir $$@) $(CC) $(SRC_CFLAGS) -c $< -o $@ +# Build villas-shmem only with libext (to ensure that libext contains everything needed) +$(BUILDDIR)/villas-shmem: $(BUILDDIR)/src/shmem.o $(LIBS) libext + $(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 $@