diff --git a/Makefile b/Makefile index fe0220986..a29611331 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ ################################################################################### # Project modules -MODULES = lib libext plugins src tests thirdparty tools packaging doc etc web +MODULES = lib plugins src tests thirdparty tools packaging doc etc web # Default prefix for install target PREFIX ?= /usr/local diff --git a/lib/Makefile.inc b/lib/Makefile.inc index 81ae0a760..ca914f5ff 100644 --- a/lib/Makefile.inc +++ b/lib/Makefile.inc @@ -1,132 +1,25 @@ -LIB_NAME = libvillas -LIBEXT_NAME = libvillas-ext -LIB_ABI_VERSION = 1 -LIBEXT_ABI_VERSION = 1 +SONAMES = villas villas-ext -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) \ - $(addprefix lib/kernel/, kernel.c rt.c) \ - $(addprefix lib/, sample.c path.c node.c hook.c \ - log.c utils.c super_node.c hist.c timing.c pool.c \ - list.c queue.c queue_signalled.c memory.c advio.c web.c api.c \ - plugin.c node_type.c stats.c mapping.c sample_io.c shmem.c \ - json.c crypt.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 \ - plugin.c timing.c) +LIBS = $(patsubst %, $(BUILDDIR)/lib%.so, $(SONAMES)) 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 = -ldl -lrt -Wl,-soname,$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION) -include lib/hooks/Makefile.inc -include lib/apis/Makefile.inc --include lib/fpga/Makefile.inc -LIB_PKGS = openssl - -######## Node types ######## - -# Enable Socket node type when libnl3 is available -ifndef WITHOUT_SOCKET -ifeq ($(shell pkg-config libnl-route-3.0; echo $$?),0) - LIB_SRCS += $(addprefix lib/nodes/, socket.c) - LIB_SRCS += $(addprefix lib/kernel/, nl.c tc.c if.c) - LIB_SRCS += $(addprefix lib/, msg.c) - LIB_PKGS += libnl-route-3.0 -endif -endif - -# Enable VILLASfpga support when libxil is available -ifndef WITHOUT_FPGA -ifeq ($(shell pkg-config libxil; echo $$?),0) - LIB_SRCS += $(addprefix lib/nodes/, fpga.c) - LIB_SRCS += $(addprefix lib/kernel/, pci.c vfio.c) - PKGS += libxil -endif -endif - -# Enable NGSI support -ifndef WITHOUT_NGSI -ifeq ($(shell pkg-config libcurl jansson; echo $$?),0) - LIB_SRCS += lib/nodes/ngsi.c - LIB_PKGS += libcurl jansson -endif -endif - -# Enable WebSocket support -ifndef WITHOUT_WEBSOCKETS -ifeq ($(shell pkg-config libwebsockets jansson; echo $$?),0) - LIB_SRCS += lib/nodes/websocket.c - LIB_PKGS += libwebsockets jansson -endif -endif - -# Enable OPAL-RT Asynchronous Process support (will result in 32bit binary!!!) -ifdef WITH_OPAL -ifneq (,$(wildcard thirdparty/opal/include/AsyncApi.h)) - LIB_OBJS += opal.o - - LIB_CFLAGS += -I thirdparty/opal/include - LIB_LDFLAGS += -L/lib/i386-linux-gnu/ -L/usr/lib/i386-linux-gnu/ -Lthirdparty/opal/lib/redhawk/ - LIB_LDLIBS += -lOpalAsyncApiCore -lOpalCore -lOpalUtils -lirc - - # libOpalAsyncApi is a 32bit library. So we need to build everything in 32bit - CFLAGS += -m32 - LDFLAGS += -m32 - BUILDDIR := $(BUILDDIR)32 -endif -endif +-include $(patsubst %, lib/Makefile.%.inc, $(SONAMES)) # Add flags by pkg-config LIB_CFLAGS += $(shell pkg-config --cflags ${LIB_PKGS}) -LIB_LDLIBS += $(shell pkg-config --libs ${LIB_PKGS}) - -LIB_OBJS = $(patsubst %.c, $(BUILDDIR)/%.o, $(LIB_SRCS)) - -lib: $(LIB) - -# Link -$(LIB): $(LIB_OBJS) - $(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS) - ln -srf $@ $(BUILDDIR)/$(LIB_NAME).so # Compile $(BUILDDIR)/lib/%.o: lib/%.c $(BUILDDIR)/defines | $$(dir $$@) $(CC) $(LIB_CFLAGS) -c $< -o $@ -# Install -install-lib: lib - 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 - ldconfig +lib: $(patsubst %, lib%, $(SONAMES)) -clean-lib: - rm -rf $(BUILDDIR)/lib $(LIB) +install-lib: $(patsubst %, install-lib%, $(SONAMES)) + +clean-lib: $(patsubst %, clean-lib%, $(SONAMES)) -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 +.PHONY: lib install-lib clean-lib diff --git a/lib/Makefile.villas-ext.inc b/lib/Makefile.villas-ext.inc new file mode 100644 index 000000000..4f513a106 --- /dev/null +++ b/lib/Makefile.villas-ext.inc @@ -0,0 +1,28 @@ +LIBEXT_NAME = libvillas-ext +LIBEXT_ABI_VERSION = 1 +LIBEXT = $(BUILDDIR)/$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION) + +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 \ + plugin.c timing.c \ + ) + +LIBEXT_LDFLAGS = -shared +LIBEXT_LDLIBS = -ldl -lrt -Wl,-soname,$(LIBEXT_NAME).so.$(LIBEXT_ABI_VERSION) + +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 -rf $(BUILDDIR)/lib $(LIBEXT) + +.PHONY: install-libvillas-ext clean-libvillas-ext $(LIBEXT_NAME) \ No newline at end of file diff --git a/lib/Makefile.villas.inc b/lib/Makefile.villas.inc new file mode 100644 index 000000000..89a6b3bd5 --- /dev/null +++ b/lib/Makefile.villas.inc @@ -0,0 +1,97 @@ +LIB_NAME = libvillas +LIB_ABI_VERSION = 1 +LIB = $(BUILDDIR)/$(LIB_NAME).so.$(LIB_ABI_VERSION) + +# Object files for libvillas +LIB_SRCS += $(addprefix lib/nodes/, file.c cbuilder.c shmem.c) \ + $(addprefix lib/kernel/, kernel.c rt.c) \ + $(addprefix lib/, sample.c path.c node.c hook.c \ + log.c utils.c super_node.c hist.c timing.c pool.c \ + list.c queue.c queue_signalled.c memory.c advio.c web.c api.c \ + plugin.c node_type.c stats.c mapping.c sample_io.c shmem.c \ + json.c crypt.c \ + ) + +LIB_LDFLAGS = -shared +LIB_LDLIBS = $(LDLIBS) -ldl -lrt -Wl,-soname,$(LIB_NAME).so.$(LIB_ABI_VERSION) + +LIB_PKGS = openssl + +######## Node types ######## + +# Enable Socket node type when libnl3 is available +ifndef WITHOUT_SOCKET +ifeq ($(shell pkg-config libnl-route-3.0; echo $$?),0) + LIB_SRCS += $(addprefix lib/nodes/, socket.c) + LIB_SRCS += $(addprefix lib/kernel/, nl.c tc.c if.c) + LIB_SRCS += $(addprefix lib/, msg.c) + LIB_PKGS += libnl-route-3.0 +endif +endif + +# Enable VILLASfpga support when libxil is available +ifndef WITHOUT_FPGA +ifeq ($(shell pkg-config libxil; echo $$?),0) + LIB_SRCS += $(addprefix lib/nodes/, fpga.c) + LIB_SRCS += $(addprefix lib/kernel/, pci.c vfio.c) + PKGS += libxil + + -include lib/fpga/Makefile.inc +endif +endif + +# Enable NGSI support +ifndef WITHOUT_NGSI +ifeq ($(shell pkg-config libcurl jansson; echo $$?),0) + LIB_SRCS += lib/nodes/ngsi.c + LIB_PKGS += libcurl jansson +endif +endif + +# Enable WebSocket support +ifndef WITHOUT_WEBSOCKETS +ifeq ($(shell pkg-config libwebsockets jansson; echo $$?),0) + LIB_SRCS += lib/nodes/websocket.c + LIB_PKGS += libwebsockets jansson +endif +endif + +# Enable OPAL-RT Asynchronous Process support (will result in 32bit binary!!!) +ifdef WITH_OPAL +ifneq (,$(wildcard thirdparty/opal/include/AsyncApi.h)) + LIB_OBJS += opal.o + + LIB_CFLAGS += -I thirdparty/opal/include + LIB_LDFLAGS += -L/lib/i386-linux-gnu/ -L/usr/lib/i386-linux-gnu/ -Lthirdparty/opal/lib/redhawk/ + LIB_LDLIBS += -lOpalAsyncApiCore -lOpalCore -lOpalUtils -lirc + + # libOpalAsyncApi is a 32bit library. So we need to build everything in 32bit + CFLAGS += -m32 + LDFLAGS += -m32 + BUILDDIR := $(BUILDDIR)32 +endif +endif + +# Add flags by pkg-config +LIB_LDLIBS += $(shell pkg-config --libs ${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 + 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 + ldconfig + +clean-libvillas: + rm -rf $(BUILDDIR)/lib $(LIB) + +.PHONY: install-libvillas clean-libvillas $(LIB_NAME) \ No newline at end of file diff --git a/src/Makefile.inc b/src/Makefile.inc index 4e434f365..6b282f708 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -37,7 +37,7 @@ $(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 +$(BUILDDIR)/villas-shmem: $(BUILDDIR)/src/shmem.o $(LIBS) libvillas-ext $(CC) $(SRC_LDFLAGS) $(BUILDDIR)/src/shmem.o $(filter-out -lvillas,$(SRC_LDLIBS)) -lvillas-ext -o $@ # Link target executables