From cc7ef950262e16a0e604d1f69356f7f7f991d41d Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sat, 15 Apr 2017 21:25:19 +0200
Subject: [PATCH] split library Makefile for libvillas and libvillas-ext

---
 Makefile                    |   2 +-
 lib/Makefile.inc            | 123 +++---------------------------------
 lib/Makefile.villas-ext.inc |  28 ++++++++
 lib/Makefile.villas.inc     |  97 ++++++++++++++++++++++++++++
 src/Makefile.inc            |   2 +-
 5 files changed, 135 insertions(+), 117 deletions(-)
 create mode 100644 lib/Makefile.villas-ext.inc
 create mode 100644 lib/Makefile.villas.inc

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