From d0dc7e216e343b408a2e1939f1b07f0265d4c29b Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sun, 28 Aug 2016 23:55:11 -0400
Subject: [PATCH 01/45] replaced old queue with new MPMC implementation

---
 include/villas/queue.h | 134 ++++++++++++---------------
 lib/queue.c            | 204 +++++++++++++++++++++++------------------
 2 files changed, 175 insertions(+), 163 deletions(-)

diff --git a/include/villas/queue.h b/include/villas/queue.h
index feee51e4f..6663f2b09 100644
--- a/include/villas/queue.h
+++ b/include/villas/queue.h
@@ -1,93 +1,81 @@
-/** Lock-free Single-Producer Single-consumer (SPSC) queue.
+/** Lock-free Multiple-Producer Multiple-consumer (MPMC) queue.
  *
- * This datastructure queues void pointers in a FIFO style.
- * Every queue element has an associated reference count which is
- * used to tell wheater the queue is full or empty.
+ * Based on Dmitry Vyukov#s Bounded MPMC queue:
+ *   http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue
  *
- * Queue head and tail pointers are not part of this datastructure.
- * In combination with the reference counting, this enables multiple
- * readers each with its own head pointer.
- * Each reader will read the same data.
- *
- * @file
- * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
- * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
- *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
- *   Unauthorized copying of this file, via any medium is strictly prohibited. 
+ * @author Steffen Vogel <post@steffenvogel.de>
+ * @copyright 2016 Steffen Vogel
+ * @license BSD 2-Clause License
+ * 
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modiffication, are permitted provided that the following conditions are met:
+ * 
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef _QUEUE_H_
-#define _QUEUE_H_
+#ifndef _MPMC_QUEUE_H_
+#define _MPMC_QUEUE_H_
 
-#include <stddef.h>
 #include <stdint.h>
 #include <stdatomic.h>
 
-typedef uintmax_t qptr_t;
+#include "memory.h"
 
-struct queue {
-	        size_t size;	/**< Number of pointers in queue::array */
-	_Atomic int *refcnts;	/**< Reference counts to blocks in queue::array */
-	_Atomic int  readers;	/**< Initial reference count for pushed blocks */
+static size_t const cacheline_size = 64;
+typedef char cacheline_pad_t[cacheline_size];
 
-	void **pointers;	/**< Pointers to queue data */
+struct mpmc_queue {
+	cacheline_pad_t _pad0;	/**< Shared area: all threads read */
+	struct memtype const * mem;
+	size_t buffer_mask;
+	struct mpmc_queue_cell {
+		atomic_size_t sequence;
+		void *data;
+	} *buffer;
+	cacheline_pad_t	_pad1;	/**> Producer area: only producers read & write */
+	atomic_size_t	tail;	/**> Queue tail pointer */
+	cacheline_pad_t	_pad2;	/**> Consumer area: only consumers read & write */
+	atomic_size_t	head;	/**> Queue head pointer */
+	cacheline_pad_t	_pad3;	/**> @todo Why needed? */
 };
 
-/** Initiliaze a new queue and allocate memory. */
-int queue_init(struct queue *q, size_t size);
+/** Initialize MPMC queue */
+int mpmc_queue_init(struct mpmc_queue *q, size_t size, const struct memtype *mem);
 
-/** Release memory of queue. */
-void queue_destroy(struct queue *q);
+/** Desroy MPMC queue and release memory */
+int mpmc_queue_destroy(struct mpmc_queue *q);
 
-/** Increment the number of readers for this queue.
+/** Return estimation of current queue usage.
  *
- * Important: To garuantee thread-safety this function must by called by
- *            the (only) writer which holds \p tail.
- */
-void queue_reader_add(struct queue *q, qptr_t head, qptr_t tail);
+ * Note: This is only an estimation and not accurate as long other
+ *       threads are performing operations.
+ */ 
+size_t mpmc_queue_available(struct mpmc_queue *q);
 
-/** Decrement the number of readers for this queue.
- *
- * Important: To garuantee thread-safety this function must by called by
- *            the (only) writer which holds \p tail.
- */
-void queue_reader_remove(struct queue *q, qptr_t head, qptr_t tail);
+int mpmc_queue_push(struct mpmc_queue *q, void *ptr);
 
-/** Enqueue up to \p cnt elements from \p ptrs[] at the queue tail pointed by \p tail.
- *
- * It may happen that the queue is (nearly) full and there is no more
- * space to enqueue more elments.
- * In this case a call to this function will return a value which is smaller than \p cnt
- * or even zero if the queue was already full.
- *
- * @param q A pointer to the queue datastructure.
- * @param[in] ptrs An array of void-pointers which should be enqueued.
- * @param cnt The length of the pointer array \p ptrs.
- * @param[in,out] tail A pointer to the current tail of the queue. The tail will be updated to new tail after eqeuing.
- * @return The function returns the number of successfully enqueued elements from \p ptrs.
- */
-int queue_push_many(struct queue *q, void *ptrs[], size_t cnt, qptr_t *tail);
+int mpmc_queue_pull(struct mpmc_queue *q, void **ptr);
 
-/** Dequeue up to \p cnt elements from the queue and place them into the array \p ptrs[].
- *
- * @param q A pointer to the queue datastructure.
- * @param[out] ptrs An array with space at least \cnt elements which will receive pointers to the released elements.
- * @param cnt The maximum number of elements which should be dequeued. It defines the size of \p ptrs.
- * @param[in,out] head A pointer to a queue head. The value will be updated to reflect the new head.
- * @return The number of elements which have been dequeued <b>and whose reference counts have reached zero</b>.
- */
-int queue_pull_many(struct queue *q, void *ptrs[], size_t cnt, qptr_t *head);
+int mpmc_queue_push_many(struct mpmc_queue *q, void *ptr[], size_t cnt);
 
-/** Fill \p ptrs with \p cnt elements of the queue starting at entry \p pos. */
-int queue_get_many(struct queue *q, void *ptrs[], size_t cnt, qptr_t pos);
+int mpmc_queue_pull_many(struct mpmc_queue *q, void **ptr[], size_t cnt);
 
-
-int queue_get(struct queue *q, void **ptr, qptr_t pos);
-
-/** Enqueue a new block at the tail of the queue which is given by the qptr_t. */
-int queue_push(struct queue *q, void *ptr, qptr_t *tail);
-
-/** Dequeue the first block at the head of the queue. */
-int queue_pull(struct queue *q, void **ptr, qptr_t *head);
-
-#endif /* _QUEUE_H_ */
\ No newline at end of file
+#endif /* _MPMC_QUEUE_H_ */
\ No newline at end of file
diff --git a/lib/queue.c b/lib/queue.c
index 40b420693..cfa46ee5d 100644
--- a/lib/queue.c
+++ b/lib/queue.c
@@ -1,133 +1,157 @@
-/** Lock-free Single-Producer Single-consumer (SPSC) queue.
+/** Lock-free Multiple-Producer Multiple-consumer (MPMC) queue.
  *
- * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
- * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
- *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
- *   Unauthorized copying of this file, via any medium is strictly prohibited. 
+ * Based on Dmitry Vyukov#s Bounded MPMC queue:
+ *   http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue
+ *
+ * @author Steffen Vogel <post@steffenvogel.de>
+ * @copyright 2016 Steffen Vogel
+ * @license BSD 2-Clause License
+ * 
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modiffication, are permitted provided that the following conditions are met:
+ * 
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "queue.h"
-#include "utils.h"
+#include "mpmc_queue.h"
 
-int queue_init(struct queue *q, size_t size)
+/** Initialize MPMC queue */
+int mpmc_queue_init(struct mpmc_queue *q, size_t size, const struct memtype *mem)
 {
-	q->size = size;
+	/* Queue size must be 2 exponent */
+	if ((size < 2) || ((size & (size - 1)) != 0))
+		return -1;
 
-	q->pointers = alloc(size * sizeof(void *));
-	q->refcnts  = alloc(size * sizeof(atomic_uint));
-	q->readers  = 0;
+	q->mem = mem;
+	q->buffer_mask = size - 1;
+	q->buffer = memory_alloc(q->mem, sizeof(q->buffer[0]) * size);
+	if (!q->buffer)
+		return -2;
+	
+	for (size_t i = 0; i != size; i += 1)
+		atomic_store_explicit(&q->buffer[i].sequence, i, memory_order_relaxed);
 
+	atomic_store_explicit(&q->tail, 0, memory_order_relaxed);
+	atomic_store_explicit(&q->head, 0, memory_order_relaxed);
+	
 	return 0;
 }
 
-void queue_destroy(struct queue *q)
+int mpmc_queue_destroy(struct mpmc_queue *q)
 {
-	free(q->pointers);
-	free(q->refcnts);
+	return memory_free(q->mem, q->buffer, (q->buffer_mask + 1) * sizeof(sizeof(q->buffer[0])));
 }
 
-void queue_reader_add(struct queue *q, qptr_t head, qptr_t tail)
+/** Return estimation of current queue usage.
+ *
+ * Note: This is only an estimation and not accurate as long other
+ *       threads are performing operations.
+ */ 
+size_t mpmc_queue_available(struct mpmc_queue *q)
 {
-	assert (head <= tail);
-
-	atomic_fetch_add(&q->readers, 1);
-	
-	for (qptr_t i = head; i < tail; i++)
-		atomic_fetch_add(&q->refcnts[i % q->size], 1);
+	return  atomic_load_explicit(&q->tail, memory_order_relaxed) -
+		atomic_load_explicit(&q->head, memory_order_relaxed);
 }
 
-void queue_reader_remove(struct queue *q, qptr_t head, qptr_t tail)
+int mpmc_queue_push(struct mpmc_queue *q, void *ptr)
 {
-	assert (head <= tail);
+	struct mpmc_queue_cell *cell;
+	size_t pos, seq;
+	intptr_t diff;
 
-	atomic_fetch_sub(&q->readers, 1);
-	
-	for (qptr_t i = head; i < tail; i++)
-		atomic_fetch_sub(&q->refcnts[i % q->size], 1);
-}
+	pos = atomic_load_explicit(&q->tail, memory_order_relaxed);
+	for (;;) {
+		cell = &q->buffer[pos & q->buffer_mask];
+		seq = atomic_load_explicit(&cell->sequence, memory_order_acquire);
+		diff = (intptr_t) seq - (intptr_t) pos;
 
-int queue_get(struct queue *q, void **ptr,  qptr_t pos)
-{
-	int refcnt = atomic_load(&q->refcnts[pos % q->size]);
-	if (refcnt == 0)
-		return 0;
-	
-	*ptr = q->pointers[pos % q->size];
+		if (diff == 0) {
+			if (atomic_compare_exchange_weak_explicit(&q->tail, &pos, pos + 1, memory_order_relaxed, memory_order_seq_cst))
+				break;
+		}
+		else if (diff < 0)
+			return 0;
+		else
+			pos = atomic_load_explicit(&q->tail, memory_order_relaxed);
+	}
+
+	cell->data = ptr;
+	atomic_store_explicit(&cell->sequence, pos + 1, memory_order_release);
 
 	return 1;
 }
 
-int queue_push(struct queue *q, void *ptr, qptr_t *tail)
+int mpmc_queue_pull(struct mpmc_queue *q, void **ptr)
 {
-	int refcnt;
-
-	do {
-		refcnt = atomic_load(&q->refcnts[*tail % q->size]);
-		if (refcnt != 0)
-			return 0; /* Queue is full */
-		
-		q->pointers[*tail % q->size] = ptr;
-	} while (!atomic_compare_exchange_weak(&q->refcnts[*tail % q->size], &refcnt, q->readers));
-
-	*tail = *tail + 1;
+	struct mpmc_queue_cell *cell;
+	size_t pos, seq;
+	intptr_t diff;
 	
+	pos = atomic_load_explicit(&q->head, memory_order_relaxed);
+	for (;;) {
+		cell = &q->buffer[pos & q->buffer_mask];
+		
+		seq = atomic_load_explicit(&cell->sequence, memory_order_acquire);
+		diff = (intptr_t) seq - (intptr_t) (pos + 1);
+
+		if (diff == 0) {
+			if (atomic_compare_exchange_weak_explicit(&q->head, &pos, pos + 1, memory_order_relaxed, memory_order_seq_cst))
+				break;
+		}
+		else if (diff < 0)
+			return 0;
+		else
+			pos = atomic_load_explicit(&q->head, memory_order_relaxed);
+	}
+
+	*ptr = cell->data;
+	atomic_store_explicit(&cell->sequence, pos + q->buffer_mask + 1, memory_order_release);
+
 	return 1;
 }
 
-int queue_pull(struct queue *q, void **ptr, qptr_t *head)
+int mpmc_queue_push_many(struct mpmc_queue *q, void *ptr[], size_t cnt)
 {
-	int refcnt;
-
-	do {
-		refcnt = atomic_load(&q->refcnts[*head % q->size]);
-		if (refcnt == 0)
-			return -1; /* Queue is empty */
-		
-		*ptr = q->pointers[*head % q->size];
-	} while (!atomic_compare_exchange_weak(&q->refcnts[*head % q->size], &refcnt, refcnt - 1));
-	
-	*head = *head + 1;
-	
-	return refcnt == 1 ? 1 : 0;
-}
-
-int queue_get_many(struct queue *q, void *ptrs[], size_t cnt, qptr_t pos)
-{
-	int ret, i;
+	int ret;
+	size_t i;
 
 	for (i = 0; i < cnt; i++) {
-		ret = queue_get(q, &ptrs[i], pos + i);
-		if (ret == 0)
+		ret = mpmc_queue_push(q, ptr[i]);
+		if (!ret)
 			break;
 	}
-
+	
 	return i;
 }
 
-int queue_push_many(struct queue *q, void **ptrs, size_t cnt, qptr_t *tail)
+int mpmc_queue_pull_many(struct mpmc_queue *q, void **ptr[], size_t cnt)
 {
-	int ret, i;
+	int ret;
+	size_t i;
 
 	for (i = 0; i < cnt; i++) {
-		ret = queue_push(q, ptrs[i], tail);
-		if (ret == 0)
+		ret = mpmc_queue_pull(q, ptr[i]);
+		if (!ret)
 			break;
 	}
-
+	
 	return i;
 }
-
-int queue_pull_many(struct queue *q, void **ptrs, size_t cnt, qptr_t *head)
-{
-	int released = 0, ret;
-	
-	for (int i = 0; i < cnt; i++) {
-		ret = queue_pull(q, &ptrs[i], head);
-		if (ret < 0) /* empty */
-			break;
-		if (ret == 1)
-			released++;
-	}
-
-	return released;
-}
\ No newline at end of file

From 2648c1f57c75d5501064494d68ff2498d468fd95 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sun, 28 Aug 2016 23:55:51 -0400
Subject: [PATCH 02/45] replaced lstack backed memory pool with new queue as
 underlying datastrucutre

---
 include/villas/lstack.h |  83 -------------------------
 include/villas/pool.h   |  43 +++++++------
 lib/lstack.c            | 130 ----------------------------------------
 lib/pool.c              |  51 +++++++---------
 4 files changed, 41 insertions(+), 266 deletions(-)
 delete mode 100644 include/villas/lstack.h
 delete mode 100644 lib/lstack.c

diff --git a/include/villas/lstack.h b/include/villas/lstack.h
deleted file mode 100644
index 58250fbc0..000000000
--- a/include/villas/lstack.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/** Lock-less LIFO stack
- *
- * Based on a single-linked list and double word compare exchange (DWCAS)
- * to solve the ABA problem.
- *
- * Based on https://github.com/skeeto/lstack
- *
- * @file
- * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
- * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
- *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
- *   Unauthorized copying of this file, via any medium is strictly prohibited.
- *********************************************************************************/
-
-#ifndef _LSTACK_H_
-#define _LSTACK_H_
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdatomic.h>
-
-struct lstack_node {
-	void *value;
-	struct lstack_node *next;
-};
-
-/** DWCAS cmpexch16 */
-struct lstack_head {
-	uintptr_t aba;
-	struct lstack_node *node;
-};
-
-struct lstack {
-	struct lstack_node *node_buffer;
-	_Atomic struct lstack_head head; /**> List of stack elements */
-	_Atomic struct lstack_head free; /**> List of unused elements */
-	_Atomic size_t size, avail;
-};
-
-/** Initialize a lock-less stack which can hold up to maxsz values.
- *
- * Note: this function is not thread-safe.
- */
-int lstack_init(struct lstack *lstack, size_t maxsz);
-
-/** Pop cnt values from the stack an place them in the array values */
-ssize_t lstack_pop_many(struct lstack *lstack, void *values[], size_t cnt);
-
-/** Push cnt values which are giving by the array values to the stack. */
-ssize_t lstack_push_many(struct lstack *lstack, void *values[], size_t cnt);
-
-/** Push a single value to the stack. */
-static inline __attribute__((unused)) int lstack_push(struct lstack *lstack, void *value)
-{
-	return lstack_push_many(lstack, &value, 1) == 1 ? 0 : -1;
-}
-
-/** Pop a single element from the stack and return it. */
-static inline __attribute__((unused)) void * lstack_pop(struct lstack *lstack)
-{
-	void *value;
-	
-	lstack_pop_many(lstack, &value, 1);
-	
-	return value;
-}
-
-/** Return the approximate size of the stack. */
-static inline __attribute__((unused)) size_t lstack_size(struct lstack *lstack)
-{
-	return atomic_load(&lstack->size);
-}
-
-/** Release memory used by the stack.
- *
- * Note: this function is not thread-safe.
- */
-static inline __attribute__((unused)) void lstack_destroy(struct lstack *lstack)
-{
-	free(lstack->node_buffer);
-}
-
-#endif /* _LSTACK_H_ */
\ No newline at end of file
diff --git a/include/villas/pool.h b/include/villas/pool.h
index bfa77935b..87bf96a4a 100644
--- a/include/villas/pool.h
+++ b/include/villas/pool.h
@@ -12,51 +12,48 @@
 #ifndef _POOL_H_
 #define _POOL_H_
 
-#include "lstack.h"
-
-struct pool_block;
-
+/** A thread-safe memory pool */
 struct pool {
-	size_t blocksz;
-	size_t alignment;
+	void *buffer;		/**< Address of the underlying memory area */
+	size_t len;		/**< Length of the underlying memory area */
 	
-	struct lstack stack;
+	size_t blocksz;		/**< Length of a block in bytes */
+	size_t alignment;	/**< Alignment of a block in bytes */
+	
+	struct mpmc_queue queue; /**< The queue which is used to keep track of free blocks */
 };
 
-/** Initiazlize a pool */
-int pool_init(struct pool *p, size_t blocksz, size_t alignment, void *buf, size_t len);
+#define INLINE static inline __attribute__((unused)) 
 
-/** Allocate hugepages for the pool and initialize it */
-int pool_init_mmap(struct pool *p, size_t blocksz, size_t cnt);
+/** Initiazlize a pool */
+int pool_init(struct pool *p, size_t blocksz, size_t alignment, const struct memtype *mem);
 
 /** Destroy and release memory used by pool. */
-static inline __attribute__((unused)) void pool_destroy(struct pool *p)
-{
-	lstack_destroy(&p->stack);
-}
+int pool_destroy(struct pool *p);
 
 /** Pop cnt values from the stack an place them in the array blocks */
-static inline __attribute__((unused)) ssize_t pool_get_many(struct pool *p, void *blocks[], size_t cnt)
+INLINE ssize_t pool_get_many(struct pool *p, void *blocks[], size_t cnt)
 {
-	return lstack_pop_many(&p->stack, blocks, cnt);
+	return mpmc_queue_pull_many(&p->queue, blocks, cnt);
 }
 
 /** Push cnt values which are giving by the array values to the stack. */
-static inline __attribute__((unused)) ssize_t pool_put_many(struct pool *p, void *blocks[], size_t cnt)
+INLINE ssize_t pool_put_many(struct pool *p, void *blocks[], size_t cnt)
 {
-	return lstack_push_many(&p->stack, blocks, cnt);
+	return mpmc_queue_push_many(&p->queue, blocks, cnt);
 }
 
 /** Get a free memory block from pool. */
-static inline __attribute__((unused)) void * pool_get(struct pool *p)
+INLINE void * pool_get(struct pool *p)
 {
-	return lstack_pop(&p->stack);
+	void *ptr;
+	return mpmc_queue_pull(&p->queue, &ptr) == 1 ? ptr : NULL;
 }
 
 /** Release a memory block back to the pool. */
-static inline __attribute__((unused)) int pool_put(struct pool *p, void *buf)
+INLINE int pool_put(struct pool *p, void *buf)
 {
-	return lstack_push(&p->stack, buf);
+	return mpmc_queue_push(&p->queue, buf);
 }
 
 #endif /* _POOL_H_ */
\ No newline at end of file
diff --git a/lib/lstack.c b/lib/lstack.c
deleted file mode 100644
index 2988b9763..000000000
--- a/lib/lstack.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/** Lock-less LIFO stack
- *
- * Based on a single-linked list and double word compare exchange (DWCAS)
- * to solve the ABA problem.
- *
- * Based on https://github.com/skeeto/lstack
- *
- * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
- * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
- *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
- *   Unauthorized copying of this file, via any medium is strictly prohibited.
- *********************************************************************************/
-
-#include <stdlib.h>
-#include <errno.h>
-
-#include "lstack.h"
-#include "utils.h"
-
-static struct lstack_node * pop_many(_Atomic struct lstack_head *head, size_t cnt)
-{
-	size_t i;
-	struct lstack_head next, orig = atomic_load(head);
-
-	do {
-		next.aba  = orig.aba + 1;
-		
-		for (i = 0,	next.node = orig.node;
-		     i < cnt &&	next.node;
-		     i++,	next.node = next.node->next) {
-//			     debug(3, "pop_many next.node %p next.node->next %p", next.node, next.node->next);
-		}
-		
-		if (i != cnt)
-			return NULL;
-	} while (!atomic_compare_exchange_weak(head, &orig, next));
-
-	return orig.node;
-}
-
-static int push_many(_Atomic struct lstack_head *head, struct lstack_node *node, size_t cnt)
-{
-	size_t i;
-	struct lstack_head next, orig = atomic_load(head);
-	struct lstack_node *last = node;
-	
-	/* Find last node which will be pushed */
-	for (i = 1; i < cnt; i++) {
-//		debug(3, "push_many node %p node->next %p", last, last->next);
-		last = last->next;
-	}
-
-	do {
-		next.aba  = orig.aba + 1;
-		next.node = node;
-
-		last->next = orig.node;
-	} while (!atomic_compare_exchange_weak(head, &orig, next));
-	
-	return 0;
-}
-
-int lstack_init(struct lstack *lstack, size_t maxsz)
-{
-	/* Pre-allocate all nodes. */
-	lstack->node_buffer = alloc(maxsz * sizeof(struct lstack_node));
-
-	for (size_t i = 1; i < maxsz; i++)
-		lstack->node_buffer[i-1].next = &lstack->node_buffer[i];
-	lstack->node_buffer[maxsz - 1].next = NULL;
-
-
-	lstack->free = ATOMIC_VAR_INIT(((struct lstack_head) { 0, lstack->node_buffer }));
-	lstack->head = ATOMIC_VAR_INIT(((struct lstack_head) { 0, NULL }));
-
-	lstack->size = ATOMIC_VAR_INIT(0);
-	lstack->avail = ATOMIC_VAR_INIT(maxsz);
-
-	return 0;
-}
-
-ssize_t lstack_push_many(struct lstack *lstack, void *values[], size_t cnt)
-{
-	size_t i;
-	struct lstack_node *nodes, *node;
-	
-	if (cnt == 0)
-		return 0;
-
-	nodes = pop_many(&lstack->free, cnt);
-	if (!nodes)
-		return 0;
-
-	atomic_fetch_sub(&lstack->avail, cnt);
-
-	for (i = 0,	node = nodes;
-	     i < cnt &&	node;
-	     i++,	node = node->next)
-		node->value = values[i];
-	
-	push_many(&lstack->head, nodes, cnt);
-	atomic_fetch_add(&lstack->size, cnt);
-
-	return i;
-}
-
-ssize_t lstack_pop_many(struct lstack *lstack, void *values[], size_t cnt)
-{
-	size_t i;
-	struct lstack_node *nodes, *node;
-	
-	if (cnt == 0)
-		return 0;
-
-	nodes = pop_many(&lstack->head, cnt);
-	if (!nodes)
-		return 0;
-	
-	atomic_fetch_sub(&lstack->size, cnt);
-	
-	for (i = 0,	node = nodes;
-	     i < cnt &&	node;
-	     i++,	node = node->next)
-		values[i] = node->value;
-
-	push_many(&lstack->free, nodes, cnt);
-	atomic_fetch_add(&lstack->avail, cnt);
-
-	return i;
-}
\ No newline at end of file
diff --git a/lib/pool.c b/lib/pool.c
index 94a382435..c24420bb9 100644
--- a/lib/pool.c
+++ b/lib/pool.c
@@ -6,52 +6,43 @@
  *   Unauthorized copying of this file, via any medium is strictly prohibited.
  */
 
-#include <sys/mman.h>
-
 #include "utils.h"
 
 #include "pool.h"
+#include "memory.h"
 #include "kernel/kernel.h"
 
-int pool_init_mmap(struct pool *p, size_t blocksz, size_t cnt)
+int pool_init(struct pool *p, size_t blocksz, size_t cnt, const struct memtype *m)
 {
 	void *addr;
-	int flags;
-	size_t len, alignedsz, align;
+	int flags, prot;
+	size_t len, alignedsz, alignment;
 	
-	align = kernel_get_cacheline_size();
-	alignedsz = blocksz * CEIL(blocksz, align);
+	/* Make sure that we use a block size that is aligned to the size of a cache line */
+	alignment = kernel_get_cacheline_size();
+	alignedsz = blocksz * CEIL(blocksz, );
 	len = cnt * alignedsz;
-	
-	debug(DBG_POOL | 4, "Allocating %#zx bytes for memory pool", len);
-	
-	flags = MAP_LOCKED | MAP_PRIVATE | MAP_ANONYMOUS; // MAP_HUGETLB
-	/** @todo Use hugepages */
 
-	/* addr is allways aligned to pagesize boundary */
-	addr = mmap(NULL, len, PROT_READ | PROT_WRITE, flags, -1, 0);
-	if (addr == MAP_FAILED)
-		serror("Failed to allocate memory for sample pool");
- 
-	return pool_init(p, blocksz, align, addr, len);
-}
-
-int pool_init(struct pool *p, size_t blocksz, size_t align, void *buf, size_t len)
-{
-	size_t alignedsz, cnt;
-	
-	assert(IS_ALIGNED(buf, align)); /* buf has to be aligned */
+	addr = memory_alloc_align(m, len, aligment);
+	if (!addr)
+		serror("Failed to allocate memory for memory pool");
+	else
+		debug(DBG_POOL | 4, "Allocated %#zx bytes for memory pool", len);
 	
 	p->blocksz = blocksz;
-	p->alignment = align;
+	p->alignment = alignment;
 	
-	alignedsz = blocksz * CEIL(blocksz, align);
-	cnt = len / alignedsz;
-	
-	lstack_init(&p->stack, cnt);
+	mpmc_queue_init(&p->queue, cnt, m);
 	
 	for (int i = 0; i < cnt; i++)
 		lstack_push(&p->stack, buf + i * alignedsz);
 	
 	return 0;
+}
+
+int pool_destroy(struct pool *p)
+{
+	mpmc_queue_destroy(&p->queue);
+	
+	memory_dealloc(p->buffer, p->len);
 }
\ No newline at end of file

From 4bd6cf9c6a16c58ff2239bf41fc7a94b53ced804 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sun, 28 Aug 2016 23:57:11 -0400
Subject: [PATCH 03/45] added reference counter to sample structure

---
 include/villas/sample.h |  9 +++++++++
 lib/sample.c            | 16 ++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/include/villas/sample.h b/include/villas/sample.h
index 9cd16f6d2..72d00ce05 100644
--- a/include/villas/sample.h
+++ b/include/villas/sample.h
@@ -41,6 +41,9 @@ struct sample {
 	int sequence;		/**< The sequence number of this sample. */
 	int length;		/**< The number of values in sample::values which are valid. */
 	int capacity;		/**< The number of values in sample::values for which memory is reserved. */
+	
+	atomic_int_t refcnt;	/**< Reference counter. */
+	struct pool *pool;	/**< This sample is belong to this memory pool. */
 
 	/** All timestamps are seconds / nano seconds after 1.1.1970 UTC */
 	struct {
@@ -59,6 +62,12 @@ struct sample {
 /** Request \p cnt samples from memory pool \p p and initialize them. */
 int sample_get_many(struct pool *p, struct sample *smps[], int cnt);
 
+/** Increase reference count of sample */
+int sample_get(struct sample *s);
+
+/** Decrease reference count and release memory if last reference was held. */
+int sample_put(struct sample *s);
+
 /** Print a sample in human readable form to a file stream.
  *
  * @param buf A character buffer of len bytes.
diff --git a/lib/sample.c b/lib/sample.c
index f582c2e8d..f3040d3a0 100644
--- a/lib/sample.c
+++ b/lib/sample.c
@@ -25,6 +25,22 @@ int sample_get_many(struct pool *p, struct sample *smps[], int cnt) {
 	return ret;
 }
 
+int sample_get(struct sample *s)
+{
+	return atomic_fetch_add(&s->refcnt, 1) + 1;
+}
+
+int sample_put(struct sample *s)
+{
+	int prev = atomic_fetch_sub(&s->refcnt, 1);
+	
+	/* Did we had the last refernce? */
+	if (prev == 1)
+		pool_put(s->pool, s);
+	
+	return prev - 1;
+}
+
 int sample_print(char *buf, size_t len, struct sample *s, int flags)
 {
 	size_t off = snprintf(buf, len, "%llu", (unsigned long long) s->ts.origin.tv_sec);

From 4bd461d9e2bf4b051c9f7172c9defe3335538e88 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 15 Sep 2016 21:25:32 -0400
Subject: [PATCH 04/45] added new generic memory allocator

---
 include/villas/memory.h | 43 ++++++++++++++++++++++
 lib/memory.c            | 80 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 123 insertions(+)
 create mode 100644 include/villas/memory.h
 create mode 100644 lib/memory.c

diff --git a/include/villas/memory.h b/include/villas/memory.h
new file mode 100644
index 000000000..19711f7a0
--- /dev/null
+++ b/include/villas/memory.h
@@ -0,0 +1,43 @@
+/** 
+ *
+ */
+
+#ifndef _MEMORY_H_
+#define _MEMORY_H_
+
+typedef void *(*memzone_allocator_t)(size_t);
+typedef int (*memzone_deallocator_t)(void *, size_t);
+
+enum memtype_flags {
+	MEMORY_MMAP	= (1 << 0),
+	MEMORY_DMA	= (1 << 1),
+	MEMORY_HUGEPAGE	= (1 << 2),
+	MEMORY_HEAP	= (1 << 3)
+};
+
+struct memtype {
+	const char *name;
+	int flags;
+	
+	size_t alignment;
+	
+	memzone_allocator_t alloc;
+	memzone_deallocator_t dealloc;
+};
+
+/** @todo Unused for now */
+struct memzone {
+	struct memtype * const type;
+	
+	void *addr;
+	uintptr_t physaddr;
+	size_t len; 
+};
+
+void * memory_alloc(const struct memtype *m, size_t len);
+int memory_free(const struct memtype *m, void *ptr, size_t len);
+
+extern const struct memtype memtype_heap;
+extern const struct memtype memtype_hugepage;
+
+#endif /* _MEMORY_H_ */
\ No newline at end of file
diff --git a/lib/memory.c b/lib/memory.c
new file mode 100644
index 000000000..e7c01e38f
--- /dev/null
+++ b/lib/memory.c
@@ -0,0 +1,80 @@
+/** 
+ *
+ */
+
+#include <stdlib.h>
+#include <sys/mman.h>
+
+/* Required to allocate hugepages on Apple OS X */
+#ifdef __MACH__
+  #include <mach/vm_statistics.h>
+#endif
+
+#include "memory.h"
+
+void * memory_alloc(const struct memtype *m, size_t len)
+{
+	return m->alloc(len);
+}
+
+int memory_free(const struct memtype *m, void *ptr, size_t len)
+{
+	return m->dealloc(ptr, len);
+}
+
+static void * memory_heap_alloc(size_t len)
+{
+	return malloc(len);
+}
+
+int memory_heap_dealloc(void *ptr, size_t len)
+{
+	free(ptr);
+	
+	return 0;
+}
+
+/** Allocate memory backed by hugepages with malloc() like interface */
+static void * memory_hugepage_alloc(size_t len)
+{
+	int prot = PROT_READ | PROT_WRITE;
+	int flags = MAP_PRIVATE | MAP_ANONYMOUS;
+	
+#ifdef __MACH__
+	flags |= VM_FLAGS_SUPERPAGE_SIZE_2MB;
+#elif defined(__linux__)
+	flags |= MAP_HUGETLB | MAP_LOCKED;
+#endif
+	
+	return mmap(NULL, len, prot, flags, -1, 0);
+}
+
+static int memory_hugepage_dealloc(void *ptr, size_t len)
+{
+	return munmap(ptr, len);
+}
+
+/* List of available memory types */
+const struct memtype memtype_heap = {
+	.name = "heap",
+	.flags = MEMORY_HEAP,
+	.alloc = memory_heap_alloc,
+	.dealloc = memory_heap_dealloc,
+	.alignment = 1
+};
+
+const struct memtype memtype_hugepage = {
+	.name = "mmap_hugepages",
+	.flags = MEMORY_MMAP | MEMORY_HUGEPAGE,
+	.alloc = memory_hugepage_alloc,
+	.dealloc = memory_hugepage_dealloc,
+	.alignment = 1 << 21  /* 2 MiB hugepage */
+};
+
+/** @todo */
+const struct memtype memtype_dma = {
+	.name = "dma",
+	.flags = MEMORY_DMA | MEMORY_MMAP,
+	.alloc = NULL, .dealloc = NULL,
+	.alignment = 1 << 12
+};

From cc802859bd9e8dc8158c20562208487d105b3d5e Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Mon, 19 Sep 2016 20:58:41 -0400
Subject: [PATCH 05/45] refactored memory allocators

---
 include/villas/memory.h | 18 ++++++++++++++----
 lib/memory.c            | 25 ++++++++++++++++++-------
 2 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/include/villas/memory.h b/include/villas/memory.h
index 19711f7a0..753c189c9 100644
--- a/include/villas/memory.h
+++ b/include/villas/memory.h
@@ -1,12 +1,19 @@
-/** 
+/** Memory allocators.
  *
+ * @file
+ * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
+ * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
+ *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
+ *   Unauthorized copying of this file, via any medium is strictly prohibited.
  */
 
+#include <stddef.h>
+
 #ifndef _MEMORY_H_
 #define _MEMORY_H_
 
-typedef void *(*memzone_allocator_t)(size_t);
-typedef int (*memzone_deallocator_t)(void *, size_t);
+typedef void *(*memzone_allocator_t)(size_t len);
+typedef int (*memzone_deallocator_t)(void *ptr, size_t len);
 
 enum memtype_flags {
 	MEMORY_MMAP	= (1 << 0),
@@ -22,7 +29,7 @@ struct memtype {
 	size_t alignment;
 	
 	memzone_allocator_t alloc;
-	memzone_deallocator_t dealloc;
+	memzone_deallocator_t free;
 };
 
 /** @todo Unused for now */
@@ -35,6 +42,9 @@ struct memzone {
 };
 
 void * memory_alloc(const struct memtype *m, size_t len);
+
+void * memory_aligned_alloc(const struct memtype *m, size_t len, size_t alignment);
+
 int memory_free(const struct memtype *m, void *ptr, size_t len);
 
 extern const struct memtype memtype_heap;
diff --git a/lib/memory.c b/lib/memory.c
index e7c01e38f..c91c86d1d 100644
--- a/lib/memory.c
+++ b/lib/memory.c
@@ -1,5 +1,9 @@
-/** 
+/** Memory allocators.
  *
+ * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
+ * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
+ *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
+ *   Unauthorized copying of this file, via any medium is strictly prohibited.
  */
 
 #include <stdlib.h>
@@ -10,6 +14,7 @@
   #include <mach/vm_statistics.h>
 #endif
 
+#include "log.h"
 #include "memory.h"
 
 void * memory_alloc(const struct memtype *m, size_t len)
@@ -17,9 +22,15 @@ void * memory_alloc(const struct memtype *m, size_t len)
 	return m->alloc(len);
 }
 
+void * memory_aligned_alloc(const struct memtype *m, size_t len, size_t align)
+{
+	warn("memory_aligned_alloc: not implemented yet. Falling back to unaligned version.");
+	return memory_alloc(m, len);
+}
+
 int memory_free(const struct memtype *m, void *ptr, size_t len)
 {
-	return m->dealloc(ptr, len);
+	return m->free(ptr, len);
 }
 
 static void * memory_heap_alloc(size_t len)
@@ -27,7 +38,7 @@ static void * memory_heap_alloc(size_t len)
 	return malloc(len);
 }
 
-int memory_heap_dealloc(void *ptr, size_t len)
+int memory_heap_free(void *ptr, size_t len)
 {
 	free(ptr);
 	
@@ -49,7 +60,7 @@ static void * memory_hugepage_alloc(size_t len)
 	return mmap(NULL, len, prot, flags, -1, 0);
 }
 
-static int memory_hugepage_dealloc(void *ptr, size_t len)
+static int memory_hugepage_free(void *ptr, size_t len)
 {
 	return munmap(ptr, len);
 }
@@ -59,7 +70,7 @@ const struct memtype memtype_heap = {
 	.name = "heap",
 	.flags = MEMORY_HEAP,
 	.alloc = memory_heap_alloc,
-	.dealloc = memory_heap_dealloc,
+	.free = memory_heap_free,
 	.alignment = 1
 };
 
@@ -67,7 +78,7 @@ const struct memtype memtype_hugepage = {
 	.name = "mmap_hugepages",
 	.flags = MEMORY_MMAP | MEMORY_HUGEPAGE,
 	.alloc = memory_hugepage_alloc,
-	.dealloc = memory_hugepage_dealloc,
+	.free = memory_hugepage_free,
 	.alignment = 1 << 21  /* 2 MiB hugepage */
 };
 
@@ -75,6 +86,6 @@ const struct memtype memtype_hugepage = {
 const struct memtype memtype_dma = {
 	.name = "dma",
 	.flags = MEMORY_DMA | MEMORY_MMAP,
-	.alloc = NULL, .dealloc = NULL,
+	.alloc = NULL, .free = NULL,
 	.alignment = 1 << 12
 };

From 384d45ba8fccabd71005271880b9ae89e00d1141 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 22 Sep 2016 00:25:20 -0400
Subject: [PATCH 06/45] moved xilinx library to new location

---
 thirdparty/{xilinx => libxil}/Makefile        |   0
 thirdparty/{xilinx => libxil}/README.md       |   0
 .../include/xilinx/xaxidma.h                  |   0
 .../include/xilinx/xaxidma_bd.h               |   0
 .../include/xilinx/xaxidma_bdring.h           |   0
 .../include/xilinx/xaxidma_hw.h               |   0
 .../include/xilinx/xaxidma_porting_guide.h    |   0
 .../include/xilinx/xaxis_switch.h             |   0
 .../include/xilinx/xaxis_switch_hw.h          |   0
 .../include/xilinx/xbasic_types.h             |   0
 .../include/xilinx/xdebug.h                   |   0
 .../{xilinx => libxil}/include/xilinx/xenv.h  |   0
 .../include/xilinx/xenv_linux.h               |   0
 .../include/xilinx/xenv_none.h                |   0
 .../include/xilinx/xenv_standalone.h          |   0
 .../include/xilinx/xenv_vxworks.h             |   0
 .../include/xilinx/xhls_dft.h                 |   0
 .../include/xilinx/xhls_dft_hw.h              |   0
 .../include/xilinx/xil_assert.h               |   0
 .../include/xilinx/xil_cache.h                |   0
 .../include/xilinx/xil_io.h                   |   0
 .../include/xilinx/xil_printf.h               |   0
 .../include/xilinx/xil_types.h                |   0
 .../{xilinx => libxil}/include/xilinx/xintc.h |   0
 .../include/xilinx/xintc_l.h                  |   0
 .../include/xilinx/xllfifo.h                  |   0
 .../include/xilinx/xllfifo_hw.h               |   0
 .../include/xilinx/xparameters.h              |   0
 .../include/xilinx/xstatus.h                  |   0
 .../include/xilinx/xstreamer.h                |   0
 .../include/xilinx/xtmrctr.h                  |   0
 .../include/xilinx/xtmrctr_i.h                |   0
 .../include/xilinx/xtmrctr_l.h                |   0
 .../{xilinx => libxil}/include/xilinx/xutil.h |   0
 .../include/xilinx/xversion.h                 |   0
 thirdparty/{xilinx => libxil}/orig/README.md  |   0
 .../orig/axidma_v9_0/data/axidma.mdd          |   0
 .../orig/axidma_v9_0/data/axidma.tcl          |   0
 .../orig/axidma_v9_0/data/axidma_header.h     |   0
 .../orig/axidma_v9_0/data/axidma_tapp.tcl     |   0
 .../axidma_v9_0/doc/html/api/HTML_custom.css  |   0
 .../axidma_v9_0/doc/html/api/annotated.html   |   0
 .../axidma_v9_0/doc/html/api/classes.html     |   0
 .../orig/axidma_v9_0/doc/html/api/doc.png     | Bin
 .../axidma_v9_0/doc/html/api/dynsections.js   |   0
 .../orig/axidma_v9_0/doc/html/api/files.html  |   0
 .../axidma_v9_0/doc/html/api/functions.html   |   0
 .../doc/html/api/functions_vars.html          |   0
 .../axidma_v9_0/doc/html/api/globals.html     |   0
 .../doc/html/api/globals_defs.html            |   0
 .../doc/html/api/globals_func.html            |   0
 .../doc/html/api/globals_type.html            |   0
 .../doc/html/api/group__axidma__v9__0.html    |   0
 .../orig/axidma_v9_0/doc/html/api/index.html  |   0
 .../orig/axidma_v9_0/doc/html/api/jquery.js   |   0
 .../axidma_v9_0/doc/html/api/modules.html     |   0
 .../doc/html/api/struct_x_axi_dma.html        |   0
 .../html/api/struct_x_axi_dma___bd_ring.html  |   0
 .../html/api/struct_x_axi_dma___config.html   |   0
 .../orig/axidma_v9_0/doc/html/api/tab_a.png   | Bin
 .../orig/axidma_v9_0/doc/html/api/tab_b.png   | Bin
 .../orig/axidma_v9_0/doc/html/api/tab_h.png   | Bin
 .../orig/axidma_v9_0/doc/html/api/tab_s.png   | Bin
 .../orig/axidma_v9_0/doc/html/api/tabs.css    |   0
 .../axidma_v9_0/doc/html/api/xaxidma_8c.html  |   0
 .../axidma_v9_0/doc/html/api/xaxidma_8h.html  |   0
 .../doc/html/api/xaxidma__bd_8c.html          |   0
 .../doc/html/api/xaxidma__bd_8h.html          |   0
 .../doc/html/api/xaxidma__bdring_8c.html      |   0
 .../doc/html/api/xaxidma__bdring_8h.html      |   0
 .../doc/html/api/xaxidma__g_8c.html           |   0
 .../doc/html/api/xaxidma__hw_8h.html          |   0
 .../html/api/xaxidma__porting__guide_8h.html  |   0
 .../doc/html/api/xaxidma__selftest_8c.html    |   0
 .../doc/html/api/xaxidma__sinit_8c.html       |   0
 .../axidma_v9_0/doc/html/api/xlogo_bg.gif     | Bin
 .../orig/axidma_v9_0/examples/index.html      |   0
 .../examples/xaxidma_example_selftest.c       |   0
 .../examples/xaxidma_example_sg_intr.c        |   0
 .../examples/xaxidma_example_sg_poll.c        |   0
 .../examples/xaxidma_example_simple_intr.c    |   0
 .../examples/xaxidma_example_simple_poll.c    |   0
 .../examples/xaxidma_multichan_sg_intr.c      |   0
 .../examples/xaxidma_poll_multi_pkts.c        |   0
 .../orig/axidma_v9_0/src/Makefile             |   0
 .../orig/axidma_v9_0/src/xaxidma.c            |   0
 .../orig/axidma_v9_0/src/xaxidma.h            |   0
 .../orig/axidma_v9_0/src/xaxidma_bd.c         |   0
 .../orig/axidma_v9_0/src/xaxidma_bd.h         |   0
 .../orig/axidma_v9_0/src/xaxidma_bdring.c     |   0
 .../orig/axidma_v9_0/src/xaxidma_bdring.h     |   0
 .../orig/axidma_v9_0/src/xaxidma_g.c          |   0
 .../orig/axidma_v9_0/src/xaxidma_hw.h         |   0
 .../axidma_v9_0/src/xaxidma_porting_guide.h   |   0
 .../orig/axidma_v9_0/src/xaxidma_selftest.c   |   0
 .../orig/axidma_v9_0/src/xaxidma_sinit.c      |   0
 .../axis_switch_v1_0/data/axis_switch.mdd     |   0
 .../axis_switch_v1_0/data/axis_switch.tcl     |   0
 .../doc/html/api/HTML_custom.css              |   0
 .../doc/html/api/annotated.html               |   0
 .../doc/html/api/classes.html                 |   0
 .../axis_switch_v1_0/doc/html/api/doc.png     | Bin
 .../doc/html/api/dynsections.js               |   0
 .../axis_switch_v1_0/doc/html/api/files.html  |   0
 .../doc/html/api/functions.html               |   0
 .../doc/html/api/functions_vars.html          |   0
 .../doc/html/api/globals.html                 |   0
 .../doc/html/api/globals_defs.html            |   0
 .../doc/html/api/globals_func.html            |   0
 .../html/api/group__axis__switch__v1__0.html  |   0
 .../axis_switch_v1_0/doc/html/api/index.html  |   0
 .../axis_switch_v1_0/doc/html/api/jquery.js   |   0
 .../doc/html/api/modules.html                 |   0
 .../doc/html/api/struct_x_axis___switch.html  |   0
 .../api/struct_x_axis___switch___config.html  |   0
 .../axis_switch_v1_0/doc/html/api/tab_a.png   | Bin
 .../axis_switch_v1_0/doc/html/api/tab_b.png   | Bin
 .../axis_switch_v1_0/doc/html/api/tab_h.png   | Bin
 .../axis_switch_v1_0/doc/html/api/tab_s.png   | Bin
 .../axis_switch_v1_0/doc/html/api/tabs.css    |   0
 .../doc/html/api/xaxis__switch_8c.html        |   0
 .../doc/html/api/xaxis__switch_8h.html        |   0
 .../doc/html/api/xaxis__switch__g_8c.html     |   0
 .../doc/html/api/xaxis__switch__hw_8h.html    |   0
 .../html/api/xaxis__switch__selftest_8c.html  |   0
 .../doc/html/api/xaxis__switch__sinit_8c.html |   0
 .../doc/html/api/xlogo_bg.gif                 | Bin
 .../orig/axis_switch_v1_0/examples/index.html |   0
 .../examples/xaxis_switch_example.c           |   0
 .../orig/axis_switch_v1_0/src/Makefile        |   0
 .../orig/axis_switch_v1_0/src/xaxis_switch.c  |   0
 .../orig/axis_switch_v1_0/src/xaxis_switch.h  |   0
 .../axis_switch_v1_0/src/xaxis_switch_g.c     |   0
 .../axis_switch_v1_0/src/xaxis_switch_hw.h    |   0
 .../src/xaxis_switch_selftest.c               |   0
 .../axis_switch_v1_0/src/xaxis_switch_sinit.c |   0
 .../vxworks5_4/xtag_csp_common_v1_00_a.c      |   0
 .../orig/common_v1_00_a/data/common.mdd       |   0
 .../doc/html/api/HTML_custom.css              |   0
 .../doc/html/api/annotated.html               |   0
 .../common_v1_00_a/doc/html/api/classes.html  |   0
 .../orig/common_v1_00_a/doc/html/api/doc.png  | Bin
 .../doc/html/api/dynsections.js               |   0
 .../common_v1_00_a/doc/html/api/files.html    |   0
 .../common_v1_00_a/doc/html/api/globals.html  |   0
 .../doc/html/api/globals_defs.html            |   0
 .../doc/html/api/globals_func.html            |   0
 .../doc/html/api/globals_type.html            |   0
 .../doc/html/api/globals_vars.html            |   0
 .../html/api/group__common__v1__00__a.html    |   0
 .../common_v1_00_a/doc/html/api/index.html    |   0
 .../common_v1_00_a/doc/html/api/jquery.js     |   0
 .../common_v1_00_a/doc/html/api/modules.html  |   0
 .../struct_x_e_n_v___t_i_m_e___s_t_a_m_p.html |   0
 .../common_v1_00_a/doc/html/api/tab_a.png     | Bin
 .../common_v1_00_a/doc/html/api/tab_b.png     | Bin
 .../common_v1_00_a/doc/html/api/tab_h.png     | Bin
 .../common_v1_00_a/doc/html/api/tab_s.png     | Bin
 .../orig/common_v1_00_a/doc/html/api/tabs.css |   0
 .../doc/html/api/xbasic__types_8c.html        |   0
 .../doc/html/api/xbasic__types_8h.html        |   0
 .../common_v1_00_a/doc/html/api/xenv_8h.html  |   0
 .../doc/html/api/xenv__linux_8h.html          |   0
 .../doc/html/api/xenv__none_8h.html           |   0
 .../doc/html/api/xenv__standalone_8h.html     |   0
 .../doc/html/api/xenv__vxworks_8h.html        |   0
 .../common_v1_00_a/doc/html/api/xlogo_bg.gif  | Bin
 .../doc/html/api/xparameters_8h.html          |   0
 .../doc/html/api/xstatus_8h.html              |   0
 .../common_v1_00_a/doc/html/api/xutil_8h.html |   0
 .../doc/html/api/xutil__memtest_8c.html       |   0
 .../doc/html/api/xversion_8c.html             |   0
 .../doc/html/api/xversion_8h.html             |   0
 .../orig/common_v1_00_a/src/Makefile          |   0
 .../orig/common_v1_00_a/src/xbasic_types.c    |   0
 .../orig/common_v1_00_a/src/xbasic_types.h    |   0
 .../orig/common_v1_00_a/src/xenv.h            |   0
 .../orig/common_v1_00_a/src/xenv_linux.h      |   0
 .../orig/common_v1_00_a/src/xenv_none.h       |   0
 .../orig/common_v1_00_a/src/xenv_standalone.h |   0
 .../orig/common_v1_00_a/src/xenv_vxworks.h    |   0
 .../orig/common_v1_00_a/src/xparameters.h     |   0
 .../orig/common_v1_00_a/src/xstatus.h         |   0
 .../orig/common_v1_00_a/src/xutil.h           |   0
 .../orig/common_v1_00_a/src/xutil_memtest.c   |   0
 .../orig/common_v1_00_a/src/xversion.c        |   0
 .../orig/common_v1_00_a/src/xversion.h        |   0
 .../orig/hls_dft_v1_0/data/hls_dft.mdd        |  38 +++----
 .../orig/hls_dft_v1_0/data/hls_dft.tcl        |  48 ++++----
 .../orig/hls_dft_v1_0/src/Makefile            |  70 ++++++------
 .../orig/hls_dft_v1_0/src/xhls_dft.c          |   0
 .../orig/hls_dft_v1_0/src/xhls_dft.h          |   0
 .../orig/hls_dft_v1_0/src/xhls_dft_hw.h       | 104 +++++++++---------
 .../orig/hls_dft_v1_0/src/xhls_dft_sinit.c    |  92 ++++++++--------
 .../orig/intc_v3_4/data/intc.mdd              |   0
 .../orig/intc_v3_4/data/intc.tcl              |   0
 .../orig/intc_v3_4/data/intc_header.h         |   0
 .../orig/intc_v3_4/data/intc_tapp.tcl         |   0
 .../intc_v3_4/doc/html/api/HTML_custom.css    |   0
 .../intc_v3_4/doc/html/api/annotated.html     |   0
 .../orig/intc_v3_4/doc/html/api/classes.html  |   0
 .../orig/intc_v3_4/doc/html/api/doc.png       | Bin
 .../intc_v3_4/doc/html/api/dynsections.js     |   0
 .../orig/intc_v3_4/doc/html/api/files.html    |   0
 .../intc_v3_4/doc/html/api/functions.html     |   0
 .../doc/html/api/functions_vars.html          |   0
 .../orig/intc_v3_4/doc/html/api/globals.html  |   0
 .../intc_v3_4/doc/html/api/globals_defs.html  |   0
 .../intc_v3_4/doc/html/api/globals_func.html  |   0
 .../intc_v3_4/doc/html/api/globals_vars.html  |   0
 .../doc/html/api/group__intc__v3__4.html      |   0
 .../orig/intc_v3_4/doc/html/api/index.html    |   0
 .../orig/intc_v3_4/doc/html/api/jquery.js     |   0
 .../orig/intc_v3_4/doc/html/api/modules.html  |   0
 .../intc_v3_4/doc/html/api/struct_x_intc.html |   0
 .../doc/html/api/struct_x_intc___config.html  |   0
 .../orig/intc_v3_4/doc/html/api/tab_a.png     | Bin
 .../orig/intc_v3_4/doc/html/api/tab_b.png     | Bin
 .../orig/intc_v3_4/doc/html/api/tab_h.png     | Bin
 .../orig/intc_v3_4/doc/html/api/tab_s.png     | Bin
 .../orig/intc_v3_4/doc/html/api/tabs.css      |   0
 .../orig/intc_v3_4/doc/html/api/xintc_8c.html |   0
 .../orig/intc_v3_4/doc/html/api/xintc_8h.html |   0
 .../intc_v3_4/doc/html/api/xintc__g_8c.html   |   0
 .../intc_v3_4/doc/html/api/xintc__i_8h.html   |   0
 .../doc/html/api/xintc__intr_8c.html          |   0
 .../intc_v3_4/doc/html/api/xintc__l_8c.html   |   0
 .../intc_v3_4/doc/html/api/xintc__l_8h.html   |   0
 .../doc/html/api/xintc__options_8c.html       |   0
 .../doc/html/api/xintc__selftest_8c.html      |   0
 .../orig/intc_v3_4/doc/html/api/xlogo_bg.gif  | Bin
 .../orig/intc_v3_4/examples/index.html        |   0
 .../orig/intc_v3_4/examples/xintc_example.c   |   0
 .../examples/xintc_low_level_example.c        |   0
 .../intc_v3_4/examples/xintc_tapp_example.c   |   0
 .../orig/intc_v3_4/src/Makefile               |   0
 .../orig/intc_v3_4/src/xintc.c                |   0
 .../orig/intc_v3_4/src/xintc.h                |   0
 .../orig/intc_v3_4/src/xintc_g.c              |   0
 .../orig/intc_v3_4/src/xintc_i.h              |   0
 .../orig/intc_v3_4/src/xintc_intr.c           |   0
 .../orig/intc_v3_4/src/xintc_l.c              |   0
 .../orig/intc_v3_4/src/xintc_l.h              |   0
 .../orig/intc_v3_4/src/xintc_options.c        |   0
 .../orig/intc_v3_4/src/xintc_selftest.c       |   0
 .../orig/llfifo_v5_0/data/llfifo.mdd          |   0
 .../orig/llfifo_v5_0/data/llfifo.tcl          |   0
 .../llfifo_v5_0/doc/html/api/HTML_custom.css  |   0
 .../llfifo_v5_0/doc/html/api/annotated.html   |   0
 .../llfifo_v5_0/doc/html/api/classes.html     |   0
 .../orig/llfifo_v5_0/doc/html/api/doc.png     | Bin
 .../llfifo_v5_0/doc/html/api/dynsections.js   |   0
 .../orig/llfifo_v5_0/doc/html/api/files.html  |   0
 .../llfifo_v5_0/doc/html/api/functions.html   |   0
 .../doc/html/api/functions_vars.html          |   0
 .../llfifo_v5_0/doc/html/api/globals.html     |   0
 .../doc/html/api/globals_defs.html            |   0
 .../doc/html/api/globals_func.html            |   0
 .../doc/html/api/globals_type.html            |   0
 .../doc/html/api/group__llfifo__v5__0.html    |   0
 .../orig/llfifo_v5_0/doc/html/api/index.html  |   0
 .../orig/llfifo_v5_0/doc/html/api/jquery.js   |   0
 .../llfifo_v5_0/doc/html/api/modules.html     |   0
 .../doc/html/api/struct_x_ll_fifo.html        |   0
 .../api/struct_x_strm___rx_fifo_streamer.html |   0
 .../api/struct_x_strm___tx_fifo_streamer.html |   0
 .../orig/llfifo_v5_0/doc/html/api/tab_a.png   | Bin
 .../orig/llfifo_v5_0/doc/html/api/tab_b.png   | Bin
 .../orig/llfifo_v5_0/doc/html/api/tab_h.png   | Bin
 .../orig/llfifo_v5_0/doc/html/api/tab_s.png   | Bin
 .../orig/llfifo_v5_0/doc/html/api/tabs.css    |   0
 .../llfifo_v5_0/doc/html/api/xllfifo_8c.html  |   0
 .../llfifo_v5_0/doc/html/api/xllfifo_8h.html  |   0
 .../doc/html/api/xllfifo__hw_8h.html          |   0
 .../llfifo_v5_0/doc/html/api/xlogo_bg.gif     | Bin
 .../orig/llfifo_v5_0/examples/index.html      |   0
 .../examples/xllfifo_interrupt_example.c      |   0
 .../examples/xllfifo_polling_example.c        |   0
 .../orig/llfifo_v5_0/src/Makefile             |   0
 .../orig/llfifo_v5_0/src/xllfifo.c            |   0
 .../orig/llfifo_v5_0/src/xllfifo.h            |   0
 .../orig/llfifo_v5_0/src/xllfifo_g.c          |   0
 .../orig/llfifo_v5_0/src/xllfifo_hw.h         |   0
 .../orig/llfifo_v5_0/src/xllfifo_sinit.c      |   0
 .../orig/llfifo_v5_0/src/xstreamer.c          |   0
 .../orig/llfifo_v5_0/src/xstreamer.h          |   0
 .../orig/tmrctr_v4_0/data/tmrctr.mdd          |   0
 .../orig/tmrctr_v4_0/data/tmrctr.tcl          |   0
 .../orig/tmrctr_v4_0/data/tmrctr_header.h     |   0
 .../tmrctr_v4_0/data/tmrctr_intr_header.h     |   0
 .../orig/tmrctr_v4_0/data/tmrctr_tapp.tcl     |   0
 .../tmrctr_v4_0/doc/html/api/HTML_custom.css  |   0
 .../tmrctr_v4_0/doc/html/api/annotated.html   |   0
 .../tmrctr_v4_0/doc/html/api/classes.html     |   0
 .../orig/tmrctr_v4_0/doc/html/api/doc.png     | Bin
 .../tmrctr_v4_0/doc/html/api/dynsections.js   |   0
 .../orig/tmrctr_v4_0/doc/html/api/files.html  |   0
 .../tmrctr_v4_0/doc/html/api/functions.html   |   0
 .../doc/html/api/functions_vars.html          |   0
 .../tmrctr_v4_0/doc/html/api/globals.html     |   0
 .../doc/html/api/globals_defs.html            |   0
 .../doc/html/api/globals_func.html            |   0
 .../doc/html/api/globals_type.html            |   0
 .../doc/html/api/globals_vars.html            |   0
 .../doc/html/api/group__tmrctr__v3__0.html    |   0
 .../doc/html/api/group__tmrctr__v4__0.html    |   0
 .../orig/tmrctr_v4_0/doc/html/api/index.html  |   0
 .../orig/tmrctr_v4_0/doc/html/api/jquery.js   |   0
 .../tmrctr_v4_0/doc/html/api/modules.html     |   0
 .../doc/html/api/struct_x_tmr_ctr.html        |   0
 .../html/api/struct_x_tmr_ctr___config.html   |   0
 .../doc/html/api/struct_x_tmr_ctr_stats.html  |   0
 .../orig/tmrctr_v4_0/doc/html/api/tab_a.png   | Bin
 .../orig/tmrctr_v4_0/doc/html/api/tab_b.png   | Bin
 .../orig/tmrctr_v4_0/doc/html/api/tab_h.png   | Bin
 .../orig/tmrctr_v4_0/doc/html/api/tab_s.png   | Bin
 .../orig/tmrctr_v4_0/doc/html/api/tabs.css    |   0
 .../tmrctr_v4_0/doc/html/api/xlogo_bg.gif     | Bin
 .../tmrctr_v4_0/doc/html/api/xtmrctr_8c.html  |   0
 .../tmrctr_v4_0/doc/html/api/xtmrctr_8h.html  |   0
 .../doc/html/api/xtmrctr__g_8c.html           |   0
 .../doc/html/api/xtmrctr__i_8h.html           |   0
 .../doc/html/api/xtmrctr__intr_8c.html        |   0
 .../doc/html/api/xtmrctr__l_8c.html           |   0
 .../doc/html/api/xtmrctr__l_8h.html           |   0
 .../doc/html/api/xtmrctr__options_8c.html     |   0
 .../doc/html/api/xtmrctr__selftest_8c.html    |   0
 .../doc/html/api/xtmrctr__sinit_8c.html       |   0
 .../doc/html/api/xtmrctr__stats_8c.html       |   0
 .../orig/tmrctr_v4_0/examples/index.html      |   0
 .../examples/xtmrctr_fast_intr_example.c      |   0
 .../examples/xtmrctr_intr_64bit_example.c     |   0
 .../examples/xtmrctr_intr_example.c           |   0
 .../examples/xtmrctr_low_level_example.c      |   0
 .../examples/xtmrctr_polled_example.c         |   0
 .../examples/xtmrctr_selftest_example.c       |   0
 .../orig/tmrctr_v4_0/src/Makefile             |   0
 .../orig/tmrctr_v4_0/src/xtmrctr.c            |   0
 .../orig/tmrctr_v4_0/src/xtmrctr.h            |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_g.c          |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_i.h          |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_intr.c       |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_l.c          |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_l.h          |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_options.c    |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_selftest.c   |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_sinit.c      |   0
 .../orig/tmrctr_v4_0/src/xtmrctr_stats.c      |   0
 thirdparty/{xilinx => libxil}/src/xil_io.c    |   0
 349 files changed, 176 insertions(+), 176 deletions(-)
 rename thirdparty/{xilinx => libxil}/Makefile (100%)
 rename thirdparty/{xilinx => libxil}/README.md (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xaxidma.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xaxidma_bd.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xaxidma_bdring.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xaxidma_hw.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xaxidma_porting_guide.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xaxis_switch.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xaxis_switch_hw.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xbasic_types.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xdebug.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xenv.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xenv_linux.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xenv_none.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xenv_standalone.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xenv_vxworks.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xhls_dft.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xhls_dft_hw.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xil_assert.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xil_cache.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xil_io.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xil_printf.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xil_types.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xintc.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xintc_l.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xllfifo.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xllfifo_hw.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xparameters.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xstatus.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xstreamer.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xtmrctr.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xtmrctr_i.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xtmrctr_l.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xutil.h (100%)
 rename thirdparty/{xilinx => libxil}/include/xilinx/xversion.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/README.md (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/data/axidma.mdd (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/data/axidma.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/data/axidma_header.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/data/axidma_tapp.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/HTML_custom.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/annotated.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/classes.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/doc.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/dynsections.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/files.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/functions.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/functions_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/globals.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/globals_defs.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/globals_func.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/globals_type.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/group__axidma__v9__0.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/jquery.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/modules.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___bd_ring.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___config.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/tab_a.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/tab_b.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/tab_h.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/tab_s.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/tabs.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__g_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__hw_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__porting__guide_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__selftest_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xaxidma__sinit_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/doc/html/api/xlogo_bg.gif (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/xaxidma_example_selftest.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/xaxidma_example_sg_intr.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/xaxidma_example_sg_poll.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/xaxidma_example_simple_intr.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/xaxidma_example_simple_poll.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/xaxidma_multichan_sg_intr.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/examples/xaxidma_poll_multi_pkts.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/Makefile (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_bd.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_bd.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_bdring.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_bdring.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_g.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_hw.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_porting_guide.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_selftest.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axidma_v9_0/src/xaxidma_sinit.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/data/axis_switch.mdd (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/data/axis_switch.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/HTML_custom.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/annotated.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/classes.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/doc.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/dynsections.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/files.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/functions.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/functions_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/globals.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/globals_defs.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/globals_func.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/group__axis__switch__v1__0.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/jquery.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/modules.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch___config.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/tab_a.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/tab_b.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/tab_h.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/tab_s.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/tabs.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__g_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__hw_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__selftest_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__sinit_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/doc/html/api/xlogo_bg.gif (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/examples/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/examples/xaxis_switch_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/src/Makefile (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/src/xaxis_switch.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/src/xaxis_switch.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/src/xaxis_switch_g.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/src/xaxis_switch_hw.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/src/xaxis_switch_selftest.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/axis_switch_v1_0/src/xaxis_switch_sinit.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/build/vxworks5_4/xtag_csp_common_v1_00_a.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/data/common.mdd (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/HTML_custom.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/annotated.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/classes.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/doc.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/dynsections.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/files.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/globals.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/globals_defs.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/globals_func.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/globals_type.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/globals_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/group__common__v1__00__a.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/jquery.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/modules.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/struct_x_e_n_v___t_i_m_e___s_t_a_m_p.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/tab_a.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/tab_b.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/tab_h.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/tab_s.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/tabs.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xbasic__types_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xbasic__types_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xenv_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xenv__linux_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xenv__none_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xenv__standalone_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xenv__vxworks_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xlogo_bg.gif (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xparameters_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xstatus_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xutil_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xutil__memtest_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xversion_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/doc/html/api/xversion_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/Makefile (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xbasic_types.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xbasic_types.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xenv.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xenv_linux.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xenv_none.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xenv_standalone.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xenv_vxworks.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xparameters.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xstatus.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xutil.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xutil_memtest.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xversion.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/common_v1_00_a/src/xversion.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/hls_dft_v1_0/data/hls_dft.mdd (96%)
 rename thirdparty/{xilinx => libxil}/orig/hls_dft_v1_0/data/hls_dft.tcl (97%)
 rename thirdparty/{xilinx => libxil}/orig/hls_dft_v1_0/src/Makefile (95%)
 rename thirdparty/{xilinx => libxil}/orig/hls_dft_v1_0/src/xhls_dft.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/hls_dft_v1_0/src/xhls_dft.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/hls_dft_v1_0/src/xhls_dft_hw.h (97%)
 rename thirdparty/{xilinx => libxil}/orig/hls_dft_v1_0/src/xhls_dft_sinit.c (95%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/data/intc.mdd (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/data/intc.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/data/intc_header.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/data/intc_tapp.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/HTML_custom.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/annotated.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/classes.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/doc.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/dynsections.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/files.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/functions.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/functions_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/globals.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/globals_defs.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/globals_func.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/globals_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/group__intc__v3__4.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/jquery.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/modules.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/struct_x_intc.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/struct_x_intc___config.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/tab_a.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/tab_b.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/tab_h.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/tab_s.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/tabs.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc__g_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc__i_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc__intr_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc__l_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc__l_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc__options_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xintc__selftest_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/doc/html/api/xlogo_bg.gif (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/examples/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/examples/xintc_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/examples/xintc_low_level_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/examples/xintc_tapp_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/Makefile (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc_g.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc_i.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc_intr.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc_l.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc_l.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc_options.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/intc_v3_4/src/xintc_selftest.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/data/llfifo.mdd (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/data/llfifo.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/HTML_custom.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/annotated.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/classes.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/doc.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/dynsections.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/files.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/functions.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/functions_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/globals.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/globals_defs.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/globals_func.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/globals_type.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/group__llfifo__v5__0.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/jquery.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/modules.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/struct_x_ll_fifo.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/struct_x_strm___rx_fifo_streamer.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/struct_x_strm___tx_fifo_streamer.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/tab_a.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/tab_b.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/tab_h.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/tab_s.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/tabs.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/xllfifo_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/xllfifo_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/xllfifo__hw_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/doc/html/api/xlogo_bg.gif (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/examples/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/examples/xllfifo_interrupt_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/examples/xllfifo_polling_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/Makefile (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/xllfifo.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/xllfifo.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/xllfifo_g.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/xllfifo_hw.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/xllfifo_sinit.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/xstreamer.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/llfifo_v5_0/src/xstreamer.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/data/tmrctr.mdd (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/data/tmrctr.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/data/tmrctr_header.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/data/tmrctr_intr_header.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/data/tmrctr_tapp.tcl (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/HTML_custom.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/annotated.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/classes.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/doc.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/dynsections.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/files.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/functions.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/functions_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/globals.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/globals_defs.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/globals_func.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/globals_type.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/globals_vars.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v3__0.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v4__0.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/jquery.js (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/modules.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr___config.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr_stats.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/tab_a.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/tab_b.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/tab_h.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/tab_s.png (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/tabs.css (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xlogo_bg.gif (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__g_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__i_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__intr_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8h.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__options_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__selftest_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__sinit_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/doc/html/api/xtmrctr__stats_8c.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/examples/index.html (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/examples/xtmrctr_fast_intr_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/examples/xtmrctr_intr_64bit_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/examples/xtmrctr_intr_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/examples/xtmrctr_low_level_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/examples/xtmrctr_polled_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/examples/xtmrctr_selftest_example.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/Makefile (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_g.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_i.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_intr.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_l.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_l.h (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_options.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_selftest.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_sinit.c (100%)
 rename thirdparty/{xilinx => libxil}/orig/tmrctr_v4_0/src/xtmrctr_stats.c (100%)
 rename thirdparty/{xilinx => libxil}/src/xil_io.c (100%)

diff --git a/thirdparty/xilinx/Makefile b/thirdparty/libxil/Makefile
similarity index 100%
rename from thirdparty/xilinx/Makefile
rename to thirdparty/libxil/Makefile
diff --git a/thirdparty/xilinx/README.md b/thirdparty/libxil/README.md
similarity index 100%
rename from thirdparty/xilinx/README.md
rename to thirdparty/libxil/README.md
diff --git a/thirdparty/xilinx/include/xilinx/xaxidma.h b/thirdparty/libxil/include/xilinx/xaxidma.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xaxidma.h
rename to thirdparty/libxil/include/xilinx/xaxidma.h
diff --git a/thirdparty/xilinx/include/xilinx/xaxidma_bd.h b/thirdparty/libxil/include/xilinx/xaxidma_bd.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xaxidma_bd.h
rename to thirdparty/libxil/include/xilinx/xaxidma_bd.h
diff --git a/thirdparty/xilinx/include/xilinx/xaxidma_bdring.h b/thirdparty/libxil/include/xilinx/xaxidma_bdring.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xaxidma_bdring.h
rename to thirdparty/libxil/include/xilinx/xaxidma_bdring.h
diff --git a/thirdparty/xilinx/include/xilinx/xaxidma_hw.h b/thirdparty/libxil/include/xilinx/xaxidma_hw.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xaxidma_hw.h
rename to thirdparty/libxil/include/xilinx/xaxidma_hw.h
diff --git a/thirdparty/xilinx/include/xilinx/xaxidma_porting_guide.h b/thirdparty/libxil/include/xilinx/xaxidma_porting_guide.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xaxidma_porting_guide.h
rename to thirdparty/libxil/include/xilinx/xaxidma_porting_guide.h
diff --git a/thirdparty/xilinx/include/xilinx/xaxis_switch.h b/thirdparty/libxil/include/xilinx/xaxis_switch.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xaxis_switch.h
rename to thirdparty/libxil/include/xilinx/xaxis_switch.h
diff --git a/thirdparty/xilinx/include/xilinx/xaxis_switch_hw.h b/thirdparty/libxil/include/xilinx/xaxis_switch_hw.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xaxis_switch_hw.h
rename to thirdparty/libxil/include/xilinx/xaxis_switch_hw.h
diff --git a/thirdparty/xilinx/include/xilinx/xbasic_types.h b/thirdparty/libxil/include/xilinx/xbasic_types.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xbasic_types.h
rename to thirdparty/libxil/include/xilinx/xbasic_types.h
diff --git a/thirdparty/xilinx/include/xilinx/xdebug.h b/thirdparty/libxil/include/xilinx/xdebug.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xdebug.h
rename to thirdparty/libxil/include/xilinx/xdebug.h
diff --git a/thirdparty/xilinx/include/xilinx/xenv.h b/thirdparty/libxil/include/xilinx/xenv.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xenv.h
rename to thirdparty/libxil/include/xilinx/xenv.h
diff --git a/thirdparty/xilinx/include/xilinx/xenv_linux.h b/thirdparty/libxil/include/xilinx/xenv_linux.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xenv_linux.h
rename to thirdparty/libxil/include/xilinx/xenv_linux.h
diff --git a/thirdparty/xilinx/include/xilinx/xenv_none.h b/thirdparty/libxil/include/xilinx/xenv_none.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xenv_none.h
rename to thirdparty/libxil/include/xilinx/xenv_none.h
diff --git a/thirdparty/xilinx/include/xilinx/xenv_standalone.h b/thirdparty/libxil/include/xilinx/xenv_standalone.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xenv_standalone.h
rename to thirdparty/libxil/include/xilinx/xenv_standalone.h
diff --git a/thirdparty/xilinx/include/xilinx/xenv_vxworks.h b/thirdparty/libxil/include/xilinx/xenv_vxworks.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xenv_vxworks.h
rename to thirdparty/libxil/include/xilinx/xenv_vxworks.h
diff --git a/thirdparty/xilinx/include/xilinx/xhls_dft.h b/thirdparty/libxil/include/xilinx/xhls_dft.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xhls_dft.h
rename to thirdparty/libxil/include/xilinx/xhls_dft.h
diff --git a/thirdparty/xilinx/include/xilinx/xhls_dft_hw.h b/thirdparty/libxil/include/xilinx/xhls_dft_hw.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xhls_dft_hw.h
rename to thirdparty/libxil/include/xilinx/xhls_dft_hw.h
diff --git a/thirdparty/xilinx/include/xilinx/xil_assert.h b/thirdparty/libxil/include/xilinx/xil_assert.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xil_assert.h
rename to thirdparty/libxil/include/xilinx/xil_assert.h
diff --git a/thirdparty/xilinx/include/xilinx/xil_cache.h b/thirdparty/libxil/include/xilinx/xil_cache.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xil_cache.h
rename to thirdparty/libxil/include/xilinx/xil_cache.h
diff --git a/thirdparty/xilinx/include/xilinx/xil_io.h b/thirdparty/libxil/include/xilinx/xil_io.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xil_io.h
rename to thirdparty/libxil/include/xilinx/xil_io.h
diff --git a/thirdparty/xilinx/include/xilinx/xil_printf.h b/thirdparty/libxil/include/xilinx/xil_printf.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xil_printf.h
rename to thirdparty/libxil/include/xilinx/xil_printf.h
diff --git a/thirdparty/xilinx/include/xilinx/xil_types.h b/thirdparty/libxil/include/xilinx/xil_types.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xil_types.h
rename to thirdparty/libxil/include/xilinx/xil_types.h
diff --git a/thirdparty/xilinx/include/xilinx/xintc.h b/thirdparty/libxil/include/xilinx/xintc.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xintc.h
rename to thirdparty/libxil/include/xilinx/xintc.h
diff --git a/thirdparty/xilinx/include/xilinx/xintc_l.h b/thirdparty/libxil/include/xilinx/xintc_l.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xintc_l.h
rename to thirdparty/libxil/include/xilinx/xintc_l.h
diff --git a/thirdparty/xilinx/include/xilinx/xllfifo.h b/thirdparty/libxil/include/xilinx/xllfifo.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xllfifo.h
rename to thirdparty/libxil/include/xilinx/xllfifo.h
diff --git a/thirdparty/xilinx/include/xilinx/xllfifo_hw.h b/thirdparty/libxil/include/xilinx/xllfifo_hw.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xllfifo_hw.h
rename to thirdparty/libxil/include/xilinx/xllfifo_hw.h
diff --git a/thirdparty/xilinx/include/xilinx/xparameters.h b/thirdparty/libxil/include/xilinx/xparameters.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xparameters.h
rename to thirdparty/libxil/include/xilinx/xparameters.h
diff --git a/thirdparty/xilinx/include/xilinx/xstatus.h b/thirdparty/libxil/include/xilinx/xstatus.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xstatus.h
rename to thirdparty/libxil/include/xilinx/xstatus.h
diff --git a/thirdparty/xilinx/include/xilinx/xstreamer.h b/thirdparty/libxil/include/xilinx/xstreamer.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xstreamer.h
rename to thirdparty/libxil/include/xilinx/xstreamer.h
diff --git a/thirdparty/xilinx/include/xilinx/xtmrctr.h b/thirdparty/libxil/include/xilinx/xtmrctr.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xtmrctr.h
rename to thirdparty/libxil/include/xilinx/xtmrctr.h
diff --git a/thirdparty/xilinx/include/xilinx/xtmrctr_i.h b/thirdparty/libxil/include/xilinx/xtmrctr_i.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xtmrctr_i.h
rename to thirdparty/libxil/include/xilinx/xtmrctr_i.h
diff --git a/thirdparty/xilinx/include/xilinx/xtmrctr_l.h b/thirdparty/libxil/include/xilinx/xtmrctr_l.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xtmrctr_l.h
rename to thirdparty/libxil/include/xilinx/xtmrctr_l.h
diff --git a/thirdparty/xilinx/include/xilinx/xutil.h b/thirdparty/libxil/include/xilinx/xutil.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xutil.h
rename to thirdparty/libxil/include/xilinx/xutil.h
diff --git a/thirdparty/xilinx/include/xilinx/xversion.h b/thirdparty/libxil/include/xilinx/xversion.h
similarity index 100%
rename from thirdparty/xilinx/include/xilinx/xversion.h
rename to thirdparty/libxil/include/xilinx/xversion.h
diff --git a/thirdparty/xilinx/orig/README.md b/thirdparty/libxil/orig/README.md
similarity index 100%
rename from thirdparty/xilinx/orig/README.md
rename to thirdparty/libxil/orig/README.md
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/data/axidma.mdd b/thirdparty/libxil/orig/axidma_v9_0/data/axidma.mdd
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/data/axidma.mdd
rename to thirdparty/libxil/orig/axidma_v9_0/data/axidma.mdd
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/data/axidma.tcl b/thirdparty/libxil/orig/axidma_v9_0/data/axidma.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/data/axidma.tcl
rename to thirdparty/libxil/orig/axidma_v9_0/data/axidma.tcl
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/data/axidma_header.h b/thirdparty/libxil/orig/axidma_v9_0/data/axidma_header.h
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/data/axidma_header.h
rename to thirdparty/libxil/orig/axidma_v9_0/data/axidma_header.h
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/data/axidma_tapp.tcl b/thirdparty/libxil/orig/axidma_v9_0/data/axidma_tapp.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/data/axidma_tapp.tcl
rename to thirdparty/libxil/orig/axidma_v9_0/data/axidma_tapp.tcl
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/HTML_custom.css b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/HTML_custom.css
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/HTML_custom.css
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/HTML_custom.css
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/annotated.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/annotated.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/annotated.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/annotated.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/classes.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/classes.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/classes.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/classes.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/doc.png b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/doc.png
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/doc.png
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/doc.png
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/dynsections.js b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/dynsections.js
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/dynsections.js
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/dynsections.js
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/files.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/files.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/files.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/files.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/functions.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/functions.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/functions.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/functions.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/functions_vars.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/functions_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/functions_vars.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/functions_vars.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals_defs.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals_defs.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals_defs.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals_defs.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals_func.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals_func.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals_func.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals_func.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals_type.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals_type.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/globals_type.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/globals_type.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/group__axidma__v9__0.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/group__axidma__v9__0.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/group__axidma__v9__0.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/group__axidma__v9__0.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/index.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/index.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/index.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/jquery.js b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/jquery.js
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/jquery.js
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/jquery.js
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/modules.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/modules.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/modules.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/modules.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___bd_ring.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___bd_ring.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___bd_ring.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___bd_ring.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___config.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___config.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___config.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/struct_x_axi_dma___config.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_a.png b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_a.png
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_a.png
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_a.png
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_b.png b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_b.png
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_b.png
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_b.png
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_h.png b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_h.png
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_h.png
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_h.png
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_s.png b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_s.png
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tab_s.png
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tab_s.png
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tabs.css b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tabs.css
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/tabs.css
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/tabs.css
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma_8c.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma_8c.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma_8c.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma_8h.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma_8h.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma_8h.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8c.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8c.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8c.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8h.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8h.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bd_8h.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8c.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8c.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8c.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8h.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8h.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__bdring_8h.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__g_8c.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__g_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__g_8c.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__g_8c.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__hw_8h.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__hw_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__hw_8h.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__hw_8h.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__porting__guide_8h.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__porting__guide_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__porting__guide_8h.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__porting__guide_8h.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__selftest_8c.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__selftest_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__selftest_8c.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__selftest_8c.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__sinit_8c.html b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__sinit_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xaxidma__sinit_8c.html
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xaxidma__sinit_8c.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xlogo_bg.gif b/thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xlogo_bg.gif
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/doc/html/api/xlogo_bg.gif
rename to thirdparty/libxil/orig/axidma_v9_0/doc/html/api/xlogo_bg.gif
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/index.html b/thirdparty/libxil/orig/axidma_v9_0/examples/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/index.html
rename to thirdparty/libxil/orig/axidma_v9_0/examples/index.html
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_selftest.c b/thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_selftest.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_selftest.c
rename to thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_selftest.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_sg_intr.c b/thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_sg_intr.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_sg_intr.c
rename to thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_sg_intr.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_sg_poll.c b/thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_sg_poll.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_sg_poll.c
rename to thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_sg_poll.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_simple_intr.c b/thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_simple_intr.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_simple_intr.c
rename to thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_simple_intr.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_simple_poll.c b/thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_simple_poll.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_example_simple_poll.c
rename to thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_example_simple_poll.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_multichan_sg_intr.c b/thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_multichan_sg_intr.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_multichan_sg_intr.c
rename to thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_multichan_sg_intr.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_poll_multi_pkts.c b/thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_poll_multi_pkts.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/examples/xaxidma_poll_multi_pkts.c
rename to thirdparty/libxil/orig/axidma_v9_0/examples/xaxidma_poll_multi_pkts.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/Makefile b/thirdparty/libxil/orig/axidma_v9_0/src/Makefile
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/Makefile
rename to thirdparty/libxil/orig/axidma_v9_0/src/Makefile
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma.c b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma.c
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma.h b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma.h
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma.h
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma.h
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bd.c b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bd.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bd.c
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bd.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bd.h b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bd.h
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bd.h
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bd.h
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bdring.c b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bdring.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bdring.c
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bdring.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bdring.h b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bdring.h
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_bdring.h
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_bdring.h
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_g.c b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_g.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_g.c
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_g.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_hw.h b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_hw.h
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_hw.h
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_hw.h
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_porting_guide.h b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_porting_guide.h
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_porting_guide.h
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_porting_guide.h
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_selftest.c b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_selftest.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_selftest.c
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_selftest.c
diff --git a/thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_sinit.c b/thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_sinit.c
similarity index 100%
rename from thirdparty/xilinx/orig/axidma_v9_0/src/xaxidma_sinit.c
rename to thirdparty/libxil/orig/axidma_v9_0/src/xaxidma_sinit.c
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/data/axis_switch.mdd b/thirdparty/libxil/orig/axis_switch_v1_0/data/axis_switch.mdd
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/data/axis_switch.mdd
rename to thirdparty/libxil/orig/axis_switch_v1_0/data/axis_switch.mdd
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/data/axis_switch.tcl b/thirdparty/libxil/orig/axis_switch_v1_0/data/axis_switch.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/data/axis_switch.tcl
rename to thirdparty/libxil/orig/axis_switch_v1_0/data/axis_switch.tcl
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/HTML_custom.css b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/HTML_custom.css
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/HTML_custom.css
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/HTML_custom.css
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/annotated.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/annotated.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/annotated.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/annotated.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/classes.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/classes.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/classes.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/classes.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/doc.png b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/doc.png
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/doc.png
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/doc.png
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/dynsections.js b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/dynsections.js
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/dynsections.js
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/dynsections.js
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/files.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/files.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/files.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/files.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/functions.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/functions.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/functions.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/functions.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/functions_vars.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/functions_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/functions_vars.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/functions_vars.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/globals.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/globals.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/globals.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/globals.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/globals_defs.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/globals_defs.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/globals_defs.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/globals_defs.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/globals_func.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/globals_func.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/globals_func.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/globals_func.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/group__axis__switch__v1__0.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/group__axis__switch__v1__0.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/group__axis__switch__v1__0.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/group__axis__switch__v1__0.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/index.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/index.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/index.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/jquery.js b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/jquery.js
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/jquery.js
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/jquery.js
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/modules.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/modules.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/modules.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/modules.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch___config.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch___config.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch___config.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/struct_x_axis___switch___config.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_a.png b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_a.png
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_a.png
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_a.png
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_b.png b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_b.png
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_b.png
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_b.png
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_h.png b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_h.png
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_h.png
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_h.png
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_s.png b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_s.png
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tab_s.png
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tab_s.png
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tabs.css b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tabs.css
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/tabs.css
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/tabs.css
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8c.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8c.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8c.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8h.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8h.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch_8h.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__g_8c.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__g_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__g_8c.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__g_8c.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__hw_8h.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__hw_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__hw_8h.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__hw_8h.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__selftest_8c.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__selftest_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__selftest_8c.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__selftest_8c.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__sinit_8c.html b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__sinit_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__sinit_8c.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xaxis__switch__sinit_8c.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xlogo_bg.gif b/thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xlogo_bg.gif
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/doc/html/api/xlogo_bg.gif
rename to thirdparty/libxil/orig/axis_switch_v1_0/doc/html/api/xlogo_bg.gif
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/examples/index.html b/thirdparty/libxil/orig/axis_switch_v1_0/examples/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/examples/index.html
rename to thirdparty/libxil/orig/axis_switch_v1_0/examples/index.html
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/examples/xaxis_switch_example.c b/thirdparty/libxil/orig/axis_switch_v1_0/examples/xaxis_switch_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/examples/xaxis_switch_example.c
rename to thirdparty/libxil/orig/axis_switch_v1_0/examples/xaxis_switch_example.c
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/src/Makefile b/thirdparty/libxil/orig/axis_switch_v1_0/src/Makefile
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/src/Makefile
rename to thirdparty/libxil/orig/axis_switch_v1_0/src/Makefile
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch.c b/thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch.c
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch.c
rename to thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch.c
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch.h b/thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch.h
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch.h
rename to thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch.h
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_g.c b/thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_g.c
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_g.c
rename to thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_g.c
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_hw.h b/thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_hw.h
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_hw.h
rename to thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_hw.h
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_selftest.c b/thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_selftest.c
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_selftest.c
rename to thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_selftest.c
diff --git a/thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_sinit.c b/thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_sinit.c
similarity index 100%
rename from thirdparty/xilinx/orig/axis_switch_v1_0/src/xaxis_switch_sinit.c
rename to thirdparty/libxil/orig/axis_switch_v1_0/src/xaxis_switch_sinit.c
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/build/vxworks5_4/xtag_csp_common_v1_00_a.c b/thirdparty/libxil/orig/common_v1_00_a/build/vxworks5_4/xtag_csp_common_v1_00_a.c
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/build/vxworks5_4/xtag_csp_common_v1_00_a.c
rename to thirdparty/libxil/orig/common_v1_00_a/build/vxworks5_4/xtag_csp_common_v1_00_a.c
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/data/common.mdd b/thirdparty/libxil/orig/common_v1_00_a/data/common.mdd
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/data/common.mdd
rename to thirdparty/libxil/orig/common_v1_00_a/data/common.mdd
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/HTML_custom.css b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/HTML_custom.css
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/HTML_custom.css
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/HTML_custom.css
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/annotated.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/annotated.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/annotated.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/annotated.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/classes.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/classes.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/classes.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/classes.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/doc.png b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/doc.png
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/doc.png
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/doc.png
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/dynsections.js b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/dynsections.js
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/dynsections.js
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/dynsections.js
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/files.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/files.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/files.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/files.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_defs.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_defs.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_defs.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_defs.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_func.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_func.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_func.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_func.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_type.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_type.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_type.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_type.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_vars.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/globals_vars.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/globals_vars.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/group__common__v1__00__a.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/group__common__v1__00__a.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/group__common__v1__00__a.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/group__common__v1__00__a.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/index.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/index.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/index.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/jquery.js b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/jquery.js
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/jquery.js
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/jquery.js
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/modules.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/modules.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/modules.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/modules.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/struct_x_e_n_v___t_i_m_e___s_t_a_m_p.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/struct_x_e_n_v___t_i_m_e___s_t_a_m_p.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/struct_x_e_n_v___t_i_m_e___s_t_a_m_p.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/struct_x_e_n_v___t_i_m_e___s_t_a_m_p.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_a.png b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_a.png
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_a.png
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_a.png
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_b.png b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_b.png
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_b.png
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_b.png
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_h.png b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_h.png
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_h.png
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_h.png
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_s.png b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_s.png
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tab_s.png
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tab_s.png
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tabs.css b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tabs.css
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/tabs.css
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/tabs.css
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xbasic__types_8c.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xbasic__types_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xbasic__types_8c.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xbasic__types_8c.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xbasic__types_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xbasic__types_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xbasic__types_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xbasic__types_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__linux_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__linux_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__linux_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__linux_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__none_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__none_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__none_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__none_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__standalone_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__standalone_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__standalone_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__standalone_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__vxworks_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__vxworks_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xenv__vxworks_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xenv__vxworks_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xlogo_bg.gif b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xlogo_bg.gif
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xlogo_bg.gif
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xlogo_bg.gif
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xparameters_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xparameters_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xparameters_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xparameters_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xstatus_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xstatus_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xstatus_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xstatus_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xutil_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xutil_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xutil_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xutil_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xutil__memtest_8c.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xutil__memtest_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xutil__memtest_8c.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xutil__memtest_8c.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xversion_8c.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xversion_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xversion_8c.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xversion_8c.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xversion_8h.html b/thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xversion_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/doc/html/api/xversion_8h.html
rename to thirdparty/libxil/orig/common_v1_00_a/doc/html/api/xversion_8h.html
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/Makefile b/thirdparty/libxil/orig/common_v1_00_a/src/Makefile
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/Makefile
rename to thirdparty/libxil/orig/common_v1_00_a/src/Makefile
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xbasic_types.c b/thirdparty/libxil/orig/common_v1_00_a/src/xbasic_types.c
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xbasic_types.c
rename to thirdparty/libxil/orig/common_v1_00_a/src/xbasic_types.c
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xbasic_types.h b/thirdparty/libxil/orig/common_v1_00_a/src/xbasic_types.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xbasic_types.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xbasic_types.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xenv.h b/thirdparty/libxil/orig/common_v1_00_a/src/xenv.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xenv.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xenv.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xenv_linux.h b/thirdparty/libxil/orig/common_v1_00_a/src/xenv_linux.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xenv_linux.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xenv_linux.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xenv_none.h b/thirdparty/libxil/orig/common_v1_00_a/src/xenv_none.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xenv_none.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xenv_none.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xenv_standalone.h b/thirdparty/libxil/orig/common_v1_00_a/src/xenv_standalone.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xenv_standalone.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xenv_standalone.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xenv_vxworks.h b/thirdparty/libxil/orig/common_v1_00_a/src/xenv_vxworks.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xenv_vxworks.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xenv_vxworks.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xparameters.h b/thirdparty/libxil/orig/common_v1_00_a/src/xparameters.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xparameters.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xparameters.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xstatus.h b/thirdparty/libxil/orig/common_v1_00_a/src/xstatus.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xstatus.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xstatus.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xutil.h b/thirdparty/libxil/orig/common_v1_00_a/src/xutil.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xutil.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xutil.h
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xutil_memtest.c b/thirdparty/libxil/orig/common_v1_00_a/src/xutil_memtest.c
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xutil_memtest.c
rename to thirdparty/libxil/orig/common_v1_00_a/src/xutil_memtest.c
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xversion.c b/thirdparty/libxil/orig/common_v1_00_a/src/xversion.c
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xversion.c
rename to thirdparty/libxil/orig/common_v1_00_a/src/xversion.c
diff --git a/thirdparty/xilinx/orig/common_v1_00_a/src/xversion.h b/thirdparty/libxil/orig/common_v1_00_a/src/xversion.h
similarity index 100%
rename from thirdparty/xilinx/orig/common_v1_00_a/src/xversion.h
rename to thirdparty/libxil/orig/common_v1_00_a/src/xversion.h
diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd b/thirdparty/libxil/orig/hls_dft_v1_0/data/hls_dft.mdd
similarity index 96%
rename from thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd
rename to thirdparty/libxil/orig/hls_dft_v1_0/data/hls_dft.mdd
index d4eb5af41..9299365cd 100644
--- a/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd
+++ b/thirdparty/libxil/orig/hls_dft_v1_0/data/hls_dft.mdd
@@ -1,19 +1,19 @@
-# ==============================================================
-# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
-# Version: 2016.1
-# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
-# 
-# ==============================================================
-
-OPTION psf_version = 2.1;
-
-BEGIN driver hls_dft
-
- OPTION supported_peripherals = (hls_dft_v1_0 );
- OPTION driver_state = ACTIVE;
- OPTION copyfiles = all;
- OPTION name = hls_dft;
- OPTION version = 1.0;
-
-END driver
-
+# ==============================================================
+# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
+# Version: 2016.1
+# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
+# 
+# ==============================================================
+
+OPTION psf_version = 2.1;
+
+BEGIN driver hls_dft
+
+ OPTION supported_peripherals = (hls_dft_v1_0 );
+ OPTION driver_state = ACTIVE;
+ OPTION copyfiles = all;
+ OPTION name = hls_dft;
+ OPTION version = 1.0;
+
+END driver
+
diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl b/thirdparty/libxil/orig/hls_dft_v1_0/data/hls_dft.tcl
similarity index 97%
rename from thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl
rename to thirdparty/libxil/orig/hls_dft_v1_0/data/hls_dft.tcl
index 37f287491..1804d5ac9 100644
--- a/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl
+++ b/thirdparty/libxil/orig/hls_dft_v1_0/data/hls_dft.tcl
@@ -1,24 +1,24 @@
-# ==============================================================
-# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
-# Version: 2016.1
-# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
-# 
-# ==============================================================
-
-proc generate {drv_handle} {
-    xdefine_include_file $drv_handle "xparameters.h" "XHls_dft" \
-        "NUM_INSTANCES" \
-        "DEVICE_ID" \
-        "C_S_AXI_CTRL_BASEADDR" \
-        "C_S_AXI_CTRL_HIGHADDR"
-
-    xdefine_config_file $drv_handle "xhls_dft_g.c" "XHls_dft" \
-        "DEVICE_ID" \
-        "C_S_AXI_CTRL_BASEADDR"
-
-    xdefine_canonical_xpars $drv_handle "xparameters.h" "XHls_dft" \
-        "DEVICE_ID" \
-        "C_S_AXI_CTRL_BASEADDR" \
-        "C_S_AXI_CTRL_HIGHADDR"
-}
-
+# ==============================================================
+# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
+# Version: 2016.1
+# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
+# 
+# ==============================================================
+
+proc generate {drv_handle} {
+    xdefine_include_file $drv_handle "xparameters.h" "XHls_dft" \
+        "NUM_INSTANCES" \
+        "DEVICE_ID" \
+        "C_S_AXI_CTRL_BASEADDR" \
+        "C_S_AXI_CTRL_HIGHADDR"
+
+    xdefine_config_file $drv_handle "xhls_dft_g.c" "XHls_dft" \
+        "DEVICE_ID" \
+        "C_S_AXI_CTRL_BASEADDR"
+
+    xdefine_canonical_xpars $drv_handle "xparameters.h" "XHls_dft" \
+        "DEVICE_ID" \
+        "C_S_AXI_CTRL_BASEADDR" \
+        "C_S_AXI_CTRL_HIGHADDR"
+}
+
diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/Makefile b/thirdparty/libxil/orig/hls_dft_v1_0/src/Makefile
similarity index 95%
rename from thirdparty/xilinx/orig/hls_dft_v1_0/src/Makefile
rename to thirdparty/libxil/orig/hls_dft_v1_0/src/Makefile
index ebbaf9c59..8af5c0c43 100644
--- a/thirdparty/xilinx/orig/hls_dft_v1_0/src/Makefile
+++ b/thirdparty/libxil/orig/hls_dft_v1_0/src/Makefile
@@ -1,35 +1,35 @@
-# ==============================================================
-# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
-# Version: 2016.1
-# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
-# 
-# ==============================================================
-
-COMPILER=
-ARCHIVER=
-CP=cp
-COMPILER_FLAGS=
-EXTRA_COMPILER_FLAGS=
-LIB=libxil.a
-
-RELEASEDIR=../../../lib
-INCLUDEDIR=../../../include
-INCLUDES=-I./. -I${INCLUDEDIR}
-
-INCLUDEFILES=*.h
-LIBSOURCES=*.c
-OUTS = *.o 
-
-
-libs:
-	echo "Compiling hls_dft"
-	$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
-	$(ARCHIVER) -r ${RELEASEDIR}/${LIB} $(OUTS)
-	make clean
-
-include: 
-	${CP} $(INCLUDEFILES) $(INCLUDEDIR)
-
-clean:
-	rm -rf ${OUTS}
-
+# ==============================================================
+# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
+# Version: 2016.1
+# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
+# 
+# ==============================================================
+
+COMPILER=
+ARCHIVER=
+CP=cp
+COMPILER_FLAGS=
+EXTRA_COMPILER_FLAGS=
+LIB=libxil.a
+
+RELEASEDIR=../../../lib
+INCLUDEDIR=../../../include
+INCLUDES=-I./. -I${INCLUDEDIR}
+
+INCLUDEFILES=*.h
+LIBSOURCES=*.c
+OUTS = *.o 
+
+
+libs:
+	echo "Compiling hls_dft"
+	$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
+	$(ARCHIVER) -r ${RELEASEDIR}/${LIB} $(OUTS)
+	make clean
+
+include: 
+	${CP} $(INCLUDEFILES) $(INCLUDEDIR)
+
+clean:
+	rm -rf ${OUTS}
+
diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.c b/thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft.c
similarity index 100%
rename from thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.c
rename to thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft.c
diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.h b/thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft.h
similarity index 100%
rename from thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.h
rename to thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft.h
diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_hw.h b/thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft_hw.h
similarity index 97%
rename from thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_hw.h
rename to thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft_hw.h
index 4c92389d5..ff3cedc18 100644
--- a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_hw.h
+++ b/thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft_hw.h
@@ -1,52 +1,52 @@
-// ==============================================================
-// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
-// Version: 2016.1
-// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
-// 
-// ==============================================================
-
-// ctrl
-// 0x00 : Control signals
-//        bit 0  - ap_start (Read/Write/COH)
-//        bit 1  - ap_done (Read/COR)
-//        bit 2  - ap_idle (Read)
-//        bit 3  - ap_ready (Read)
-//        bit 7  - auto_restart (Read/Write)
-//        others - reserved
-// 0x04 : Global Interrupt Enable Register
-//        bit 0  - Global Interrupt Enable (Read/Write)
-//        others - reserved
-// 0x08 : IP Interrupt Enable Register (Read/Write)
-//        bit 0  - Channel 0 (ap_done)
-//        bit 1  - Channel 1 (ap_ready)
-//        others - reserved
-// 0x0c : IP Interrupt Status Register (Read/TOW)
-//        bit 0  - Channel 0 (ap_done)
-//        bit 1  - Channel 1 (ap_ready)
-//        others - reserved
-// 0x80 : Data signal of num_harmonics_V
-//        bit 7~0 - num_harmonics_V[7:0] (Read/Write)
-//        others  - reserved
-// 0x84 : reserved
-// 0x88 : Data signal of decimation_V
-//        bit 7~0 - decimation_V[7:0] (Read/Write)
-//        others  - reserved
-// 0x8c : reserved
-// 0x40 ~
-// 0x7f : Memory 'fharmonics' (16 * 32b)
-//        Word n : bit [31:0] - fharmonics[n]
-// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
-
-#define XHLS_DFT_CTRL_ADDR_AP_CTRL              0x00
-#define XHLS_DFT_CTRL_ADDR_GIE                  0x04
-#define XHLS_DFT_CTRL_ADDR_IER                  0x08
-#define XHLS_DFT_CTRL_ADDR_ISR                  0x0c
-#define XHLS_DFT_CTRL_ADDR_NUM_HARMONICS_V_DATA 0x80
-#define XHLS_DFT_CTRL_BITS_NUM_HARMONICS_V_DATA 8
-#define XHLS_DFT_CTRL_ADDR_DECIMATION_V_DATA    0x88
-#define XHLS_DFT_CTRL_BITS_DECIMATION_V_DATA    8
-#define XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE      0x40
-#define XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH      0x7f
-#define XHLS_DFT_CTRL_WIDTH_FHARMONICS          32
-#define XHLS_DFT_CTRL_DEPTH_FHARMONICS          16
-
+// ==============================================================
+// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
+// Version: 2016.1
+// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
+// 
+// ==============================================================
+
+// ctrl
+// 0x00 : Control signals
+//        bit 0  - ap_start (Read/Write/COH)
+//        bit 1  - ap_done (Read/COR)
+//        bit 2  - ap_idle (Read)
+//        bit 3  - ap_ready (Read)
+//        bit 7  - auto_restart (Read/Write)
+//        others - reserved
+// 0x04 : Global Interrupt Enable Register
+//        bit 0  - Global Interrupt Enable (Read/Write)
+//        others - reserved
+// 0x08 : IP Interrupt Enable Register (Read/Write)
+//        bit 0  - Channel 0 (ap_done)
+//        bit 1  - Channel 1 (ap_ready)
+//        others - reserved
+// 0x0c : IP Interrupt Status Register (Read/TOW)
+//        bit 0  - Channel 0 (ap_done)
+//        bit 1  - Channel 1 (ap_ready)
+//        others - reserved
+// 0x80 : Data signal of num_harmonics_V
+//        bit 7~0 - num_harmonics_V[7:0] (Read/Write)
+//        others  - reserved
+// 0x84 : reserved
+// 0x88 : Data signal of decimation_V
+//        bit 7~0 - decimation_V[7:0] (Read/Write)
+//        others  - reserved
+// 0x8c : reserved
+// 0x40 ~
+// 0x7f : Memory 'fharmonics' (16 * 32b)
+//        Word n : bit [31:0] - fharmonics[n]
+// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
+
+#define XHLS_DFT_CTRL_ADDR_AP_CTRL              0x00
+#define XHLS_DFT_CTRL_ADDR_GIE                  0x04
+#define XHLS_DFT_CTRL_ADDR_IER                  0x08
+#define XHLS_DFT_CTRL_ADDR_ISR                  0x0c
+#define XHLS_DFT_CTRL_ADDR_NUM_HARMONICS_V_DATA 0x80
+#define XHLS_DFT_CTRL_BITS_NUM_HARMONICS_V_DATA 8
+#define XHLS_DFT_CTRL_ADDR_DECIMATION_V_DATA    0x88
+#define XHLS_DFT_CTRL_BITS_DECIMATION_V_DATA    8
+#define XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE      0x40
+#define XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH      0x7f
+#define XHLS_DFT_CTRL_WIDTH_FHARMONICS          32
+#define XHLS_DFT_CTRL_DEPTH_FHARMONICS          16
+
diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_sinit.c b/thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft_sinit.c
similarity index 95%
rename from thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_sinit.c
rename to thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft_sinit.c
index e657d35f9..4b39ef2f0 100644
--- a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_sinit.c
+++ b/thirdparty/libxil/orig/hls_dft_v1_0/src/xhls_dft_sinit.c
@@ -1,46 +1,46 @@
-// ==============================================================
-// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
-// Version: 2016.1
-// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
-// 
-// ==============================================================
-
-#ifndef __linux__
-
-#include "xstatus.h"
-#include "xparameters.h"
-#include "xhls_dft.h"
-
-extern XHls_dft_Config XHls_dft_ConfigTable[];
-
-XHls_dft_Config *XHls_dft_LookupConfig(u16 DeviceId) {
-	XHls_dft_Config *ConfigPtr = NULL;
-
-	int Index;
-
-	for (Index = 0; Index < XPAR_XHLS_DFT_NUM_INSTANCES; Index++) {
-		if (XHls_dft_ConfigTable[Index].DeviceId == DeviceId) {
-			ConfigPtr = &XHls_dft_ConfigTable[Index];
-			break;
-		}
-	}
-
-	return ConfigPtr;
-}
-
-int XHls_dft_Initialize(XHls_dft *InstancePtr, u16 DeviceId) {
-	XHls_dft_Config *ConfigPtr;
-
-	Xil_AssertNonvoid(InstancePtr != NULL);
-
-	ConfigPtr = XHls_dft_LookupConfig(DeviceId);
-	if (ConfigPtr == NULL) {
-		InstancePtr->IsReady = 0;
-		return (XST_DEVICE_NOT_FOUND);
-	}
-
-	return XHls_dft_CfgInitialize(InstancePtr, ConfigPtr);
-}
-
-#endif
-
+// ==============================================================
+// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
+// Version: 2016.1
+// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
+// 
+// ==============================================================
+
+#ifndef __linux__
+
+#include "xstatus.h"
+#include "xparameters.h"
+#include "xhls_dft.h"
+
+extern XHls_dft_Config XHls_dft_ConfigTable[];
+
+XHls_dft_Config *XHls_dft_LookupConfig(u16 DeviceId) {
+	XHls_dft_Config *ConfigPtr = NULL;
+
+	int Index;
+
+	for (Index = 0; Index < XPAR_XHLS_DFT_NUM_INSTANCES; Index++) {
+		if (XHls_dft_ConfigTable[Index].DeviceId == DeviceId) {
+			ConfigPtr = &XHls_dft_ConfigTable[Index];
+			break;
+		}
+	}
+
+	return ConfigPtr;
+}
+
+int XHls_dft_Initialize(XHls_dft *InstancePtr, u16 DeviceId) {
+	XHls_dft_Config *ConfigPtr;
+
+	Xil_AssertNonvoid(InstancePtr != NULL);
+
+	ConfigPtr = XHls_dft_LookupConfig(DeviceId);
+	if (ConfigPtr == NULL) {
+		InstancePtr->IsReady = 0;
+		return (XST_DEVICE_NOT_FOUND);
+	}
+
+	return XHls_dft_CfgInitialize(InstancePtr, ConfigPtr);
+}
+
+#endif
+
diff --git a/thirdparty/xilinx/orig/intc_v3_4/data/intc.mdd b/thirdparty/libxil/orig/intc_v3_4/data/intc.mdd
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/data/intc.mdd
rename to thirdparty/libxil/orig/intc_v3_4/data/intc.mdd
diff --git a/thirdparty/xilinx/orig/intc_v3_4/data/intc.tcl b/thirdparty/libxil/orig/intc_v3_4/data/intc.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/data/intc.tcl
rename to thirdparty/libxil/orig/intc_v3_4/data/intc.tcl
diff --git a/thirdparty/xilinx/orig/intc_v3_4/data/intc_header.h b/thirdparty/libxil/orig/intc_v3_4/data/intc_header.h
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/data/intc_header.h
rename to thirdparty/libxil/orig/intc_v3_4/data/intc_header.h
diff --git a/thirdparty/xilinx/orig/intc_v3_4/data/intc_tapp.tcl b/thirdparty/libxil/orig/intc_v3_4/data/intc_tapp.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/data/intc_tapp.tcl
rename to thirdparty/libxil/orig/intc_v3_4/data/intc_tapp.tcl
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/HTML_custom.css b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/HTML_custom.css
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/HTML_custom.css
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/HTML_custom.css
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/annotated.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/annotated.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/annotated.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/annotated.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/classes.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/classes.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/classes.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/classes.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/doc.png b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/doc.png
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/doc.png
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/doc.png
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/dynsections.js b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/dynsections.js
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/dynsections.js
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/dynsections.js
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/files.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/files.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/files.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/files.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/functions.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/functions.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/functions.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/functions.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/functions_vars.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/functions_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/functions_vars.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/functions_vars.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals_defs.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals_defs.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals_defs.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals_defs.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals_func.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals_func.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals_func.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals_func.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals_vars.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/globals_vars.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/globals_vars.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/group__intc__v3__4.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/group__intc__v3__4.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/group__intc__v3__4.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/group__intc__v3__4.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/index.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/index.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/index.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/jquery.js b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/jquery.js
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/jquery.js
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/jquery.js
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/modules.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/modules.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/modules.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/modules.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/struct_x_intc.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/struct_x_intc.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/struct_x_intc.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/struct_x_intc.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/struct_x_intc___config.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/struct_x_intc___config.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/struct_x_intc___config.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/struct_x_intc___config.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_a.png b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_a.png
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_a.png
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_a.png
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_b.png b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_b.png
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_b.png
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_b.png
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_h.png b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_h.png
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_h.png
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_h.png
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_s.png b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_s.png
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tab_s.png
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/tab_s.png
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tabs.css b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/tabs.css
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/tabs.css
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/tabs.css
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc_8c.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc_8c.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc_8c.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc_8h.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc_8h.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc_8h.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__g_8c.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__g_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__g_8c.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__g_8c.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__i_8h.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__i_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__i_8h.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__i_8h.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__intr_8c.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__intr_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__intr_8c.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__intr_8c.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__l_8c.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__l_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__l_8c.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__l_8c.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__l_8h.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__l_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__l_8h.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__l_8h.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__options_8c.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__options_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__options_8c.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__options_8c.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__selftest_8c.html b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__selftest_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xintc__selftest_8c.html
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xintc__selftest_8c.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xlogo_bg.gif b/thirdparty/libxil/orig/intc_v3_4/doc/html/api/xlogo_bg.gif
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/doc/html/api/xlogo_bg.gif
rename to thirdparty/libxil/orig/intc_v3_4/doc/html/api/xlogo_bg.gif
diff --git a/thirdparty/xilinx/orig/intc_v3_4/examples/index.html b/thirdparty/libxil/orig/intc_v3_4/examples/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/examples/index.html
rename to thirdparty/libxil/orig/intc_v3_4/examples/index.html
diff --git a/thirdparty/xilinx/orig/intc_v3_4/examples/xintc_example.c b/thirdparty/libxil/orig/intc_v3_4/examples/xintc_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/examples/xintc_example.c
rename to thirdparty/libxil/orig/intc_v3_4/examples/xintc_example.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/examples/xintc_low_level_example.c b/thirdparty/libxil/orig/intc_v3_4/examples/xintc_low_level_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/examples/xintc_low_level_example.c
rename to thirdparty/libxil/orig/intc_v3_4/examples/xintc_low_level_example.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/examples/xintc_tapp_example.c b/thirdparty/libxil/orig/intc_v3_4/examples/xintc_tapp_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/examples/xintc_tapp_example.c
rename to thirdparty/libxil/orig/intc_v3_4/examples/xintc_tapp_example.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/Makefile b/thirdparty/libxil/orig/intc_v3_4/src/Makefile
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/Makefile
rename to thirdparty/libxil/orig/intc_v3_4/src/Makefile
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc.c b/thirdparty/libxil/orig/intc_v3_4/src/xintc.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc.c
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc.h b/thirdparty/libxil/orig/intc_v3_4/src/xintc.h
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc.h
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc.h
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc_g.c b/thirdparty/libxil/orig/intc_v3_4/src/xintc_g.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc_g.c
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc_g.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc_i.h b/thirdparty/libxil/orig/intc_v3_4/src/xintc_i.h
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc_i.h
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc_i.h
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc_intr.c b/thirdparty/libxil/orig/intc_v3_4/src/xintc_intr.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc_intr.c
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc_intr.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc_l.c b/thirdparty/libxil/orig/intc_v3_4/src/xintc_l.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc_l.c
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc_l.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc_l.h b/thirdparty/libxil/orig/intc_v3_4/src/xintc_l.h
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc_l.h
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc_l.h
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc_options.c b/thirdparty/libxil/orig/intc_v3_4/src/xintc_options.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc_options.c
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc_options.c
diff --git a/thirdparty/xilinx/orig/intc_v3_4/src/xintc_selftest.c b/thirdparty/libxil/orig/intc_v3_4/src/xintc_selftest.c
similarity index 100%
rename from thirdparty/xilinx/orig/intc_v3_4/src/xintc_selftest.c
rename to thirdparty/libxil/orig/intc_v3_4/src/xintc_selftest.c
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/data/llfifo.mdd b/thirdparty/libxil/orig/llfifo_v5_0/data/llfifo.mdd
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/data/llfifo.mdd
rename to thirdparty/libxil/orig/llfifo_v5_0/data/llfifo.mdd
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/data/llfifo.tcl b/thirdparty/libxil/orig/llfifo_v5_0/data/llfifo.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/data/llfifo.tcl
rename to thirdparty/libxil/orig/llfifo_v5_0/data/llfifo.tcl
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/HTML_custom.css b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/HTML_custom.css
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/HTML_custom.css
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/HTML_custom.css
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/annotated.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/annotated.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/annotated.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/annotated.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/classes.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/classes.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/classes.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/classes.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/doc.png b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/doc.png
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/doc.png
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/doc.png
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/dynsections.js b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/dynsections.js
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/dynsections.js
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/dynsections.js
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/files.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/files.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/files.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/files.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/functions.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/functions.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/functions.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/functions.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/functions_vars.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/functions_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/functions_vars.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/functions_vars.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals_defs.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals_defs.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals_defs.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals_defs.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals_func.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals_func.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals_func.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals_func.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals_type.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals_type.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/globals_type.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/globals_type.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/group__llfifo__v5__0.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/group__llfifo__v5__0.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/group__llfifo__v5__0.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/group__llfifo__v5__0.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/index.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/index.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/index.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/jquery.js b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/jquery.js
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/jquery.js
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/jquery.js
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/modules.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/modules.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/modules.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/modules.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/struct_x_ll_fifo.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/struct_x_ll_fifo.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/struct_x_ll_fifo.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/struct_x_ll_fifo.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/struct_x_strm___rx_fifo_streamer.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/struct_x_strm___rx_fifo_streamer.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/struct_x_strm___rx_fifo_streamer.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/struct_x_strm___rx_fifo_streamer.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/struct_x_strm___tx_fifo_streamer.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/struct_x_strm___tx_fifo_streamer.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/struct_x_strm___tx_fifo_streamer.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/struct_x_strm___tx_fifo_streamer.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_a.png b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_a.png
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_a.png
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_a.png
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_b.png b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_b.png
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_b.png
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_b.png
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_h.png b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_h.png
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_h.png
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_h.png
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_s.png b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_s.png
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tab_s.png
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tab_s.png
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tabs.css b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tabs.css
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/tabs.css
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/tabs.css
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xllfifo_8c.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xllfifo_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xllfifo_8c.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xllfifo_8c.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xllfifo_8h.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xllfifo_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xllfifo_8h.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xllfifo_8h.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xllfifo__hw_8h.html b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xllfifo__hw_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xllfifo__hw_8h.html
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xllfifo__hw_8h.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xlogo_bg.gif b/thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xlogo_bg.gif
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/doc/html/api/xlogo_bg.gif
rename to thirdparty/libxil/orig/llfifo_v5_0/doc/html/api/xlogo_bg.gif
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/examples/index.html b/thirdparty/libxil/orig/llfifo_v5_0/examples/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/examples/index.html
rename to thirdparty/libxil/orig/llfifo_v5_0/examples/index.html
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/examples/xllfifo_interrupt_example.c b/thirdparty/libxil/orig/llfifo_v5_0/examples/xllfifo_interrupt_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/examples/xllfifo_interrupt_example.c
rename to thirdparty/libxil/orig/llfifo_v5_0/examples/xllfifo_interrupt_example.c
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/examples/xllfifo_polling_example.c b/thirdparty/libxil/orig/llfifo_v5_0/examples/xllfifo_polling_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/examples/xllfifo_polling_example.c
rename to thirdparty/libxil/orig/llfifo_v5_0/examples/xllfifo_polling_example.c
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/Makefile b/thirdparty/libxil/orig/llfifo_v5_0/src/Makefile
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/Makefile
rename to thirdparty/libxil/orig/llfifo_v5_0/src/Makefile
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo.c b/thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo.c
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo.c
rename to thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo.c
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo.h b/thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo.h
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo.h
rename to thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo.h
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo_g.c b/thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo_g.c
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo_g.c
rename to thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo_g.c
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo_hw.h b/thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo_hw.h
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo_hw.h
rename to thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo_hw.h
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo_sinit.c b/thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo_sinit.c
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/xllfifo_sinit.c
rename to thirdparty/libxil/orig/llfifo_v5_0/src/xllfifo_sinit.c
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/xstreamer.c b/thirdparty/libxil/orig/llfifo_v5_0/src/xstreamer.c
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/xstreamer.c
rename to thirdparty/libxil/orig/llfifo_v5_0/src/xstreamer.c
diff --git a/thirdparty/xilinx/orig/llfifo_v5_0/src/xstreamer.h b/thirdparty/libxil/orig/llfifo_v5_0/src/xstreamer.h
similarity index 100%
rename from thirdparty/xilinx/orig/llfifo_v5_0/src/xstreamer.h
rename to thirdparty/libxil/orig/llfifo_v5_0/src/xstreamer.h
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr.mdd b/thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr.mdd
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr.mdd
rename to thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr.mdd
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr.tcl b/thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr.tcl
rename to thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr.tcl
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr_header.h b/thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr_header.h
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr_header.h
rename to thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr_header.h
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr_intr_header.h b/thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr_intr_header.h
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr_intr_header.h
rename to thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr_intr_header.h
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr_tapp.tcl b/thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr_tapp.tcl
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/data/tmrctr_tapp.tcl
rename to thirdparty/libxil/orig/tmrctr_v4_0/data/tmrctr_tapp.tcl
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/HTML_custom.css b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/HTML_custom.css
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/HTML_custom.css
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/HTML_custom.css
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/annotated.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/annotated.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/annotated.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/annotated.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/classes.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/classes.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/classes.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/classes.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/doc.png b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/doc.png
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/doc.png
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/doc.png
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/dynsections.js b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/dynsections.js
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/dynsections.js
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/dynsections.js
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/files.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/files.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/files.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/files.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/functions.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/functions.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/functions.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/functions.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/functions_vars.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/functions_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/functions_vars.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/functions_vars.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_defs.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_defs.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_defs.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_defs.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_func.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_func.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_func.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_func.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_type.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_type.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_type.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_type.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_vars.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_vars.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/globals_vars.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/globals_vars.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v3__0.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v3__0.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v3__0.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v3__0.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v4__0.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v4__0.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v4__0.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/group__tmrctr__v4__0.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/index.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/index.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/index.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/jquery.js b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/jquery.js
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/jquery.js
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/jquery.js
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/modules.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/modules.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/modules.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/modules.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr___config.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr___config.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr___config.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr___config.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr_stats.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr_stats.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr_stats.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/struct_x_tmr_ctr_stats.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_a.png b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_a.png
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_a.png
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_a.png
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_b.png b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_b.png
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_b.png
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_b.png
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_h.png b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_h.png
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_h.png
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_h.png
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_s.png b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_s.png
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tab_s.png
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tab_s.png
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tabs.css b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tabs.css
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/tabs.css
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/tabs.css
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xlogo_bg.gif b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xlogo_bg.gif
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xlogo_bg.gif
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xlogo_bg.gif
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8h.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8h.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr_8h.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__g_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__g_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__g_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__g_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__i_8h.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__i_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__i_8h.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__i_8h.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__intr_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__intr_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__intr_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__intr_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8h.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8h.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8h.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__l_8h.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__options_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__options_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__options_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__options_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__selftest_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__selftest_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__selftest_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__selftest_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__sinit_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__sinit_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__sinit_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__sinit_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__stats_8c.html b/thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__stats_8c.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/doc/html/api/xtmrctr__stats_8c.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/doc/html/api/xtmrctr__stats_8c.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/examples/index.html b/thirdparty/libxil/orig/tmrctr_v4_0/examples/index.html
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/examples/index.html
rename to thirdparty/libxil/orig/tmrctr_v4_0/examples/index.html
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_fast_intr_example.c b/thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_fast_intr_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_fast_intr_example.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_fast_intr_example.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_intr_64bit_example.c b/thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_intr_64bit_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_intr_64bit_example.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_intr_64bit_example.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_intr_example.c b/thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_intr_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_intr_example.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_intr_example.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_low_level_example.c b/thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_low_level_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_low_level_example.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_low_level_example.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_polled_example.c b/thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_polled_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_polled_example.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_polled_example.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_selftest_example.c b/thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_selftest_example.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/examples/xtmrctr_selftest_example.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/examples/xtmrctr_selftest_example.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/Makefile b/thirdparty/libxil/orig/tmrctr_v4_0/src/Makefile
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/Makefile
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/Makefile
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr.h b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr.h
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr.h
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr.h
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_g.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_g.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_g.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_g.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_i.h b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_i.h
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_i.h
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_i.h
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_intr.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_intr.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_intr.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_intr.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_l.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_l.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_l.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_l.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_l.h b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_l.h
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_l.h
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_l.h
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_options.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_options.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_options.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_options.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_selftest.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_selftest.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_selftest.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_selftest.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_sinit.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_sinit.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_sinit.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_sinit.c
diff --git a/thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_stats.c b/thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_stats.c
similarity index 100%
rename from thirdparty/xilinx/orig/tmrctr_v4_0/src/xtmrctr_stats.c
rename to thirdparty/libxil/orig/tmrctr_v4_0/src/xtmrctr_stats.c
diff --git a/thirdparty/xilinx/src/xil_io.c b/thirdparty/libxil/src/xil_io.c
similarity index 100%
rename from thirdparty/xilinx/src/xil_io.c
rename to thirdparty/libxil/src/xil_io.c

From 0e847a297c0a36bdea541a18f8c32aa76b8a1d3b Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 22 Sep 2016 01:15:30 -0400
Subject: [PATCH 07/45] added dependencies as Git submodules

---
 .gitmodules              | 18 ++++++++++++++++++
 thirdparty/criterion     |  1 +
 thirdparty/libconfig     |  1 +
 thirdparty/libnl         |  1 +
 thirdparty/libwebsockets |  1 +
 thirdparty/pciutils      |  1 +
 6 files changed, 23 insertions(+)
 create mode 160000 thirdparty/criterion
 create mode 160000 thirdparty/libconfig
 create mode 160000 thirdparty/libnl
 create mode 160000 thirdparty/libwebsockets
 create mode 160000 thirdparty/pciutils

diff --git a/.gitmodules b/.gitmodules
index e69de29bb..d990e7e32 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -0,0 +1,18 @@
+[submodule "web/socket/flot"]
+	path = web/socket/flot
+	url = https://github.com/flot/flot.git
+[submodule "thirdparty/libconfig"]
+	path = thirdparty/libconfig
+	url = https://github.com/hyperrealm/libconfig.git
+[submodule "thirdparty/libwebsockets"]
+	path = thirdparty/libwebsockets
+	url = https://github.com/warmcat/libwebsockets
+[submodule "thirdparty/criterion"]
+	path = thirdparty/criterion
+	url = https://github.com/Snaipe/Criterion
+[submodule "thirdparty/libnl"]
+	path = thirdparty/libnl
+	url = https://github.com/thom311/libnl.git
+[submodule "thirdparty/pciutils"]
+	path = thirdparty/pciutils
+	url = https://github.com/pciutils/pciutils.git
diff --git a/thirdparty/criterion b/thirdparty/criterion
new file mode 160000
index 000000000..20a9da7c1
--- /dev/null
+++ b/thirdparty/criterion
@@ -0,0 +1 @@
+Subproject commit 20a9da7c1897f16d84185481ff293cd8af8d644b
diff --git a/thirdparty/libconfig b/thirdparty/libconfig
new file mode 160000
index 000000000..5a06a161a
--- /dev/null
+++ b/thirdparty/libconfig
@@ -0,0 +1 @@
+Subproject commit 5a06a161afacce6e32491db33781dab2f216df71
diff --git a/thirdparty/libnl b/thirdparty/libnl
new file mode 160000
index 000000000..7bf2e6465
--- /dev/null
+++ b/thirdparty/libnl
@@ -0,0 +1 @@
+Subproject commit 7bf2e64654de75578db34b0eab53a3e4d106d65f
diff --git a/thirdparty/libwebsockets b/thirdparty/libwebsockets
new file mode 160000
index 000000000..0c984014f
--- /dev/null
+++ b/thirdparty/libwebsockets
@@ -0,0 +1 @@
+Subproject commit 0c984014f0a82e184af2ff18f97b45e2cbccd0bd
diff --git a/thirdparty/pciutils b/thirdparty/pciutils
new file mode 160000
index 000000000..2f8b8f9fc
--- /dev/null
+++ b/thirdparty/pciutils
@@ -0,0 +1 @@
+Subproject commit 2f8b8f9fcfcdb5d5692c6da887fc7f9c0cac847c

From ba399a0b1d99323714b0ff3714767a5464513249 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 22 Sep 2016 21:20:21 -0400
Subject: [PATCH 08/45] fixed compilation: functionality still heavily broken.
 its a mess right now

---
 Makefile                |  4 +--
 include/villas/hooks.h  |  2 --
 include/villas/memory.h |  2 +-
 include/villas/node.h   |  3 --
 include/villas/path.h   |  2 +-
 include/villas/pool.h   |  8 +++++
 include/villas/queue.h  | 12 ++++++--
 include/villas/sample.h |  3 +-
 lib/hooks/hooks-stats.c | 38 ++++++++++--------------
 lib/memory.c            |  6 ++++
 lib/nodes/fpga.c        |  2 +-
 lib/path.c              | 66 ++++++-----------------------------------
 lib/pool.c              | 28 +++++++----------
 lib/queue.c             | 10 +++----
 src/pipe.c              |  4 +--
 15 files changed, 71 insertions(+), 119 deletions(-)

diff --git a/Makefile b/Makefile
index 64ef7973e..e6128729a 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ LIB_SRCS = $(wildcard lib/hooks/*.c)			\
 	   $(addprefix lib/,				\
               sample.c path.c node.c hooks.c		\
               log.c utils.c cfg.c hist.c timing.c	\
-              pool.c list.c queue.c lstack.c		\
+              pool.c list.c queue.c memory.c		\
            )						\
 
 # Default prefix for install target
@@ -73,8 +73,6 @@ ifeq ($(shell pkg-config libpci; echo $$?),0)
 	LIB_SRCS    += $(addprefix lib/kernel/, pci.c vfio.c)
 	LIB_SRCS    += $(wildcard  lib/fpga/*.c)
 	LDLIBS      += -lxil
-	LDFLAGS     += -Lthirdparty/xilinx -Wl,-rpath,'$$ORIGIN/thirdparty/xilinx'
-	CFLAGS      += -Ithirdparty/xilinx/include
 	PKGS        += libpci
 	TARGETS     += fpga
 endif
diff --git a/include/villas/hooks.h b/include/villas/hooks.h
index 67356df87..9eae7bb6b 100644
--- a/include/villas/hooks.h
+++ b/include/villas/hooks.h
@@ -107,8 +107,6 @@ struct hook {
 
 	struct sample *last;
 	struct sample *prev;
-	
-	qptr_t head;
 
 	hook_cb_t cb;		/**< The hook callback function as a function pointer. */
 };
diff --git a/include/villas/memory.h b/include/villas/memory.h
index 753c189c9..d66955727 100644
--- a/include/villas/memory.h
+++ b/include/villas/memory.h
@@ -43,7 +43,7 @@ struct memzone {
 
 void * memory_alloc(const struct memtype *m, size_t len);
 
-void * memory_aligned_alloc(const struct memtype *m, size_t len, size_t alignment);
+void * memory_alloc_aligned(const struct memtype *m, size_t len, size_t alignment);
 
 int memory_free(const struct memtype *m, void *ptr, size_t len);
 
diff --git a/include/villas/node.h b/include/villas/node.h
index 7cb8394db..e01863444 100644
--- a/include/villas/node.h
+++ b/include/villas/node.h
@@ -48,9 +48,6 @@ struct node
 	int vectorize;		/**< Number of messages to send / recv at once (scatter / gather) */
 	int affinity;		/**< CPU Affinity of this node */
 
-	qptr_t sent;		/**< Number of samples sent / written to this node. */
-	qptr_t received;	/**< Number of samples received / read from this node. */
-
 	enum node_state {
 		NODE_INVALID,	/**< This node object is not in a valid state. */
 		NODE_CREATED,	/**< This node has been parsed from the configuration. */
diff --git a/include/villas/path.h b/include/villas/path.h
index a07915a6b..801acf51d 100644
--- a/include/villas/path.h
+++ b/include/villas/path.h
@@ -42,7 +42,7 @@ struct path
 	
 	struct node *in;		/**< Pointer to the incoming node */
 	
-	struct queue queue;		/**< A ring buffer for all received messages (unmodified) */
+	struct mpmc_queue queue;	/**< A ring buffer for all received messages (unmodified) */
 	struct pool pool;		/**< Memory pool for messages / samples. */
 
 	struct list destinations;	/**< List of all outgoing nodes */
diff --git a/include/villas/pool.h b/include/villas/pool.h
index 87bf96a4a..c6ffcc466 100644
--- a/include/villas/pool.h
+++ b/include/villas/pool.h
@@ -12,9 +12,17 @@
 #ifndef _POOL_H_
 #define _POOL_H_
 
+#include <sys/types.h>
+
+#include "queue.h"
+
+struct memtype;
+
 /** A thread-safe memory pool */
 struct pool {
 	void *buffer;		/**< Address of the underlying memory area */
+	const struct memtype *mem;
+	
 	size_t len;		/**< Length of the underlying memory area */
 	
 	size_t blocksz;		/**< Length of a block in bytes */
diff --git a/include/villas/queue.h b/include/villas/queue.h
index 6663f2b09..bf2a6cac0 100644
--- a/include/villas/queue.h
+++ b/include/villas/queue.h
@@ -39,21 +39,27 @@
 
 #include "memory.h"
 
-static size_t const cacheline_size = 64;
-typedef char cacheline_pad_t[cacheline_size];
+#define CACHELINE_SIZE 64
+typedef char cacheline_pad_t[CACHELINE_SIZE];
 
 struct mpmc_queue {
 	cacheline_pad_t _pad0;	/**< Shared area: all threads read */
+
 	struct memtype const * mem;
 	size_t buffer_mask;
 	struct mpmc_queue_cell {
 		atomic_size_t sequence;
 		void *data;
 	} *buffer;
+
 	cacheline_pad_t	_pad1;	/**> Producer area: only producers read & write */
+
 	atomic_size_t	tail;	/**> Queue tail pointer */
+
 	cacheline_pad_t	_pad2;	/**> Consumer area: only consumers read & write */
+
 	atomic_size_t	head;	/**> Queue head pointer */
+
 	cacheline_pad_t	_pad3;	/**> @todo Why needed? */
 };
 
@@ -76,6 +82,6 @@ int mpmc_queue_pull(struct mpmc_queue *q, void **ptr);
 
 int mpmc_queue_push_many(struct mpmc_queue *q, void *ptr[], size_t cnt);
 
-int mpmc_queue_pull_many(struct mpmc_queue *q, void **ptr[], size_t cnt);
+int mpmc_queue_pull_many(struct mpmc_queue *q, void *ptr[], size_t cnt);
 
 #endif /* _MPMC_QUEUE_H_ */
\ No newline at end of file
diff --git a/include/villas/sample.h b/include/villas/sample.h
index 72d00ce05..5d2db263d 100644
--- a/include/villas/sample.h
+++ b/include/villas/sample.h
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdint.h>
+#include <stdatomic.h>
 #include <time.h>
 #include <sys/types.h>
 
@@ -42,7 +43,7 @@ struct sample {
 	int length;		/**< The number of values in sample::values which are valid. */
 	int capacity;		/**< The number of values in sample::values for which memory is reserved. */
 	
-	atomic_int_t refcnt;	/**< Reference counter. */
+	atomic_int refcnt;	/**< Reference counter. */
 	struct pool *pool;	/**< This sample is belong to this memory pool. */
 
 	/** All timestamps are seconds / nano seconds after 1.1.1970 UTC */
diff --git a/lib/hooks/hooks-stats.c b/lib/hooks/hooks-stats.c
index 06d4a4ecb..0d1ce43af 100644
--- a/lib/hooks/hooks-stats.c
+++ b/lib/hooks/hooks-stats.c
@@ -18,10 +18,9 @@ void hook_stats_header()
 {
 	#define UNIT(u)	"(" YEL(u) ")"
 
-	stats("%-40s|%19s|%19s|%19s|%19s|%19s|%19s|%10s|", "Source " MAG("=>") " Destination",
+	stats("%-40s|%19s|%19s|%19s|%19s|%19s|%10s|", "Source " MAG("=>") " Destination",
 		"OWD"	UNIT("S") " ",
 		"Rate"	UNIT("p/S") " ",
-		"Recv"	UNIT("p") " ",
 		"Drop"	UNIT("p") " ",
 		"Skip"	UNIT("p") " ",
 		"Inval" UNIT("p") " ",
@@ -84,8 +83,8 @@ int hook_stats(struct path *p, struct hook *h, int when, struct sample *smps[],
 			break;
 			
 		case HOOK_PERIODIC:
-			stats("%-40.40s|%10s|%10s|%10ju|%10ju|%10ju|%10ju|%10ju|", path_name(p), "", "", 
-				p->in->received, p->dropped, p->skipped, p->invalid, p->overrun);
+			stats("%-40.40s|%10s|%10s|%10ju|%10ju|%10ju|%10ju|", path_name(p), "", "", 
+				p->dropped, p->skipped, p->invalid, p->overrun);
 			break;
 	}
 	
@@ -117,26 +116,19 @@ int hook_stats_send(struct path *p, struct hook *h, int when, struct sample *smp
 			break;
 
 		case HOOK_PERIODIC: {
-			int ret, length;
-			char buf[SAMPLE_LEN(9)];
-			struct sample *last, *smp = (struct sample *) buf;
+			int i;
+			char buf[SAMPLE_LEN(16)];
+			struct sample *smp = (struct sample *) buf;
 			
-			ret = queue_get(&p->queue, (void **) &last, p->in->received - 1);
-			if (ret == 1)
-				length = last->length;
-			else
-				length =  -1;
-			
-			smp->data[0].f = p->in->received;
-			smp->data[1].f = length;
-			smp->data[2].f = p->invalid;
-			smp->data[3].f = p->skipped;
-			smp->data[4].f = p->dropped;
-			smp->data[5].f = p->overrun;
-			smp->data[6].f =       p->hist.owd.last,
-			smp->data[7].f = 1.0 / p->hist.gap_msg.last;
-			smp->data[8].f = 1.0 / p->hist.gap_recv.last;
-			smp->length = 9;
+			i = 0;
+			smp->data[i++].f = p->invalid;
+			smp->data[i++].f = p->skipped;
+			smp->data[i++].f = p->dropped;
+			smp->data[i++].f = p->overrun;
+			smp->data[i++].f =       p->hist.owd.last,
+			smp->data[i++].f = 1.0 / p->hist.gap_msg.last;
+			smp->data[i++].f = 1.0 / p->hist.gap_recv.last;
+			smp->length = i;
 			
 			node_write(private->dest, &smp, 1); /* Send single message with statistics to destination node */
 			break;
diff --git a/lib/memory.c b/lib/memory.c
index c91c86d1d..e6501bf01 100644
--- a/lib/memory.c
+++ b/lib/memory.c
@@ -22,6 +22,12 @@ void * memory_alloc(const struct memtype *m, size_t len)
 	return m->alloc(len);
 }
 
+void * memory_alloc_aligned(const struct memtype *m, size_t len, size_t alignment)
+{
+	warn("memory_alloc_aligned: not implemented yet!");
+	return memory_alloc(m, len);
+}
+
 void * memory_aligned_alloc(const struct memtype *m, size_t len, size_t align)
 {
 	warn("memory_aligned_alloc: not implemented yet. Falling back to unaligned version.");
diff --git a/lib/nodes/fpga.c b/lib/nodes/fpga.c
index 12cddd44f..9c3851db0 100644
--- a/lib/nodes/fpga.c
+++ b/lib/nodes/fpga.c
@@ -370,7 +370,7 @@ int fpga_read(struct node *n, struct sample *smps[], unsigned cnt)
 	size_t len = SAMPLE_DATA_LEN(64);
 	
 	/* We dont get a sequence no from the FPGA. Lets fake it */
-	smp->sequence = n->received;
+	smp->sequence = -1;
 	smp->ts.origin = time_now();
 
 	/* Read data from RTDS */
diff --git a/lib/path.c b/lib/path.c
index c032e41fa..2e36caaad 100644
--- a/lib/path.c
+++ b/lib/path.c
@@ -23,17 +23,10 @@ static void path_write(struct path *p, bool resend)
 {
 	list_foreach(struct node *n, &p->destinations) {
 		int cnt = n->vectorize;
-		int sent, tosend, base, available, release, released;
+		int sent, tosend, available, released;
 		struct sample *smps[n->vectorize];
 
-		/* The first message in the chunk which we want to send */
-		if (resend)
-			base = p->in->received - cnt; /* we simply resend the last vector of samples */
-		else {
-			base = n->sent;
-		}
-
-		available = queue_get_many(&p->queue, (void **) smps, cnt, base);
+		available = mpmc_queue_pull_many(&p->queue, (void **) smps, cnt);
 		if (available < cnt)
 			warn("Queue underrun for path %s: available=%u expected=%u", path_name(p), available, cnt);
 		
@@ -52,18 +45,9 @@ static void path_write(struct path *p, bool resend)
 
 		debug(DBG_PATH | 15, "Sent %u messages to node %s", sent, node_name(n));
 
-		/* Release samples from queue in case they are not sent periodically. */
-		if (resend)
-			continue;
-		
-		/* Decrement reference count and release samples back to pool if we had the last reference */
-		release = queue_pull_many(&p->queue, (void **) smps, sent, &n->sent);
-		if (release > 0)
-			debug(DBG_PATH | 3, "Releasing %u samples to pool for path %s", release, path_name(p));
-		
-		released = pool_put_many(&p->pool, (void **) smps, release);
-		if (release != released)
-			warn("Failed to release %u samples to pool for path %s", release - released, path_name(p));
+		released = pool_put_many(&p->pool, (void **) smps, sent);
+		if (sent != released)
+			warn("Failed to release %u samples to pool for path %s", sent - released, path_name(p));
 	}
 }
 
@@ -83,9 +67,6 @@ static void * path_run_async(void *arg)
 			warn("Overrun detected for path: overruns=%" PRIu64, expir);
 		}
 		
-		if (p->in->received == 0)
-			continue;
-
 		if (hook_run(p, NULL, 0, HOOK_ASYNC))
 			continue;
 
@@ -106,10 +87,6 @@ static void * path_run(void *arg)
 
 	/* Main thread loop */
 	for (;;) {
-		struct node *out = (struct node *) list_first(&p->destinations);
-		debug(DBG_PATH | 5, "Current queue status for path %s: ready=%u write=%ju read[0]=%ju", path_name(p), ready, p->in->received, out->sent);
-		debug(DBG_PATH | 5, "Current pool status for path %s: used=%zu avail=%zu", path_name(p), p->pool.stack.size, p->pool.stack.avail);
-
 		/* Fill smps[] free sample blocks from the pool */
 		ready += pool_get_many(&p->pool, (void **) smps, cnt - ready);
 		if (ready != cnt)
@@ -131,29 +108,12 @@ static void * path_run(void *arg)
 			p->skipped += recv - enqueue;
 		}
 
-		enqueued = queue_push_many(&p->queue, (void **) smps, enqueue, &p->in->received);
+		enqueued = mpmc_queue_push_many(&p->queue, (void **) smps, enqueue);
 		if (enqueue != enqueued)
 			warn("Failed to enqueue %u samples for path %s", enqueue - enqueued, path_name(p));
 
 		ready -= enqueued;
 
-		list_foreach(struct hook *h, &p->hooks) {
-			int pull, release, released;
-			
-			pull = p->in->received - h->head - h->history;
-			if (pull > 0) {
-				struct sample *smps[pull];
-				
-				release = queue_pull_many(&p->queue, (void **) smps, pull, &h->head);
-				if (release > 0)
-					debug(DBG_PATH | 3, "Releasing %u samples from queue of path %s", release, path_name(p));
-				
-				released = pool_put_many(&p->pool, (void **) smps, release);
-				if (release != released)
-					warn("Failed to release %u samples to pool of path %s", release - released, path_name(p));
-			}
-		}
-		
 		debug(DBG_PATH | 3, "Enqueuing %u samples to queue of path %s", enqueue, path_name(p));
 
 		/* At fixed rate mode, messages are send by another (asynchronous) thread */
@@ -255,22 +215,14 @@ int path_prepare(struct path *p)
 		error("Failed to parse arguments for hooks of path: %s", path_name(p));
 
 	/* Initialize queue */
-	ret = pool_init_mmap(&p->pool, SAMPLE_LEN(p->samplelen), p->queuelen);
+	ret = pool_init(&p->pool, SAMPLE_LEN(p->samplelen), p->queuelen, &memtype_hugepage);
 	if (ret)
 		error("Failed to allocate memory pool for path");
 	
-	ret = queue_init(&p->queue, p->queuelen);
+	ret = mpmc_queue_init(&p->queue, p->queuelen, &memtype_hugepage);
 	if (ret)
 		error("Failed to initialize queue for path");
-	
-	/* Add a head pointer for each hook to the queue */
-	list_foreach(struct hook *h, &p->hooks)
-		queue_reader_add(&p->queue, h->head, p->in->received);
 
-	/* Add a head pointer for each destination node to the queue. */
-	list_foreach(struct node *out, &p->destinations)
-		queue_reader_add(&p->queue, out->sent, p->in->received);
-	
 	return 0;
 }
 
@@ -281,7 +233,7 @@ void path_destroy(struct path *p)
 	list_destroy(&p->destinations, NULL, false);
 	list_destroy(&p->hooks, NULL, true);
 	
-	queue_destroy(&p->queue);
+	mpmc_queue_destroy(&p->queue);
 	pool_destroy(&p->pool);
 
 	free(p->_name);
diff --git a/lib/pool.c b/lib/pool.c
index c24420bb9..90317bd9e 100644
--- a/lib/pool.c
+++ b/lib/pool.c
@@ -14,35 +14,29 @@
 
 int pool_init(struct pool *p, size_t blocksz, size_t cnt, const struct memtype *m)
 {
-	void *addr;
-	int flags, prot;
-	size_t len, alignedsz, alignment;
-	
 	/* Make sure that we use a block size that is aligned to the size of a cache line */
-	alignment = kernel_get_cacheline_size();
-	alignedsz = blocksz * CEIL(blocksz, );
-	len = cnt * alignedsz;
+	p->alignment = kernel_get_cacheline_size();
+	p->blocksz = blocksz * CEIL(blocksz, p->alignment);
+	p->len = cnt * p->blocksz;
+	p->mem = m;
 
-	addr = memory_alloc_align(m, len, aligment);
-	if (!addr)
+	p->buffer = memory_alloc_aligned(m, p->len, p->alignment);
+	if (!p->buffer)
 		serror("Failed to allocate memory for memory pool");
 	else
-		debug(DBG_POOL | 4, "Allocated %#zx bytes for memory pool", len);
-	
-	p->blocksz = blocksz;
-	p->alignment = alignment;
+		debug(DBG_POOL | 4, "Allocated %#zx bytes for memory pool", p->len);
 	
 	mpmc_queue_init(&p->queue, cnt, m);
 	
 	for (int i = 0; i < cnt; i++)
-		lstack_push(&p->stack, buf + i * alignedsz);
+		mpmc_queue_push(&p->queue, (char *) p->buffer + i * p->blocksz);
 	
 	return 0;
 }
 
 int pool_destroy(struct pool *p)
 {
-	mpmc_queue_destroy(&p->queue);
-	
-	memory_dealloc(p->buffer, p->len);
+	mpmc_queue_destroy(&p->queue);	
+
+	return memory_free(p->mem, p->buffer, p->len);
 }
\ No newline at end of file
diff --git a/lib/queue.c b/lib/queue.c
index cfa46ee5d..136a7d263 100644
--- a/lib/queue.c
+++ b/lib/queue.c
@@ -31,7 +31,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "mpmc_queue.h"
+#include "queue.h"
 
 /** Initialize MPMC queue */
 int mpmc_queue_init(struct mpmc_queue *q, size_t size, const struct memtype *mem)
@@ -84,7 +84,7 @@ int mpmc_queue_push(struct mpmc_queue *q, void *ptr)
 		diff = (intptr_t) seq - (intptr_t) pos;
 
 		if (diff == 0) {
-			if (atomic_compare_exchange_weak_explicit(&q->tail, &pos, pos + 1, memory_order_relaxed, memory_order_seq_cst))
+			if (atomic_compare_exchange_weak_explicit(&q->tail, &pos, pos + 1, memory_order_relaxed, memory_order_relaxed))
 				break;
 		}
 		else if (diff < 0)
@@ -113,7 +113,7 @@ int mpmc_queue_pull(struct mpmc_queue *q, void **ptr)
 		diff = (intptr_t) seq - (intptr_t) (pos + 1);
 
 		if (diff == 0) {
-			if (atomic_compare_exchange_weak_explicit(&q->head, &pos, pos + 1, memory_order_relaxed, memory_order_seq_cst))
+			if (atomic_compare_exchange_weak_explicit(&q->head, &pos, pos + 1, memory_order_relaxed, memory_order_relaxed))
 				break;
 		}
 		else if (diff < 0)
@@ -142,13 +142,13 @@ int mpmc_queue_push_many(struct mpmc_queue *q, void *ptr[], size_t cnt)
 	return i;
 }
 
-int mpmc_queue_pull_many(struct mpmc_queue *q, void **ptr[], size_t cnt)
+int mpmc_queue_pull_many(struct mpmc_queue *q, void *ptr[], size_t cnt)
 {
 	int ret;
 	size_t i;
 
 	for (i = 0; i < cnt; i++) {
-		ret = mpmc_queue_pull(q, ptr[i]);
+		ret = mpmc_queue_pull(q, &ptr[i]);
 		if (!ret)
 			break;
 	}
diff --git a/src/pipe.c b/src/pipe.c
index 15ed30a91..334fa0302 100644
--- a/src/pipe.c
+++ b/src/pipe.c
@@ -96,7 +96,7 @@ static void * send_loop(void *ctx)
 	sendd.started = true;
 	
 	/* Initialize memory */
-	ret = pool_init_mmap(&sendd.pool, SAMPLE_LEN(DEFAULT_VALUES), node->vectorize);
+	ret = pool_init(&sendd.pool, SAMPLE_LEN(DEFAULT_VALUES), node->vectorize, &memtype_hugepage);
 	if (ret < 0)
 		error("Failed to allocate memory for receive pool.");
 	
@@ -140,7 +140,7 @@ static void * recv_loop(void *ctx)
 	recvv.started = true;
 	
 	/* Initialize memory */
-	ret = pool_init_mmap(&recvv.pool, SAMPLE_LEN(DEFAULT_VALUES), node->vectorize);
+	ret = pool_init(&recvv.pool, SAMPLE_LEN(DEFAULT_VALUES), node->vectorize, &memtype_hugepage);
 	if (ret < 0)
 		error("Failed to allocate memory for receive pool.");
 	

From 8b1cb7fe74fb5320c7499f9d16bc0e06b6230ad5 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 22 Sep 2016 21:20:54 -0400
Subject: [PATCH 09/45] added new packages for building dependencies

---
 Dockerfile | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/Dockerfile b/Dockerfile
index 3f302149e..1e873658a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -46,4 +46,18 @@ RUN dnf -y update && \
 	rpmdevtools \
 	rpm-build
 
+# Tools to build dependencies
+RUN dnf -y update && \
+    dnf -y install \
+	git \
+	gcc-c++ \
+	autoconf \
+	automake \
+	autogen \
+	libtool \
+	flex \
+	bison \
+	texinfo
+	
+
 ENTRYPOINT /bin/bash

From d6c8197e98c5b246c60f12d878684a30bd9a1d7a Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Fri, 23 Sep 2016 22:12:49 -0400
Subject: [PATCH 10/45] prepare build system for gcov coverage

---
 Makefile | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Makefile b/Makefile
index e6128729a..a864c9482 100644
--- a/Makefile
+++ b/Makefile
@@ -42,6 +42,10 @@ else ifdef GIT
 	CFLAGS += -D_GIT_REV='"$(shell git rev-parse --short HEAD)"'
 endif
 
+ifdef COVERAGE
+	CFLAGS += -fprofile-arcs -ftest-coverage
+endif
+
 # pkg-config dependencies
 PKGS = libconfig
 

From c2ea415d7060ac768cd2a8f7728815cc6a7388dd Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Tue, 27 Sep 2016 19:26:35 -0400
Subject: [PATCH 11/45] reworked Makefile to build dependencies

---
 thirdparty/Makefile | 62 ++++++++++++++++++++++++++++++---------------
 1 file changed, 42 insertions(+), 20 deletions(-)

diff --git a/thirdparty/Makefile b/thirdparty/Makefile
index 8417d10b3..06b445bd9 100644
--- a/thirdparty/Makefile
+++ b/thirdparty/Makefile
@@ -1,6 +1,6 @@
-DEPS = libconfig-1.5 libnl-3.2.25 doxygen-1.8.10 pciutils-3.4.1 libwebsockets-1.7.5
+DEPS = libxil libconfig libnl libwebsockets pciutils criterion
 
-.PHONY: $(DEPS) all
+.PHONY: $(DEPS) all clean
 
 TMPDIR ?= $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
 PREFIX ?= /usr/local
@@ -8,28 +8,50 @@ PREFIX ?= /usr/local
 # Install all dependencies
 all: $(DEPS)
 
-# Download latest doxygen
-doxygen-1.8.10:
-	wget -O- http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.10.linux.bin.tar.gz | tar xzC $(TMPDIR)
-
 # Install & compile libconfig dependency
-libconfig-1.5:
-	wget -O- http://www.hyperrealm.com/libconfig/libconfig-1.5.tar.gz | tar -xzC $(TMPDIR)
-	cd $@ && ./configure --prefix=$(PREFIX) --disable-examples && make install
+libconfig:
+	cd $@ && \
+	rm -f lib/scanner.[ch] && \
+	autoreconf && \
+	./configure --prefix=$(PREFIX) --disable-examples && \
+	make install
 
 # Install & compile libnl3 dependency
-libnl-3.2.25:
-	wget -O- http://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz | tar -xzC $(TMPDIR)
-	cd $@ && ./configure --prefix=$(PREFIX) --disable-cli && make install
+libnl:
+	cd $@ && \
+	./autogen.sh && \
+	./configure --prefix=$(PREFIX) --disable-cli && \
+	make install
 
 # Install & compile libpci dependency
-pciutils-3.4.1:
-	wget -O- ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/pciutils-3.4.1.tar.gz | tar -xzC $(TMPDIR)
-	cd $@ && make clean && make SHARED=yes && make install-lib PREFIX=$(PREFIX)
-	ln -s $(PREFIX)/lib/libpci.so.3.4.1 $(PREFIX)/lib/libpci.so
+pciutils:
+	cd $@ && \
+	make clean && \
+	make SHARED=yes && \
+	make install-lib PREFIX=$(PREFIX) && \
+	ln -s $(PREFIX)/lib/libpci.so.* $(PREFIX)/lib/libpci.so
 
 # Install & compile libwebsockets dependency
-libwebsockets-2.0.2:
-	mkdir -p $@/build
-	wget -O- https://github.com/warmcat/libwebsockets/archive/v2.0.2.tar.gz | tar -xzC $(TMPDIR)
-	cd $@/build && cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) .. && make install
\ No newline at end of file
+libwebsockets:
+	mkdir $@/build && cd $@/build && \
+	cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) .. && \
+	make install
+
+# Install & compile Criterion unittest framework
+criterion:
+	mkdir $@/build && cd $@/build && \
+	cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) .. && \
+	make install
+
+# Install & compile Xilinx standalone drivers
+libxil:
+	cd $@ && \
+	make install
+
+clean:
+	for DEP in ${DEPS}; do \
+	  pushd $$DEP; \
+	    git checkout . ; \
+	    git clean -dxf $$DEP . ; \
+	  popd; \
+	done

From 410dfb406f63e752b8f06cdf1d2140e28a74c251 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Tue, 27 Sep 2016 19:27:19 -0400
Subject: [PATCH 12/45] adapted CI config for new dependencies and test system

---
 .gitlab-ci.yml | 131 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 81 insertions(+), 50 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index edca73c1d..aa9919812 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,66 +5,24 @@ variables:
   # and configured in gitlab-ci-runner config.toml as a linked service
   DOCKER_REGISTRY: acs-public:5000
   DOCKER_IMAGE: villas:latest
+  PREFIX: /usr/
 
 stages:
   - prepare
   - dependencies
   - build
+  - test
   - deploy
-
-# Build docker image which is used to build & test VILLASnode
-docker-image:
-  stage: prepare
-  image: stackbrew/docker:1.8.2
-  before_script:
-    - docker info
-  script:
-    - docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE .
-    - docker push $DOCKER_REGISTRY/$DOCKER_IMAGE
-
-libwebsockets:
+  
+# Templates
+##############################################################################
+.dep: &dep
   stage: dependencies
   script:
-    - make -C thirdparty libwebsockets-2.0.2
+    - make -C thirdparty $CI_BUILD_NAME
   artifacts:
     paths:
-    - thirdparty/libwebsockets-2.0.2/
-
-libxil:
-  stage: dependencies
-  script:
-    - make -C thirdparty/xilinx
-  artifacts:
-    paths:
-    - thirdparty/xilinx/libxil.so
-
-build:
-  stage: build
-  variables:
-    PKG_CONFIG_PATH: /usr/local/lib/pkgconfig/
-  before_script:
-    - make -C thirdparty/libwebsockets-2.0.2/build install
-    - make -C thirdparty/xilinx install
-  script:
-    - make
-  artifacts:
-    name: "${CI_PROJECT_NAME}-${CI_BUILD_REF}"
-    paths:
-      - libvillas.so
-      - fpga
-      - node
-      - pipe
-      - signal
-      - test
-
-docs:
-  stage: build
-  artifacts:
-    name: "${CI_PROJECT_NAME}-doc-${CI_BUILD_REF}"
-    paths:
-      - doc/html/
-  script:
-    - make doc
+      - $PREFIX
 
 .ssh: &ssh
   before_script:
@@ -74,6 +32,79 @@ docs:
     - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > $HOME/.ssh/config
     - ssh-keyscan -H $DEPLOY_HOST >> $HOME/.ssh/known_hosts
 
+# Stage: prepare
+##############################################################################
+
+# Build docker image which is used to build & test VILLASnode
+docker-image:
+  stage: prepare
+  # Must match the docker version on the build machine!
+  image: stackbrew/docker:1.8.2
+  before_script:
+    - docker info
+  script:
+    - docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE .
+    - docker push $DOCKER_REGISTRY/$DOCKER_IMAGE
+
+# Stage: dependencies
+##############################################################################
+
+libwebsockets:
+  <<dep: *dep
+
+libxil:
+  <<dep: *dep
+
+libxil:
+  <<dep: *dep
+
+# Stage: build
+##############################################################################
+
+build:
+  stage: build
+  script:
+    - make
+  artifacts:
+    name: "${CI_PROJECT_NAME}-${CI_BUILD_REF}"
+    paths:
+      - $PREFIX
+  dependencies:
+    - libwebsockets
+    - libxil
+
+docs:
+  stage: build
+  artifacts:
+    name: "${CI_PROJECT_NAME}-doc-${CI_BUILD_REF}"
+    paths:
+      - doc/html/
+      - doc/latex/
+  script:
+    - make doc
+
+# Stage: test
+##############################################################################
+
+unit:
+  stage: test
+  dependencies:
+    - criterion
+    - build
+  script:
+    - test
+
+integration:
+  stage: test
+  dependencies:
+    - build
+  script:
+    # Nothing to do here right now
+    - true
+
+# Stage: deliver
+##############################################################################
+
 deliver:
   stage: deploy
   <<: *ssh

From ec4c87d3a4c385ba2c1aad1c6b2deb692121235c Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Tue, 27 Sep 2016 19:27:55 -0400
Subject: [PATCH 13/45] added first unit test

---
 tests/list.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 tests/list.c

diff --git a/tests/list.c b/tests/list.c
new file mode 100644
index 000000000..3b08d7546
--- /dev/null
+++ b/tests/list.c
@@ -0,0 +1,48 @@
+#include <stdint.h>
+#include <criterion/criterion.h>
+
+#include "list.h"
+
+static int compare(const void *a, const void *b) {
+	return b - a;
+}
+
+Test(test, basics)
+{
+	intptr_t i;
+	struct list l;
+	
+	list_init(&l);
+	
+	for (i = 0; i < 100; i++) {
+		cr_assert_eq(list_length(&l), i);
+		
+		list_push(&l, (void *) i);
+	}
+
+	cr_assert_eq(list_at(&l, 555), NULL);
+	cr_assert_eq(list_last(&l), (void *) 99);
+	cr_assert_eq(list_first(&l), NULL);
+
+	i = 0;
+	list_foreach (void *j, &l)
+		cr_assert_eq(j, (void *) i++);
+	
+	list_sort(&l, compare); /* Reverse list */
+	
+	i = 99;
+	list_foreach (void *j, &l) {
+		cr_assert_eq(j, (void *) i, "Is %p, expected %p", i, j);
+		i--;
+	}
+
+	cr_assert(list_contains(&l, (void *) 55));
+	
+	list_remove(&l, (void *) 55);
+	
+	cr_assert(!list_contains(&l, (void *) 55));
+
+	list_destroy(&l, NULL, false);
+
+	cr_assert_eq(list_length(&l), -1, "List not properly destroyed: l.length = %zd", l.length);
+}
\ No newline at end of file

From 7aa0e3b2f3f54e2ce23ef25be3a77659997d22de Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Tue, 27 Sep 2016 21:33:26 -0400
Subject: [PATCH 14/45] use my patched criterion

---
 .gitmodules          | 2 +-
 thirdparty/criterion | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitmodules b/.gitmodules
index d990e7e32..b6cec1228 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -9,7 +9,7 @@
 	url = https://github.com/warmcat/libwebsockets
 [submodule "thirdparty/criterion"]
 	path = thirdparty/criterion
-	url = https://github.com/Snaipe/Criterion
+	url = https://github.com/stv0g/Criterion
 [submodule "thirdparty/libnl"]
 	path = thirdparty/libnl
 	url = https://github.com/thom311/libnl.git
diff --git a/thirdparty/criterion b/thirdparty/criterion
index 20a9da7c1..5b0f2b129 160000
--- a/thirdparty/criterion
+++ b/thirdparty/criterion
@@ -1 +1 @@
-Subproject commit 20a9da7c1897f16d84185481ff293cd8af8d644b
+Subproject commit 5b0f2b129046955c004ff56ab2caada5b55ba8e3

From 0d3467d2aa459aad1c1d314147f4af7210c56b89 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Wed, 28 Sep 2016 01:22:23 -0400
Subject: [PATCH 15/45] added script to report metrics to InfluxDB

---
 tools/report_metric.sh | 50 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100755 tools/report_metric.sh

diff --git a/tools/report_metric.sh b/tools/report_metric.sh
new file mode 100755
index 000000000..36c45be77
--- /dev/null
+++ b/tools/report_metric.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+if [ "$#" -lt 2 ]; then
+	echo "Usage: $0 measurement_name field1=value1 field2=value2 ... -- tag1=tag1value tag2=tag2value"
+	echo "Example: $0 builds success=true warnings=235 time=123 -- branch=master comitter=stv0g"
+	exit -1
+fi
+
+HOST=${INFLUXDB_HOST:-localhost}
+PORT=${INFLUXDB_PORT:-8086}
+DB=${INFLUXDB_DATABASE:-builds}
+
+CURL_OPTS="-i -XPOST"
+
+if [ -n "${INFLUXDB_USER}" -a -n "${INFLUXDB_PASSWORD}" ]; then
+	CURL_OPTS+=" -u ${INFLUXDB_USER}:${INFLUXDB_PASSWORD}"
+fi
+
+function join_by {
+	local IFS="$1"
+	shift
+	echo "$*"
+}
+
+search() {
+	local i=0;
+	for str in ${@:2}; do
+		if [ "$str" = "$1" ]; then
+			echo $i
+			return
+		else
+			((i++))
+		fi
+	done
+	echo ""
+}
+
+I=$(search "--" $@)
+
+if [ -n "$I" ]; then
+	TAGS=",$(join_by , ${@:(($I+2))})"
+	VALUES=${@:2:(($I-1))}
+else
+	VALUES=${@:2}
+fi
+
+MEASUREMENT=$1
+TS=$(date +%s%N)
+
+curl ${CURL_OPTS} "http://${HOST}:${PORT}/write?db=${DB}" --data-binary "${MEASUREMENT}${TAGS} ${VALUES} ${TS}"

From 50ce6bad07cbac05c9fcb5d239bc06ab9e17ce91 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Fri, 30 Sep 2016 19:55:39 -0400
Subject: [PATCH 16/45] provide a way to detect a destroyed list

---
 lib/list.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/list.c b/lib/list.c
index 36c321c64..aa87553de 100644
--- a/lib/list.c
+++ b/lib/list.c
@@ -57,7 +57,7 @@ void list_destroy(struct list *l, dtor_cb_t destructor, bool release)
 	
 	l->array = NULL;
 
-	l->length =
+	l->length = -1;
 	l->capacity = 0;
 
 	pthread_mutex_unlock(&l->lock);

From 6489ff80fc4d5ede27e573862baaf0e7c15ca684 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Fri, 30 Sep 2016 19:55:59 -0400
Subject: [PATCH 17/45] do not commit Gcov output

---
 .gitignore | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitignore b/.gitignore
index 4da12b0f2..c5ff72d70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
 *.o
 *.d
 *.so
+*.gcno
+*.gcda
 *~
 
 /node

From 361fc23a6d421cd73adaa364a22dd34383a06ba6 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 6 Oct 2016 17:55:35 -0400
Subject: [PATCH 18/45] rewrote build system to make it more modular and
 support out-of-tree builds

---
 .gitignore           |  12 +--
 Doxyfile             |   2 +-
 Makefile             | 215 ++++++++++++++-----------------------------
 lib/Makefile.inc     |  87 +++++++++++++++++
 plugins/Makefile.inc |  19 ++++
 src/Makefile.inc     |  41 +++++++++
 tests/Makefile.inc   |  20 ++++
 7 files changed, 236 insertions(+), 160 deletions(-)
 create mode 100644 lib/Makefile.inc
 create mode 100644 plugins/Makefile.inc
 create mode 100644 src/Makefile.inc
 create mode 100644 tests/Makefile.inc

diff --git a/.gitignore b/.gitignore
index c5ff72d70..7f1aabf66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,2 @@
-*.o
-*.d
-*.so
-*.gcno
-*.gcda
+/build/
 *~
-
-/node
-/pipe
-/test
-/signal
-/fpga
diff --git a/Doxyfile b/Doxyfile
index 277c11c0d..db6470e7f 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -58,7 +58,7 @@ PROJECT_LOGO           = doc/pictures/acs_eonerc_logo.svg
 # entered, it will be relative to the location where doxygen was started. If
 # left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = doc/
+OUTPUT_DIRECTORY       = build/doc/
 
 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
 # directories (in 2 levels) under the output directory of each output format and
diff --git a/Makefile b/Makefile
index a864c9482..a6c2ad81b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,40 +1,39 @@
-# Executables
-TARGETS = node pipe signal test
+## Main project Makefile
+#
+# The build system of this project is based on GNU Make and pkg-config
+#
+# To retain maintainability, the project is divided into multiple modules.
+# Each module has its own Makefile which gets included.
+#
+# Please read "Recursive Make Considered Harmful" from Peter Miller
+#  to understand the motivation for this structure.
+#
+# [1] http://aegis.sourceforge.net/auug97.pdf
+#
+# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
+# @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
+#   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
+#   Unauthorized copying of this file, via any medium is strictly prohibited.
+#################################################################################
 
-# Libraries
-LIBS = libvillas.so
-
-# Plugins
-PLUGINS = simple_circuit.so example_hook.so
-
-# Object files for libvillas
-LIB_SRCS = $(wildcard lib/hooks/*.c)			\
-           $(addprefix lib/kernel/, kernel.c rt.c)	\
-	   $(addprefix lib/,				\
-              sample.c path.c node.c hooks.c		\
-              log.c utils.c cfg.c hist.c timing.c	\
-              pool.c list.c queue.c memory.c		\
-           )						\
+# Project modules
+MODULES = lib plugins src tests
 
 # Default prefix for install target
 PREFIX ?= /usr/local
 
-# Default debug level
+# Default out-of-source build path
+BUILDDIR ?= build
+
+# Default debug level for executables
 V ?= 2
 
-# Compiler and linker flags
-LDLIBS   = -pthread -lm -lvillas
-
-PLUGIN_CFLAGS = -fPIC -DVILLAS -I../include/villas
-
-LIB_CFLAGS  = -fPIC
-LIB_LDFLAGS = -shared
-LIB_LDLIBS  = -ldl -lrt
-
+# Common flags
+LDLIBS   =
 CFLAGS  += -std=c11 -Iinclude -Iinclude/villas -I. -MMD -mcx16
 CFLAGS  += -Wall -Werror -fdiagnostics-color=auto
 CFLAGS  += -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE=1 -DV=$(V)
-LDFLAGS += -pthread -L. -Wl,-rpath,'$$ORIGIN'
+LDFLAGS += -L$(BUILDDIR)
 
 ifdef CI
 	CFLAGS += -D_GIT_REV='"${CI_BUILD_REF:0:7}~ci"'
@@ -43,149 +42,69 @@ else ifdef GIT
 endif
 
 ifdef COVERAGE
-	CFLAGS += -fprofile-arcs -ftest-coverage
+	CFLAGS  += -fprofile-arcs -ftest-coverage
+	LDFLAGS += --coverage
+	LDLIBS  += -lgcov
+	
+	LIB_LDFLAGS += --coverage
+	LIB_LDLIBS += -gcov
 endif
 
-# pkg-config dependencies
-PKGS = libconfig
-
-DOCKEROPTS = -p 80:80 -p 443:443 -p 1234:1234 --privileged --cap-add sys_nic --ulimit memlock=1073741824 --security-opt seccomp:unconfined
-
-# Add more compiler flags
-ifdef DEBUG
+# We must compile without optimizations for gcov!
+ifneq ($(or $(DEBUG),$(COVERAGE)),)
 	CFLAGS += -O0 -g
 else
 	CFLAGS += -O3
 endif
 
-######## Node types ########
-
-# file node-type is always supported
-LIB_SRCS += $(addprefix lib/nodes/, file.c cbuilder.c)
-
-# Enable Socket node type when libnl3 is available
-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)
-	PKGS        += libnl-route-3.0
+# Build variant
+ifdef COVERAGE
+	BUILDDIR := $(BUILDDIR)/coverage
+else ifdef DEBUG
+	BUILDDIR := $(BUILDDIR)/debug
+else
+	BUILDDIR := $(BUILDDIR)/release
 endif
 
-# Enable VILLASfpga support when libpci is available
-ifeq ($(shell pkg-config libpci; echo $$?),0)
-	LIB_SRCS    += $(addprefix lib/nodes/, fpga.c)
-	LIB_SRCS    += $(addprefix lib/kernel/, pci.c vfio.c)
-	LIB_SRCS    += $(wildcard  lib/fpga/*.c)
-	LDLIBS      += -lxil
-	PKGS        += libpci
-	TARGETS     += fpga
-endif
-
-# Enable NGSI support
-ifeq ($(shell pkg-config libcurl jansson uuid; echo $$?),0)
-	LIB_SRCS    += lib/nodes/ngsi.c
-	PKGS        += libcurl jansson uuid
-endif
-
-# Enable WebSocket support
-ifeq ($(shell pkg-config libwebsockets jansson; echo $$?),0)
-	LIB_SRCS   += lib/nodes/websocket.c
-	PKGS       += libwebsockets jansson
-endif
-
-## Add support for LAPACK / BLAS benchmarks / solvers
-ifeq ($(shell pkg-config blas lapack; echo $$?),0)
-	PKGS        += blas lapack
-	BENCH_OBJS  += fpga-bench-overruns.o
-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
-	CFLAGS      += -m32
-	LDFLAGS     += -m32
-	LIB_CFLAGS  += -m32 -I thirdparty/opal/include
-	LIB_LDFLAGS += -m32 -L/lib/i386-linux-gnu/ -L/usr/lib/i386-linux-gnu/ -Lthirdparty/opal/lib/redhawk/
-	LIB_LDLIBS  += -lOpalAsyncApiCore -lOpalCore -lOpalUtils -lirc
-endif
-endif
-
-# Add flags by pkg-config
-LIB_CFLAGS += $(addprefix -DWITH_, $(shell echo ${PKGS} | tr a-z- A-Z_ | tr -dc ' A-Z0-9_' ))
-LIB_CFLAGS += $(shell pkg-config --cflags ${PKGS})
-LIB_LDLIBS += $(shell pkg-config --libs ${PKGS})
-
-LIB_OBJS = $(patsubst lib/%.c, obj/lib/%.o, $(LIB_SRCS))
+# pkg-config dependencies
+PKGS = libconfig
 
 ######## Targets ########
 
-.PHONY: all clean install docker doc
+# Add flags by pkg-config
+CFLAGS += $(addprefix -DWITH_, $(shell echo ${PKGS} | tr a-z- A-Z_ | tr -dc ' A-Z0-9_' ))
+CFLAGS += $(shell pkg-config --cflags ${PKGS})
+LDLIBS += $(shell pkg-config --libs ${PKGS})
+
+# Default target: build everything; no tests, docs
+all: $(MODULES)
+	
+everything:
+	$(MAKE) DEBUG=1
+	$(MAKE) COVERAGE=1
+	$(MAKE) doc
+	$(MAKE) tests
+	
+.PHONY: all clean install docker doc $(MODULES)
 .SECONDARY:
 .SECONDEXPANSION:
 
-# Default target: build everything
-all: $(LIBS) $(TARGETS) $(PLUGINS)
-
-# Dependencies for individual binaries
-fpga:   $(addprefix obj/src/,fpga.o fpga-tests.o fpga-bench.o $(BENCH_OBJS))
-node:   $(addprefix obj/src/,node.o)
-pipe:   $(addprefix obj/src/,pipe.o)
-test:   $(addprefix obj/src/,test.o)
-signal: $(addprefix obj/src/,signal.o)
-
-# Dependencies for plugins
-example_hook.so:   obj/plugins/hooks/example_hook.o
-simple_circuit.so: obj/plugins/models/simple_circuit.o
-
-libvillas.so: $(LIB_OBJS)
-
-# Create directories
-%/:
+# Create non-existent directories in build directory
+$(BUILDDIR)/%/:
 	mkdir -p $@
 
-# Compile executable objects
-obj/src/%.o: src/%.c | $$(dir $$@)
-	$(CC) $(CFLAGS) -c $< -o $@
-
-# Compile library objects
-obj/lib/%.o: lib/%.c | $$(dir $$@)
-	$(CC) $(CFLAGS) $(LIB_CFLAGS) -c $< -o $@
-	
-obj/plugins/%.o: plugins/%.c | $$(dir $$@)
-	$(CC) $(CFLAGS) $(PLUGIN_CFLAGS) -c $< -o $@
-
-# Link target executables
-$(TARGETS):
-	$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
-	
-# Link Libraries & Plugins
-$(LIBS) $(PLUGINS):
-	$(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS)
-
-# Common targets
-install: $(TARGETS) $(LIBS)
-	install -m 0644 $(LIBS) $(PREFIX)/lib
-	install -m 0755 node	-T $(PREFIX)/bin/villas-node
-	install -m 0755 fpga	-T $(PREFIX)/bin/villas-fpga
-	install -m 0755 signal	-T $(PREFIX)/bin/villas-signal
-	install -m 0755 pipe	-T $(PREFIX)/bin/villas-pipe
-	install -m 0755 test	-T $(PREFIX)/bin/villas-test
-	install -m 0755		-d $(PREFIX)/include/villas/
-	install -m 0644 include/villas/*.h $(PREFIX)/include/villas/
-	install -m 0755 tools/villas.sh $(PREFIX)/bin/villas
-	ldconfig
+install: $(addprefix install-,$(MODULES))
+	install -m 0755 tools/villas.sh 	   $(PREFIX)/bin/villas
 
 clean:
-	$(RM) $(LIBS) $(PLUGINS) $(TARGETS)
-	$(RM) -rf obj/ doc/{html,latex}
+	rm -rf $(BUILDDIR)
 
 docker:
 	docker build -t villas .
-	docker run -it $(DOCKEROPTS) -v $(PWD):/villas villas
+	docker run -it -p 80:80 -p 443:443 -p 1234:1234 --privileged --cap-add sys_nic --ulimit memlock=1073741824 --security-opt seccomp:unconfined -v $(PWD):/villas villas
 
 doc:
-	doxygen
+	( cat Doxyfile ; echo "OUTPUT_DIRECTORY=$(BUILD)/doc/" ) | doxygen -
 
-# Include auto-generated dependencies
--include $(wildcard obj/**/*.d)
\ No newline at end of file
+-include $(wildcard $(BUILDDIR)/**/*.d)
+$(foreach MODULE,$(MODULES),$(eval -include $(MODULE)/Makefile.inc))
\ No newline at end of file
diff --git a/lib/Makefile.inc b/lib/Makefile.inc
new file mode 100644
index 000000000..f2763387e
--- /dev/null
+++ b/lib/Makefile.inc
@@ -0,0 +1,87 @@
+# Libraries
+LIBS = $(BUILDDIR)/libvillas.so
+
+# Object files for libvillas
+LIB_SRCS = $(addprefix lib/nodes/, file.c cbuilder.c) 		\
+           $(addprefix lib/kernel/, kernel.c rt.c)		\
+	   $(addprefix lib/, sample.c path.c node.c hooks.c	\
+              log.c utils.c cfg.c hist.c timing.c pool.c list.c \
+              queue.c memory.c					\
+           )							\
+           $(wildcard  lib/hooks/*.c)				\
+
+LIB_CFLAGS  = $(CFLAGS) -fPIC
+LIB_LDFLAGS = -shared
+LIB_LDLIBS  = $(LDLIBS) -ldl -lrt
+
+######## Node types ########
+
+# Enable Socket node type when libnl3 is available
+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
+
+# Enable VILLASfpga support when libpci is available
+ifeq ($(shell pkg-config libpci; echo $$?),0)
+	LIB_SRCS    += $(addprefix lib/nodes/, fpga.c)
+	LIB_SRCS    += $(addprefix lib/kernel/, pci.c vfio.c)
+	LIB_SRCS    += $(wildcard  lib/fpga/*.c)
+	LIB_PKGS    += libpci
+	LIB_LDLIBS  += -lxil
+endif
+
+# Enable NGSI support
+ifeq ($(shell pkg-config libcurl jansson uuid; echo $$?),0)
+	LIB_SRCS    += lib/nodes/ngsi.c
+	LIB_PKGS    += libcurl jansson uuid
+endif
+
+# Enable WebSocket support
+ifeq ($(shell pkg-config libwebsockets jansson; echo $$?),0)
+	LIB_SRCS    += lib/nodes/websocket.c
+	LIB_PKGS    += libwebsockets jansson
+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_CFLAGS += $(addprefix -DWITH_, $(shell echo ${LIB_PKGS} | tr a-z- A-Z_ | tr -dc ' A-Z0-9_' ))
+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: $(LIBS)
+
+# Compile
+$(BUILDDIR)/lib/%.o: lib/%.c | $$(dir $$@)
+	$(CC) $(LIB_CFLAGS) -c $< -o $@
+
+# Link
+$(LIBS): $(LIB_OBJS)
+	$(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS)
+	
+# Install
+install-lib:
+	install -m 0644 $(LIBS) $(PREFIX)/lib
+	install -m 0755				-d $(PREFIX)/include/villas/
+	install -m 0644 include/villas/*.h 	   $(PREFIX)/include/villas/
+	echo "note: you may need to run 'ldconfig'"
+	echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
diff --git a/plugins/Makefile.inc b/plugins/Makefile.inc
new file mode 100644
index 000000000..e1a0d34b1
--- /dev/null
+++ b/plugins/Makefile.inc
@@ -0,0 +1,19 @@
+# Plugins
+PLUGINS = $(BUILDDIR)/simple_circuit.so \
+	  $(BUILDDIR)/example_hook.so
+
+PLUGIN_CFLAGS = -fPIC -DVILLAS -I../include/villas
+
+# Dependencies for plugins
+$(BUILDDIR)/example_hook.so:   $(BUILDDIR)/plugins/hooks/example_hook.o
+$(BUILDDIR)/simple_circuit.so: $(BUILDDIR)/plugins/models/simple_circuit.o
+
+plugins: $(PLUGINS)
+
+# Compile
+$(BUILDDIR)/plugins/%.o: plugins/%.c | $$(dir $$@)
+	$(CC) $(CFLAGS) $(PLUGIN_CFLAGS) -c $< -o $@
+
+# Link
+$(PLUGINS):
+	$(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS)
diff --git a/src/Makefile.inc b/src/Makefile.inc
new file mode 100644
index 000000000..020f96408
--- /dev/null
+++ b/src/Makefile.inc
@@ -0,0 +1,41 @@
+# Executables
+TARGETS = $(BUILDDIR)/node \
+	  $(BUILDDIR)/pipe  \
+	  $(BUILDDIR)/signal \
+	  $(BUILDDIR)/test \
+	  $(BUILDDIR)/fpga
+
+SRC_LDLIBS = $(LDLIBS) -pthread -lm -lvillas -lxil
+SRC_CFLAGS = $(CFLAGS)
+SRC_LDFLAGS = $(LDFLAGS)
+
+src: $(TARGETS)
+
+# Add support for LAPACK / BLAS benchmarks / solvers
+ifeq ($(shell pkg-config blas lapack; echo $$?),0)
+	PKGS        += blas lapack
+	BENCH_OBJS  += fpga-bench-overruns.o
+endif
+
+# Dependencies for individual binaries
+$(BUILDDIR)/fpga:   $(addprefix $(BUILDDIR)/src/,fpga.o fpga-tests.o fpga-bench.o $(BENCH_OBJS))
+$(BUILDDIR)/node:   $(BUILDDIR)/src/node.o
+$(BUILDDIR)/pipe:   $(BUILDDIR)/src/pipe.o
+$(BUILDDIR)/signal: $(BUILDDIR)/src/signal.o
+$(BUILDDIR)/test:   $(BUILDDIR)/src/test.o
+
+# Compile executable objects
+$(BUILDDIR)/src/%.o: src/%.c | $$(dir $$@)
+	$(CC) $(SRC_CFLAGS) -c $< -o $@
+
+# Link target executables
+$(TARGETS): | $(LIBS)
+	$(CC) $(SRC_LDFLAGS) $^ $(SRC_LDLIBS) -o $@
+
+# Install
+install-src:
+	install -m 0755 $(BUILDDIR)/node	-T $(PREFIX)/bin/villas-node
+	install -m 0755 $(BUILDDIR)/fpga	-T $(PREFIX)/bin/villas-fpga
+	install -m 0755 $(BUILDDIR)/signal	-T $(PREFIX)/bin/villas-signal
+	install -m 0755 $(BUILDDIR)/pipe	-T $(PREFIX)/bin/villas-pipe
+	install -m 0755 $(BUILDDIR)/test	-T $(PREFIX)/bin/villas-test
\ No newline at end of file
diff --git a/tests/Makefile.inc b/tests/Makefile.inc
new file mode 100644
index 000000000..b2e75bfd5
--- /dev/null
+++ b/tests/Makefile.inc
@@ -0,0 +1,20 @@
+TARGETS += $(BUILDDIR)/tests
+
+TEST_SRCS = $(wildcard tests/*.c)
+TEST_OBJS = $(patsubst %.c,$(BUILDDIR)/%.o,$(TEST_SRCS))
+
+TEST_CFLAGS = $(CFLAGS)
+TEST_LDFLAGS = $(LDFLAGS)
+TEST_LDLIBS = $(LDLIBS) -l criterion
+
+# Compile
+$(BUILDDIR)/tests/%.o: tests/%.c | $$(dir $$@)
+	$(CC) $(TEST_CFLAGS) -c $< -o $@
+
+# Link
+$(BUILDDIR)/tests: $(TEST_OBJS) | $(LIBS)
+	$(CC) $(TEST_LDFLAGS) $(TEST_LDLIBS) $^ -o $@#
+
+ifdef COVERAGE
+-include Makefile.gcov.inc
+endif
\ No newline at end of file

From cc99dee30d2ab4856e05cb2e427388e0bc168d78 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 6 Oct 2016 17:56:55 -0400
Subject: [PATCH 19/45] added first non-verified unit-tests

---
 tests/hist.c   | 34 +++++++++++++++++++
 tests/list.c   |  8 +++++
 tests/queue.c  | 25 ++++++++++++++
 tests/timing.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 157 insertions(+)
 create mode 100644 tests/hist.c
 create mode 100644 tests/queue.c
 create mode 100644 tests/timing.c

diff --git a/tests/hist.c b/tests/hist.c
new file mode 100644
index 000000000..b5092b29d
--- /dev/null
+++ b/tests/hist.c
@@ -0,0 +1,34 @@
+/** Unit tests for histogram
+ *
+ * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
+ * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
+ *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
+ *   Unauthorized copying of this file, via any medium is strictly prohibited.
+ *********************************************************************************/
+
+#include <criterion/criterion.h>
+
+#include "hist.h"
+
+const double test_data[] = {};
+
+/* Histogram of test_data with 200 buckets between -100 and 100 */
+const int hist_result[] = {};
+
+Test(hist) {
+	struct hist h;
+	
+	hist_create(&h, -100, 100, 1);
+	
+	for (int i = 0; i < ARRAY_LEN(test_data); i++)
+		hist_put(&h, test_data[i])
+	
+	cr_assert_float_eq(hist_mean(&h), 1, 1e-6);
+	cr_assert_float_eq(hist_var(s&h), 1, 1e-6);
+	cr_assert_float_eq(hist_stddev(&h), 1, 1e-6);
+	
+	for (int i = 0; i < ARRAY_LEN(hist_result); i++)
+		cr_assert_eq()
+	
+	hist_destroy(&h);
+}
\ No newline at end of file
diff --git a/tests/list.c b/tests/list.c
index 3b08d7546..11f7975c1 100644
--- a/tests/list.c
+++ b/tests/list.c
@@ -1,3 +1,11 @@
+/** Unit tests for array-based list
+ *
+ * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
+ * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
+ *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
+ *   Unauthorized copying of this file, via any medium is strictly prohibited.
+ *********************************************************************************/
+
 #include <stdint.h>
 #include <criterion/criterion.h>
 
diff --git a/tests/queue.c b/tests/queue.c
new file mode 100644
index 000000000..1c02306ba
--- /dev/null
+++ b/tests/queue.c
@@ -0,0 +1,25 @@
+/** Unit tests for MPMC queue
+ *
+ * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
+ * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
+ *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
+ *   Unauthorized copying of this file, via any medium is strictly prohibited.
+ *********************************************************************************/
+
+#include <criterion/criterion.h>
+
+#include "queue.h"
+
+Test(queue, singleThreaded)
+{
+/*	struct queue q;
+	
+	queue_init(&q, 100, &memtype_heap);
+	
+	srand(1337);
+	
+	for (int i = 0; i < 100; i++)
+		queue_push(&q, &)
+	
+	queue_destroy(&q);*/
+}
\ No newline at end of file
diff --git a/tests/timing.c b/tests/timing.c
new file mode 100644
index 000000000..28412a2ac
--- /dev/null
+++ b/tests/timing.c
@@ -0,0 +1,90 @@
+/** Unit tests for time related utlities
+ *
+ * @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
+ * @copyright 2014-2016, Institute for Automation of Complex Power Systems, EONERC
+ *   This file is part of VILLASnode. All Rights Reserved. Proprietary and confidential.
+ *   Unauthorized copying of this file, via any medium is strictly prohibited.
+ *********************************************************************************/
+
+#include <criterion/criterion.h>
+
+#include "timing.h"
+
+Test(time_now) {
+	struct timespec now1 = time_now();
+	struct timespec now2 = time_now();
+	
+	double delta = time_delta(&now1, &now2);
+	
+	cr_assert_float_eq(delta, 0, 1e-5, "time_now() shows large variance!");
+	cr_assert_gt(delta, 0, "time_now() was reordered!");
+}
+
+Test(time_diff) {
+	struct timespec ts1 = { .tv_sec 1, .tv_nsec = 0}; /* Value doesnt matter */
+	struct timespec ts2 = { .tv_sec 0, .tv_nsec = 1}; /* Overflow in nano seconds! */
+	
+	struct timespec ts3 = time_diff(&ts1, &ts2);
+	
+	/* ts4 == ts2? */
+	cr_assert_eq(ts3.tv_sec,  0);
+	cr_assert_eq(ts3.tv_nsec, 999999999);
+}
+
+Test(time_add) {
+	struct timespec ts1 = { .tv_sec 1, .tv_nsec = 999999999}; /* Value doesnt matter */
+	struct timespec ts2 = { .tv_sec 1, .tv_nsec =         1}; /* Overflow in nano seconds! */
+	
+	struct timespec ts3 = time_add(&ts1, &ts2);
+	
+	/* ts4 == ts2? */
+	cr_assert_eq(ts3.tv_sec,  2);
+	cr_assert_eq(ts3.tv_nsec, 0);
+}
+
+Test(time_delta) {
+	struct timespec ts1 = { .tv_sec 1, .tv_nsec = 123}; /* Value doesnt matter */
+	struct timespec ts2 = { .tv_sec 5, .tv_nsec = 246}; /* Overflow in nano seconds! */
+	
+	double = time_delta(&ts1, &ts2);
+	
+	cr_assert_float_eq(ts3.tv_sec, 4 + 123e-9, 1e-9);
+}
+
+Test(time_from_double) {
+	double ref = 1234.56789;
+	
+	struct timespec ts = time_from_double(ref);
+
+	cr_assert_eq(ts.tv_sec,       1234);
+	cr_assert_eq(ts.tv_nsec, 567890000);
+}
+
+Test(time_to_from_double) {
+	double ref = 1234.56789;
+	
+	struct timespec ts = time_from_double(ref);
+	double dbl         = time_to_double(&ts);
+	
+	cr_assert_float_eq(dbl, ref, 1e-9); 
+}
+
+Test(timer_wait_until) {
+	int tfd = timer_fd_create(CLOCK_MONOTONIC, 0);
+	
+	cr_assert(tfd > 0);
+	
+	double waitfor = 1.123456789;
+	
+	struct timespec start = time_now();
+	struct timespec diff = time_from_double(waitfor);
+	struct timespec future = time_add(&start, &diff)
+	
+	timer_wait_until(tfd, &future);
+	
+	struct timespec end = time_now();
+	
+	double waited = time_delta(&end, &start);
+	
+	cr_assert_float_eq(waited, waitfor, 1e-3, "We did not wait for %f secs");
+}
\ No newline at end of file

From 342f1e64aab7d4c524f69b55aa60186aad7463ae Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 6 Oct 2016 17:58:36 -0400
Subject: [PATCH 20/45] added gitignore for libxil

---
 thirdparty/libxil/.gitignore | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 thirdparty/libxil/.gitignore

diff --git a/thirdparty/libxil/.gitignore b/thirdparty/libxil/.gitignore
new file mode 100644
index 000000000..c038681dc
--- /dev/null
+++ b/thirdparty/libxil/.gitignore
@@ -0,0 +1 @@
+libxil.so
\ No newline at end of file

From 64cbad61588a364f657b52b8b327166669c5780f Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sat, 8 Oct 2016 01:10:12 -0400
Subject: [PATCH 21/45] Removed unused dependency to liquid

---
 lib/Makefile.inc |  4 ++--
 lib/nodes/ngsi.c | 42 +-----------------------------------------
 2 files changed, 3 insertions(+), 43 deletions(-)

diff --git a/lib/Makefile.inc b/lib/Makefile.inc
index f2763387e..bab5f1181 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -34,9 +34,9 @@ ifeq ($(shell pkg-config libpci; echo $$?),0)
 endif
 
 # Enable NGSI support
-ifeq ($(shell pkg-config libcurl jansson uuid; echo $$?),0)
+ifeq ($(shell pkg-config libcurl jansson; echo $$?),0)
 	LIB_SRCS    += lib/nodes/ngsi.c
-	LIB_PKGS    += libcurl jansson uuid
+	LIB_PKGS    += libcurl jansson
 endif
 
 # Enable WebSocket support
diff --git a/lib/nodes/ngsi.c b/lib/nodes/ngsi.c
index 077b0bdc0..747cd1b7a 100644
--- a/lib/nodes/ngsi.c
+++ b/lib/nodes/ngsi.c
@@ -10,7 +10,6 @@
 #include <stdio.h>
 
 #include <curl/curl.h>
-#include <uuid/uuid.h>
 #include <jansson.h>
 #include <math.h>
 #include <pthread.h>
@@ -24,45 +23,6 @@
 /* Some global settings */
 static char *name = NULL;
 
-#if 0 /* unused at the moment */
-static json_t * json_uuid()
-{
-	char eid[37];
-	uuid_t uuid;
-	
-	uuid_generate_time(uuid);
-	uuid_unparse_lower(uuid, eid);
-
-	return json_string(eid);
-}
-
-
-static json_t * json_date(struct timespec *ts)
-{
-	// Example: 2015-09-21T11:42:25+02:00
-	char date[64];
-	strftimespec(date, sizeof(date), "%FT%T.%u%z", ts);
-	
-	return json_string(date);
-}
-
-static json_t * json_lookup(json_t *array, char *key, char *needle)
-{
-	size_t ind;
-	json_t *obj;
-
-	json_array_foreach(array, ind, obj) {
-		json_t *value = json_object_get(obj, key);
-		if (value && json_is_string(value)) {
-			if (!strcmp(json_string_value(value), needle))
-				return obj;
-		}
-	}
-	
-	return NULL;
-}
-#endif
-
 enum ngsi_flags {
 	NGSI_ENTITY_ATTRIBUTES = (1 << 0),
 	NGSI_ENTITY_VALUES     = (1 << 1) | NGSI_ENTITY_ATTRIBUTES,
@@ -594,7 +554,7 @@ int ngsi_write(struct node *n, struct sample *smps[], unsigned cnt)
 
 static struct node_type vt = {
 	.name		= "ngsi",
-	.description	= "OMA Next Generation Services Interface 10 (libcurl, libjansson, libuuid)",
+	.description	= "OMA Next Generation Services Interface 10 (libcurl, libjansson)",
 	.vectorize	= 0, /* unlimited */
 	.size		= sizeof(struct ngsi),
 	.parse		= ngsi_parse,

From af147939015e3f818fa85da673f35073b6fb58e9 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sat, 8 Oct 2016 20:10:36 -0400
Subject: [PATCH 22/45] replace GPL lincensed libpci (pciutils) with own
 implementation

VILLASnode and its dependencies are now fully compatible with a BSD/MIT license.
---
 include/villas/kernel/pci.h  |  52 ++++++-
 include/villas/kernel/vfio.h |   2 +-
 include/villas/nodes/fpga.h  |   5 +-
 lib/kernel/pci.c             | 283 +++++++++++++++++++++++++++--------
 lib/kernel/vfio.c            |   2 +-
 lib/nodes/fpga.c             |  60 ++++----
 thirdparty/Makefile          |  10 +-
 7 files changed, 302 insertions(+), 112 deletions(-)

diff --git a/include/villas/kernel/pci.h b/include/villas/kernel/pci.h
index 9425f4690..747f5c488 100644
--- a/include/villas/kernel/pci.h
+++ b/include/villas/kernel/pci.h
@@ -10,16 +10,58 @@
 #ifndef _PCI_H_
 #define _PCI_H_
 
-#include <pci/pci.h>
+#include "list.h"
 
-struct pci_access * pci_get_handle();
+#define PCI_SLOT(devfn)		(((devfn) >> 3) & 0x1f)
+#define PCI_FUNC(devfn)		((devfn) & 0x07)
 
-void pci_release_handle();
+struct pci_dev {
+	struct {
+		int vendor;
+		int device;
+		int class;
+	} id;
+	
+	struct {
+		int domain;
+		int bus;
+		int device;
+		int function;
+	} slot;			/**< Bus, Device, Function (BDF) */
+};
 
-struct pci_dev * pci_find_device(struct pci_access *pacc, struct pci_filter *f);
+struct pci {
+	struct list devices; /**> List of available PCI devices in the system (struct pci_dev) */
+};
 
+/** Initialize Linux PCI handle.
+ *
+ * This search for all available PCI devices under /sys/bus/pci
+ *
+ * @retval 0 Success. Everything went well.
+ * @retval <0 Error. Something went wrong.
+ */
+int pci_init(struct pci *p);
+
+/** Destroy handle. */
+void pci_destroy(struct pci *p);
+
+int pci_dev_init(struct pci_dev *d);
+
+void pci_dev_destroy(struct pci_dev *d);
+
+int pci_dev_parse_slot(struct pci_dev *f, const char *str, const char **error);
+
+int pci_dev_parse_id(struct pci_dev *f, const char *str, const char **error);
+
+int pci_dev_compare(const struct pci_dev *d, const struct pci_dev *f);
+
+struct pci_dev * pci_lookup_device(struct pci *p, struct pci_dev *filter);
+
+/** Bind a new LKM to the PCI device */
 int pci_attach_driver(struct pci_dev *d, const char *driver);
 
-int pci_get_iommu_group(struct pci_dev *pdev);
+/** Return the IOMMU group of this PCI device or -1 if the device is not in a group. */
+int pci_get_iommu_group(struct pci_dev *d);
 
 #endif /* _PCI_H_ */
\ No newline at end of file
diff --git a/include/villas/kernel/vfio.h b/include/villas/kernel/vfio.h
index 240b34971..7f1a227aa 100644
--- a/include/villas/kernel/vfio.h
+++ b/include/villas/kernel/vfio.h
@@ -11,7 +11,6 @@
 #define _VFIO_H_
 
 #include <stdbool.h>
-#include <pci/pci.h>
 #include <sys/mman.h>
 
 #include <linux/vfio.h>
@@ -23,6 +22,7 @@
 
 /* Forward declaration */
 struct dma_mem;
+struct pci_dev;
 
 struct vfio_group {
 	int fd;						/**< VFIO group file descriptor */
diff --git a/include/villas/nodes/fpga.h b/include/villas/nodes/fpga.h
index 411eac847..0dadcfd94 100644
--- a/include/villas/nodes/fpga.h
+++ b/include/villas/nodes/fpga.h
@@ -18,8 +18,7 @@
 #define _FPGA_H_
 
 #include "kernel/vfio.h"
-
-#include <pci/pci.h>
+#include "kernel/pci.h"
 
 #include "fpga/dma.h"
 #include "fpga/ip.h"
@@ -29,7 +28,7 @@
 #include "list.h"
 
 struct fpga {
-	struct pci_filter filter;	/**< Filter for libpci with device id & slot */
+	struct pci_dev filter;		/**< Filter for PCI device. */
 	struct vfio_dev vd;		/**< VFIO device handle. */
 
 	int do_reset;			/**< Reset VILLASfpga during startup? */
diff --git a/lib/kernel/pci.c b/lib/kernel/pci.c
index 5a80b05be..7ed1ba71c 100644
--- a/lib/kernel/pci.c
+++ b/lib/kernel/pci.c
@@ -6,71 +6,236 @@
  *   Unauthorized copying of this file, via any medium is strictly prohibited.
  **********************************************************************************/
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgen.h> 
+#include <dirent.h>
 #include <unistd.h>
+#include <libgen.h>
+#include <string.h>
 
 #include "log.h"
 
 #include "kernel/pci.h"
 #include "config.h"
 
-static struct pci_access *pacc;
-
-static void pci_log(char *msg, ...)
+int pci_init(struct pci *p)
 {
-	char *tmp = strdup(msg);
+	struct dirent *entry;
+	DIR *dp;
+	FILE *f;
+	char path[256];
+	int ret;
+	
+	snprintf(path, sizeof(path), "%s/bus/pci/devices", SYSFS_PATH);
 
-	va_list ap;
-	va_start(ap, msg);
-	log_vprint("PCI  ", strtok(tmp, "\n"), ap);
-	va_end(ap);
-	free(tmp);
-}
-
-struct pci_access * pci_get_handle()
-{
-	if (pacc)
-		return pacc; /* Singleton */
-
-	pacc = pci_alloc();		/* Get the pci_access structure */
-	if (!pacc)
-		error("Failed to allocate PCI access structure");
-
-	pci_init(pacc);			/* Initialize the PCI library */
-	pci_scan_bus(pacc);		/* We want to get the list of devices */
-
-	pacc->error = pci_log;	/* Replace logging and debug functions */
-	pacc->warning = pci_log;
-	pacc->debug = pci_log;
-	pacc->debugging = 1;
-
-	pci_scan_bus(pacc);		/* We want to get the list of devices */
-
-	return pacc;
-}
-
-void pci_release_handle()
-{
-	if (pacc) {
-		//pci_cleanup(pacc);
-		//pacc = NULL;
-	}
-}
-
-struct pci_dev * pci_find_device(struct pci_access *pacc, struct pci_filter *f)
-{
-	struct pci_dev *d;
-
-	/* Iterate over all devices */
-	for (d = pacc->devices; d; d = d->next) {
-		if (pci_filter_match(f, d))
-			return d;
+	dp = opendir(path);
+	if (dp == NULL) {
+		serror("Failed to detect PCI devices");
+		return -1;
 	}
 
-	return NULL;
+	while ((entry = readdir(dp))) {
+		struct pci_dev d;
+		
+		struct { const char *s; int *p; } map[] = {
+			{ "vendor", &d.id.vendor },
+			{ "device", &d.id.device }
+		};
+		
+		/* Read vendor & device id */
+		for (int i = 0; i < 2; i++) {
+			snprintf(path, sizeof(path), "%s/bus/pci/devices/%s/%s", SYSFS_PATH, entry->d_name, map[i].s);
+			
+			f = fopen(path, "r");
+			if (!f)
+				serror("Failed to open '%s'", path);
+			
+			ret = fscanf(f, "%x", map[i].p);
+			if (ret != 1)
+				error("Failed to parse %s ID from: %s", map[i].s, path);
+
+			fclose(f);
+		}
+
+		/* Get slot id */
+		ret = sscanf(entry->d_name, "%4x:%2x:%2x.%u", &d.slot.domain, &d.slot.bus, &d.slot.device, &d.slot.function);
+		if (ret != 4)
+			error("Failed to parse PCI slot number: %s", entry->d_name);
+	}
+
+	closedir(dp);
+	
+	return 0;
+}
+
+void pci_destroy(struct pci *p)
+{
+	list_destroy(&p->devices, NULL, true);
+}
+
+int pci_dev_init(struct pci_dev *d)
+{
+	return 0;
+}
+
+void pci_dev_destroy(struct pci_dev *d)
+{
+
+}
+
+int pci_dev_parse_slot(struct pci_dev *f, const char *s, const char **error)
+{
+	char *str = strdup(s);
+	char *colon = strrchr(str, ':');
+	char *dot = strchr((colon ? colon + 1 : str), '.');
+	char *mid = str;
+	char *e, *bus, *colon2;
+
+	if (colon) {
+		*colon++ = 0;
+		mid = colon;
+
+		colon2 = strchr(str, ':');
+		if (colon2) {
+			*colon2++ = 0;
+			bus = colon2;
+
+			if (str[0] && strcmp(str, "*")) {
+				long int x = strtol(str, &e, 16);
+				if ((e && *e) || (x < 0 || x > 0x7fffffff)) {
+					*error = "Invalid domain number";
+					goto fail;
+				}
+
+				f->slot.domain = x;
+			}
+		}
+		else
+			bus = str;
+			
+		if (bus[0] && strcmp(bus, "*")) {
+			long int x = strtol(bus, &e, 16);
+			if ((e && *e) || (x < 0 || x > 0xff)) {
+				*error = "Invalid bus number";
+				goto fail;
+			}
+				
+			f->slot.bus = x;
+		}
+	}
+
+	if (dot)
+		*dot++ = 0;
+	
+	if (mid[0] && strcmp(mid, "*")) {
+		long int x = strtol(mid, &e, 16);
+
+		if ((e && *e) || (x < 0 || x > 0x1f)) {
+			*error = "Invalid slot number";
+			goto fail;
+		}
+
+		f->slot.device = x;
+	}
+	
+	if (dot && dot[0] && strcmp(dot, "*")) {
+		long int x = strtol(dot, &e, 16);
+		
+		if ((e && *e) || (x < 0 || x > 7)) {
+			*error = "Invalid function number";
+			goto fail;
+		}
+
+		f->slot.function = x;
+	}
+	
+	free(str);
+	return 0;
+
+fail:
+	free(str);
+	return -1;
+}
+
+/* ID filter syntax: [vendor]:[device][:class] */
+int pci_dev_parse_id(struct pci_dev *f, const char *str, const char **error)
+{
+	char *s, *c, *e;
+
+	if (!*str)
+		return 0;
+
+	s = strchr(str, ':');
+	if (!s) {
+		*error = "':' expected";
+		goto fail;
+	}
+
+	*s++ = 0;
+	if (str[0] && strcmp(str, "*")) {
+		long int x = strtol(str, &e, 16);
+	
+		if ((e && *e) || (x < 0 || x > 0xffff)) {
+			*error = "Invalid vendor ID";
+			goto fail;
+		}
+
+		f->id.vendor = x;
+	}
+
+	c = strchr(s, ':');
+	if (c)
+		*c++ = 0;
+
+	if (s[0] && strcmp(s, "*")) {
+		long int x = strtol(s, &e, 16);
+		if ((e && *e) || (x < 0 || x > 0xffff)) {
+			*error = "Invalid device ID";
+			goto fail;
+		}
+		
+		f->id.device = x;
+	}
+	
+	if (c && c[0] && strcmp(s, "*")) {
+		long int x = strtol(c, &e, 16);
+		
+		if ((e && *e) || (x < 0 || x > 0xffff)) {
+			*error = "Invalid class code";
+			goto fail;
+		}
+
+		f->id.class = x;
+	}
+
+	return 0;
+
+fail:
+	return -1;
+}
+
+int pci_dev_compare(const struct pci_dev *d, const struct pci_dev *f)
+{
+	if ((f->slot.domain >= 0 && f->slot.domain != d->slot.domain) ||
+			(f->slot.bus >= 0 && f->slot.bus != d->slot.bus) ||
+			(f->slot.device >= 0 && f->slot.device != d->slot.device) ||
+			(f->slot.function >= 0 && f->slot.function != d->slot.function))
+		return 0;
+
+	if (f->id.device >= 0 || f->id.vendor >= 0) {
+		if ((f->id.device >= 0 && f->id.device != d->id.device) || (f->id.vendor >= 0 && f->id.vendor != d->id.vendor))
+			return 0;
+	}
+		
+	if (f->id.class >= 0) {
+		if (f->id.class != d->id.class)
+			return 0;
+	}
+
+	return 1;
+}
+
+struct pci_dev * pci_lookup_device(struct pci *p, struct pci_dev *f)
+{
+	return list_search(&p->devices, (cmp_cb_t) pci_dev_compare, (void *) f);
 }
 
 int pci_attach_driver(struct pci_dev *d, const char *driver)
@@ -84,8 +249,8 @@ int pci_attach_driver(struct pci_dev *d, const char *driver)
 	if (!f)
 		serror("Failed to add PCI id to %s driver (%s)", driver, fn);
 
-	debug(5, "Adding ID to %s module: %04x %04x", driver, d->vendor_id, d->device_id);
-	fprintf(f, "%04x %04x", d->vendor_id, d->device_id);
+	debug(5, "Adding ID to %s module: %04x %04x", driver, d->id.vendor, d->id.device);
+	fprintf(f, "%04x %04x", d->id.vendor, d->id.device);
 	fclose(f);
 
 	/* Bind to driver */
@@ -95,19 +260,19 @@ int pci_attach_driver(struct pci_dev *d, const char *driver)
 		serror("Failed to bind PCI device to %s driver (%s)", driver, fn);
 
 	debug(5, "Bind device to %s driver", driver);
-	fprintf(f, "%04x:%02x:%02x.%x\n", d->domain, d->bus, d->dev, d->func);
+	fprintf(f, "%04x:%02x:%02x.%x\n", d->slot.domain, d->slot.bus, d->slot.device, d->slot.function);
 	fclose(f);
 
 	return 0;
 }
 
-int pci_get_iommu_group(struct pci_dev *pdev)
+int pci_get_iommu_group(struct pci_dev *d)
 {
 	int ret;
 	char *group, link[1024], sysfs[1024];
 
 	snprintf(sysfs, sizeof(sysfs), "%s/bus/pci/devices/%04x:%02x:%02x.%x/iommu_group", SYSFS_PATH,
-		pdev->domain, pdev->bus, pdev->dev, pdev->func);
+		d->slot.domain, d->slot.bus, d->slot.device, d->slot.function);
 
 	ret = readlink(sysfs, link, sizeof(link));
 	if (ret < 0)
diff --git a/lib/kernel/vfio.c b/lib/kernel/vfio.c
index aee6d74f3..68e7e0b3d 100644
--- a/lib/kernel/vfio.c
+++ b/lib/kernel/vfio.c
@@ -225,7 +225,7 @@ int vfio_pci_attach(struct vfio_dev *d, struct vfio_container *c, struct pci_dev
 		error("Failed to get IOMMU group of device");
 
 	/* VFIO device name consists of PCI BDF */
-	snprintf(name, sizeof(name), "%04x:%02x:%02x.%x", pdev->domain, pdev->bus, pdev->dev, pdev->func);
+	snprintf(name, sizeof(name), "%04x:%02x:%02x.%x", pdev->slot.domain, pdev->slot.bus, pdev->slot.device, pdev->slot.function);
 
 	ret = vfio_dev_attach(d, c, name, index);
 	if (ret < 0)
diff --git a/lib/nodes/fpga.c b/lib/nodes/fpga.c
index 9c3851db0..def80ce47 100644
--- a/lib/nodes/fpga.c
+++ b/lib/nodes/fpga.c
@@ -22,6 +22,7 @@
 #include "timing.h"
 
 struct fpga fpga;
+struct pci pci;
 struct vfio_container vc;
 
 int fpga_reset(struct fpga *f)
@@ -55,21 +56,12 @@ int fpga_reset(struct fpga *f)
 
 void fpga_dump(struct fpga *f)
 {
-	char namebuf[128];
-	char *name;
-
-	struct pci_access *pacc;
-
-	pacc = pci_get_handle();
-	name = pci_lookup_name(pacc, namebuf, sizeof(namebuf), PCI_LOOKUP_DEVICE, fpga.vd.pdev->vendor_id, fpga.vd.pdev->device_id);
-	pci_fill_info(fpga.vd.pdev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_CLASS);	/* Fill in header info we need */
-
-	info("VILLASfpga card: %s", name);
+	info("VILLASfpga card:");
 	{ INDENT
-		info("Slot: %04x:%02x:%02x.%d", fpga.vd.pdev->domain, fpga.vd.pdev->bus, fpga.vd.pdev->dev, fpga.vd.pdev->func);
-		info("Vendor ID: %04x", fpga.vd.pdev->vendor_id);
-		info("Device ID: %04x", fpga.vd.pdev->device_id);
-		info("Class  ID: %04x", fpga.vd.pdev->device_class);
+		info("Slot: %04x:%02x:%02x.%d", fpga.vd.pdev->slot.domain, fpga.vd.pdev->slot.bus, fpga.vd.pdev->slot.device, fpga.vd.pdev->slot.function);
+		info("Vendor ID: %04x", fpga.vd.pdev->id.vendor);
+		info("Device ID: %04x", fpga.vd.pdev->id.device);
+		info("Class  ID: %04x", fpga.vd.pdev->id.class);
 
 		info("BAR0 mapped at %p", fpga.map);
 
@@ -94,8 +86,8 @@ int fpga_parse_card(struct fpga *f, int argc, char * argv[], config_setting_t *c
 	config_setting_t *cfg_ips, *cfg_slot, *cfg_id, *cfg_fpgas;
 
 	/* Default values */
-	f->filter.vendor = FPGA_PCI_VID_XILINX;
-	f->filter.device = FPGA_PCI_PID_VFPGA;
+	f->filter.id.vendor = FPGA_PCI_VID_XILINX;
+	f->filter.id.device = FPGA_PCI_PID_VFPGA;
 
 	cfg_fpgas = config_setting_get_member(cfg, "fpgas");
 	if (!cfg_fpgas)
@@ -118,24 +110,24 @@ int fpga_parse_card(struct fpga *f, int argc, char * argv[], config_setting_t *c
 	if (cfg_slot) {
 		slot = config_setting_get_string(cfg_slot);
 		if (slot) {
-			err = pci_filter_parse_slot(&f->filter, (char*) slot);
-			if (err)
-				cerror(cfg_slot, "%s", err);
+			ret = pci_dev_parse_slot(&f->filter, slot, &err);
+			if (ret)
+				cerror(cfg_slot, "Failed to parse PCI slot: %s", err);
 		}
 		else
-			cerror(cfg_slot, "Invalid slot format");
+			cerror(cfg_slot, "PCI slot must be a string");
 	}
 
 	cfg_id = config_setting_get_member(f->cfg, "id");
 	if (cfg_id) {
 		id = config_setting_get_string(cfg_id);
 		if (id) {
-			err = pci_filter_parse_id(&f->filter, (char*) id);
-			if (err)
-				cerror(cfg_id, "%s", err);
+			ret = pci_dev_parse_id(&f->filter, (char*) id, &err);
+			if (ret)
+				cerror(cfg_id, "Failed to parse PCI id: %s", err);
 		}
 		else
-			cerror(cfg_slot, "Invalid id format");
+			cerror(cfg_slot, "PCI ID must be a string");
 	}
 	
 	cfg_ips = config_setting_get_member(f->cfg, "ips");
@@ -162,16 +154,15 @@ int fpga_parse_card(struct fpga *f, int argc, char * argv[], config_setting_t *c
 int fpga_init(int argc, char * argv[], config_setting_t *cfg)
 {
 	int ret;
-	struct pci_access *pacc;
-	struct pci_dev *pdev;
 	struct fpga *f;
+	struct pci_dev *pdev;
 
 	/* For now we only support a single VILALSfpga card */
 	f = fpga_get();
 	list_init(&f->ips);
 
-	pacc = pci_get_handle();
-	pci_filter_init(pacc, &f->filter);
+	pci_init(&pci);
+	pci_dev_init(&f->filter);
 
 	/* Parse FPGA configuration */
 	ret = fpga_parse_card(f, argc, argv, cfg);
@@ -192,7 +183,7 @@ int fpga_init(int argc, char * argv[], config_setting_t *cfg)
 		warn("FPGA is missing an AXI4-Stream switch");
 
 	/* Search for FPGA card */
-	pdev = pci_find_device(pacc, &f->filter);
+	pdev = pci_lookup_device(&pci, &f->filter);
 	if (!pdev)
 		error("Failed to find PCI device");
 
@@ -243,8 +234,8 @@ int fpga_deinit()
 	int ret;
 
 	list_destroy(&fpga.ips, (dtor_cb_t) ip_destroy, true);
-
-	pci_release_handle();
+	
+	pci_destroy(&pci);
 
 	ret = vfio_destroy(&vc);
 	if (ret)
@@ -276,9 +267,10 @@ char * fpga_print(struct node *n)
 	
 	if (d->ip)
 		return strf("dm=%s (%s:%s:%s:%s) baseaddr=%#jx port=%u slot=%02"PRIx8":%02"PRIx8".%"PRIx8" id=%04"PRIx16":%04"PRIx16,
-			d->ip->name, d->ip->vlnv.vendor, d->ip->vlnv.library, d->ip->vlnv.name, d->ip->vlnv.version, d->ip->baseaddr, d->ip->port,
-			f->filter.bus, f->filter.device, f->filter.func,
-			f->filter.vendor, f->filter.device);
+			d->ip->name, d->ip->vlnv.vendor, d->ip->vlnv.library, d->ip->vlnv.name, d->ip->vlnv.version,
+			d->ip->baseaddr, d->ip->port,
+			f->filter.slot.bus, f->filter.slot.device, f->filter.slot.function,
+			f->filter.id.vendor, f->filter.id.device);
 	else
 		return strf("dm=%s", d->ip_name);
 }
diff --git a/thirdparty/Makefile b/thirdparty/Makefile
index 06b445bd9..6150cdf09 100644
--- a/thirdparty/Makefile
+++ b/thirdparty/Makefile
@@ -1,4 +1,4 @@
-DEPS = libxil libconfig libnl libwebsockets pciutils criterion
+DEPS = libxil libconfig libnl libwebsockets criterion
 
 .PHONY: $(DEPS) all clean
 
@@ -23,14 +23,6 @@ libnl:
 	./configure --prefix=$(PREFIX) --disable-cli && \
 	make install
 
-# Install & compile libpci dependency
-pciutils:
-	cd $@ && \
-	make clean && \
-	make SHARED=yes && \
-	make install-lib PREFIX=$(PREFIX) && \
-	ln -s $(PREFIX)/lib/libpci.so.* $(PREFIX)/lib/libpci.so
-
 # Install & compile libwebsockets dependency
 libwebsockets:
 	mkdir $@/build && cd $@/build && \

From 1cbfd72d35ba6e9942ef36f2770126f13ee94bf3 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sat, 8 Oct 2016 20:28:34 -0400
Subject: [PATCH 23/45] build thirdparty dependencies out-of-source as well

---
 .gitmodules                |  6 ++++
 Dockerfile                 |  3 +-
 Makefile                   | 61 ++++++++++++++++++++++----------------
 lib/Makefile.inc           |  4 +--
 thirdparty/Makefile        | 49 ------------------------------
 thirdparty/Makefile.inc    | 34 +++++++++++++++++++++
 thirdparty/libxil/Makefile | 24 +++++++++++----
 7 files changed, 97 insertions(+), 84 deletions(-)
 delete mode 100644 thirdparty/Makefile
 create mode 100644 thirdparty/Makefile.inc

diff --git a/.gitmodules b/.gitmodules
index b6cec1228..695ea3296 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -16,3 +16,9 @@
 [submodule "thirdparty/pciutils"]
 	path = thirdparty/pciutils
 	url = https://github.com/pciutils/pciutils.git
+[submodule "thirdparty/jansson"]
+	path = thirdparty/jansson
+	url = https://github.com/akheron/jansson.git
+[submodule "thirdparty/libcurl"]
+	path = thirdparty/libcurl
+	url = https://github.com/curl/curl.git
diff --git a/Dockerfile b/Dockerfile
index 1e873658a..c93218039 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -58,6 +58,7 @@ RUN dnf -y update && \
 	flex \
 	bison \
 	texinfo
-	
+
+WORKDIR /villas
 
 ENTRYPOINT /bin/bash
diff --git a/Makefile b/Makefile
index a6c2ad81b..90599816f 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@
 #################################################################################
 
 # Project modules
-MODULES = lib plugins src tests
+MODULES = lib plugins src tests thirdparty
 
 # Default prefix for install target
 PREFIX ?= /usr/local
@@ -41,30 +41,38 @@ else ifdef GIT
 	CFLAGS += -D_GIT_REV='"$(shell git rev-parse --short HEAD)"'
 endif
 
+# We must compile without optimizations for gcov!
+ifdef DEBUG
+	CFLAGS += -O0 -g
+	VARIANTS += debug
+else
+	CFLAGS += -O3
+	VARIANTS += release
+endif
+
+ifdef PROFILE
+	CFLAGS += -pg
+	LDFLAGS += -pg
+	
+	VARIANTS += profile
+endif
+
 ifdef COVERAGE
 	CFLAGS  += -fprofile-arcs -ftest-coverage
 	LDFLAGS += --coverage
 	LDLIBS  += -lgcov
 	
-	LIB_LDFLAGS += --coverage
+	LIB_LDFLAGS += -coverage
 	LIB_LDLIBS += -gcov
+	
+	VARIANTS += coverage
 endif
 
-# We must compile without optimizations for gcov!
-ifneq ($(or $(DEBUG),$(COVERAGE)),)
-	CFLAGS += -O0 -g
-else
-	CFLAGS += -O3
-endif
+SPACE :=
+SPACE +=
+BUILDDIR := $(BUILDDIR)/$(subst $(SPACE),-,$(strip $(VARIANTS)))
 
-# Build variant
-ifdef COVERAGE
-	BUILDDIR := $(BUILDDIR)/coverage
-else ifdef DEBUG
-	BUILDDIR := $(BUILDDIR)/debug
-else
-	BUILDDIR := $(BUILDDIR)/release
-endif
+SRCDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
 
 # pkg-config dependencies
 PKGS = libconfig
@@ -77,26 +85,21 @@ CFLAGS += $(shell pkg-config --cflags ${PKGS})
 LDLIBS += $(shell pkg-config --libs ${PKGS})
 
 # Default target: build everything; no tests, docs
-all: $(MODULES)
+all: src
 	
 everything:
 	$(MAKE) DEBUG=1
 	$(MAKE) COVERAGE=1
+	$(MAKE) PROFILE=1
 	$(MAKE) doc
 	$(MAKE) tests
 	
 .PHONY: all clean install docker doc $(MODULES)
-.SECONDARY:
-.SECONDEXPANSION:
-
-# Create non-existent directories in build directory
-$(BUILDDIR)/%/:
-	mkdir -p $@
 
 install: $(addprefix install-,$(MODULES))
-	install -m 0755 tools/villas.sh 	   $(PREFIX)/bin/villas
+	install -m 0755 tools/villas.sh $(PREFIX)/bin/villas
 
-clean:
+clean: $(addprefix clean-,$(MODULES))
 	rm -rf $(BUILDDIR)
 
 docker:
@@ -106,5 +109,11 @@ docker:
 doc:
 	( cat Doxyfile ; echo "OUTPUT_DIRECTORY=$(BUILD)/doc/" ) | doxygen -
 
+# Create non-existent directories
+%/:
+	mkdir -p $@
+
+.SECONDEXPANSION:
+
 -include $(wildcard $(BUILDDIR)/**/*.d)
-$(foreach MODULE,$(MODULES),$(eval -include $(MODULE)/Makefile.inc))
\ No newline at end of file
+-include $(addsuffix /Makefile.inc,$(MODULES))
diff --git a/lib/Makefile.inc b/lib/Makefile.inc
index bab5f1181..edb3ad7c6 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -83,5 +83,5 @@ install-lib:
 	install -m 0644 $(LIBS) $(PREFIX)/lib
 	install -m 0755				-d $(PREFIX)/include/villas/
 	install -m 0644 include/villas/*.h 	   $(PREFIX)/include/villas/
-	echo "note: you may need to run 'ldconfig'"
-	echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
+	@echo "note: you may need to run 'ldconfig'"
+	@echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
diff --git a/thirdparty/Makefile b/thirdparty/Makefile
deleted file mode 100644
index 6150cdf09..000000000
--- a/thirdparty/Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
-DEPS = libxil libconfig libnl libwebsockets criterion
-
-.PHONY: $(DEPS) all clean
-
-TMPDIR ?= $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
-PREFIX ?= /usr/local
-
-# Install all dependencies
-all: $(DEPS)
-
-# Install & compile libconfig dependency
-libconfig:
-	cd $@ && \
-	rm -f lib/scanner.[ch] && \
-	autoreconf && \
-	./configure --prefix=$(PREFIX) --disable-examples && \
-	make install
-
-# Install & compile libnl3 dependency
-libnl:
-	cd $@ && \
-	./autogen.sh && \
-	./configure --prefix=$(PREFIX) --disable-cli && \
-	make install
-
-# Install & compile libwebsockets dependency
-libwebsockets:
-	mkdir $@/build && cd $@/build && \
-	cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) .. && \
-	make install
-
-# Install & compile Criterion unittest framework
-criterion:
-	mkdir $@/build && cd $@/build && \
-	cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) .. && \
-	make install
-
-# Install & compile Xilinx standalone drivers
-libxil:
-	cd $@ && \
-	make install
-
-clean:
-	for DEP in ${DEPS}; do \
-	  pushd $$DEP; \
-	    git checkout . ; \
-	    git clean -dxf $$DEP . ; \
-	  popd; \
-	done
diff --git a/thirdparty/Makefile.inc b/thirdparty/Makefile.inc
new file mode 100644
index 000000000..702cbc2da
--- /dev/null
+++ b/thirdparty/Makefile.inc
@@ -0,0 +1,34 @@
+DEPS_CMAKE = libwebsockets criterion jansson
+DEPS_AUTOCONF = libnl libconfig libcurl
+
+DEPS = libxil $(DEPS_CMAKE) $(DEPS_AUTOCONF)
+
+.PHONY: $(DEPS)
+
+# Install all dependencies
+thirdparty: $(DEPS)
+
+# Install & compile autotools based projects
+$(DEPS_AUTOCONF): | $(BUILDDIR)/thirdparty/$$@/
+	autoreconf -fi $(SRCDIR)/thirdparty/$@
+	cd $(BUILDDIR)/thirdparty/$@ && $(SRCDIR)/thirdparty/$@/configure --prefix=$(PREFIX) && make install
+
+# Install & compile CMake based projects
+$(DEPS_CMAKE): | $(BUILDDIR)/thirdparty/$$@/
+	cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) \
+	      -H$(SRCDIR)/thirdparty/$@ \
+	      -B$(BUILDDIR)/thirdparty/$@
+	make  -C$(BUILDDIR)/thirdparty/$@ install
+
+# Install & compile Xilinx standalone drivers
+libxil: | $(BUILDDIR)/thirdparty/$$@/
+	make -C$(BUILDDIR)/thirdparty/$@ \
+	     -f$(SRCDIR)/thirdparty/$@/Makefile install
+
+clean-thirdparty:
+	for DEP in $(DEPS); do \
+	  pushd $$DEP; \
+	    git checkout . ; \
+	    git clean -dxf $$DEP . ; \
+	  popd; \
+	done
diff --git a/thirdparty/libxil/Makefile b/thirdparty/libxil/Makefile
index 9bd95f430..ad8ff1af4 100644
--- a/thirdparty/libxil/Makefile
+++ b/thirdparty/libxil/Makefile
@@ -2,12 +2,16 @@ LIB = libxil.so
 
 PREFIX ?= /usr/local
 
-SRCS  = $(wildcard src/*.c)
-SRCS += $(wildcard orig/*/src/*.c)
-OBJS  = $(SRCS:c=o)
+SRCDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+
+VPATH = $(SRCDIR)
+
+SRCS  = $(wildcard $(SRCDIR)/src/*.c)
+SRCS += $(wildcard $(SRCDIR)/orig/*/src/*.c)
+OBJS  = $(SRCS:$(SRCDIR)/%.c=%.o)
 
 CC = gcc
-CFLAGS = -O3 -fPIC -Iinclude/xilinx -Iorig/common_v1_00_a/src -Wno-int-conversion -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
+CFLAGS = -O3 -fPIC -I$(SRCDIR)/include/xilinx -Iorig/common_v1_00_a/src -Wno-int-conversion -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
 
 ifdef DEBUG
 	CFLAGS += -DDEBUG -DXDEBUG_WARNING -g
@@ -24,5 +28,13 @@ clean:
 install: $(LIB)
 	mkdir -p $(PREFIX)/include/xilinx
 	install -m 0644 $(LIB) $(PREFIX)/lib
-	install -m 0644 include/xilinx/*.h $(PREFIX)/include/xilinx
-	ldconfig
+	install -m 0644 $(SRCDIR)/include/xilinx/*.h $(PREFIX)/include/xilinx
+	@echo "note: you may need to run 'ldconfig'"
+	@echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
+
+.SECONDEXPANSION:
+	
+$(OBJS): | $$(dir $$@)
+
+%/:
+	mkdir -p $@
\ No newline at end of file

From c808af95b830a64163c4845fa1aace7b8ce1fd13 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Mon, 10 Oct 2016 16:29:15 -0400
Subject: [PATCH 24/45] removed obsolete pciutils submodule

---
 .gitmodules         | 3 ---
 thirdparty/pciutils | 1 -
 2 files changed, 4 deletions(-)
 delete mode 160000 thirdparty/pciutils

diff --git a/.gitmodules b/.gitmodules
index 695ea3296..a61e863eb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -13,9 +13,6 @@
 [submodule "thirdparty/libnl"]
 	path = thirdparty/libnl
 	url = https://github.com/thom311/libnl.git
-[submodule "thirdparty/pciutils"]
-	path = thirdparty/pciutils
-	url = https://github.com/pciutils/pciutils.git
 [submodule "thirdparty/jansson"]
 	path = thirdparty/jansson
 	url = https://github.com/akheron/jansson.git
diff --git a/thirdparty/pciutils b/thirdparty/pciutils
deleted file mode 160000
index 2f8b8f9fc..000000000
--- a/thirdparty/pciutils
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2f8b8f9fcfcdb5d5692c6da887fc7f9c0cac847c

From 67e109385d5e7d2316580a4d6891d8e121464fd3 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 19:46:22 -0400
Subject: [PATCH 25/45] preparing libxil to be moved independent repository

---
 thirdparty/Makefile.inc          | 11 +++------
 thirdparty/libxil/CMakeLists.txt | 36 ++++++++++++++++++++++++++++
 thirdparty/libxil/Makefile       | 40 --------------------------------
 thirdparty/libxil/libxil.pc.in   | 10 ++++++++
 4 files changed, 49 insertions(+), 48 deletions(-)
 create mode 100644 thirdparty/libxil/CMakeLists.txt
 delete mode 100644 thirdparty/libxil/Makefile
 create mode 100644 thirdparty/libxil/libxil.pc.in

diff --git a/thirdparty/Makefile.inc b/thirdparty/Makefile.inc
index 702cbc2da..f6e032fa7 100644
--- a/thirdparty/Makefile.inc
+++ b/thirdparty/Makefile.inc
@@ -1,12 +1,12 @@
-DEPS_CMAKE = libwebsockets criterion jansson
+DEPS_CMAKE = libxil libwebsockets criterion jansson
 DEPS_AUTOCONF = libnl libconfig libcurl
 
-DEPS = libxil $(DEPS_CMAKE) $(DEPS_AUTOCONF)
+DEPS = $(DEPS_CMAKE) $(DEPS_AUTOCONF)
 
 .PHONY: $(DEPS)
 
 # Install all dependencies
-thirdparty: $(DEPS)
+thirdparty: libxil
 
 # Install & compile autotools based projects
 $(DEPS_AUTOCONF): | $(BUILDDIR)/thirdparty/$$@/
@@ -20,11 +20,6 @@ $(DEPS_CMAKE): | $(BUILDDIR)/thirdparty/$$@/
 	      -B$(BUILDDIR)/thirdparty/$@
 	make  -C$(BUILDDIR)/thirdparty/$@ install
 
-# Install & compile Xilinx standalone drivers
-libxil: | $(BUILDDIR)/thirdparty/$$@/
-	make -C$(BUILDDIR)/thirdparty/$@ \
-	     -f$(SRCDIR)/thirdparty/$@/Makefile install
-
 clean-thirdparty:
 	for DEP in $(DEPS); do \
 	  pushd $$DEP; \
diff --git a/thirdparty/libxil/CMakeLists.txt b/thirdparty/libxil/CMakeLists.txt
new file mode 100644
index 000000000..f710497e5
--- /dev/null
+++ b/thirdparty/libxil/CMakeLists.txt
@@ -0,0 +1,36 @@
+cmake_minimum_required (VERSION 3.2)
+
+project(libxil C)
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -fPIC -I$(SRCDIR)/include/xilinx -Iorig/common_v1_00_a/src -Wno-int-conversion -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast")
+
+file(GLOB SOURCES src/*.c orig/*/src/*.c)
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/xilinx)
+
+add_library(xil SHARED ${SOURCES})
+
+include(FindPkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+	# convert lists of link libraries into -lstdc++ -lm etc..
+	foreach(LIB ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES} ${PLATFORM_LIBS})
+		set(PRIVATE_LIBS "${PRIVATE_LIBS} -l${LIB}")
+	endforeach()
+
+	# Produce a pkg-config file for linking against the shared lib
+	configure_file("libxil.pc.in" "libxil.pc" @ONLY)
+	install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libxil.pc" DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
+endif()
+
+install(TARGETS xil DESTINATION lib)
+
+file(GLOB HEADERS include/xilinx/*.h)
+
+# Make sure we dont install symlinks
+set (HEADERS_RESOLVED "")
+foreach (HEADER ${HEADERS})
+    get_filename_component(HEADER_RESOLVED "${HEADER}" REALPATH)
+    list (APPEND HEADERS_RESOLVED "${HEADER_RESOLVED}")
+endforeach()
+
+install(FILES ${HEADERS_RESOLVED} DESTINATION include/xilinx)
\ No newline at end of file
diff --git a/thirdparty/libxil/Makefile b/thirdparty/libxil/Makefile
deleted file mode 100644
index ad8ff1af4..000000000
--- a/thirdparty/libxil/Makefile
+++ /dev/null
@@ -1,40 +0,0 @@
-LIB = libxil.so
-
-PREFIX ?= /usr/local
-
-SRCDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
-
-VPATH = $(SRCDIR)
-
-SRCS  = $(wildcard $(SRCDIR)/src/*.c)
-SRCS += $(wildcard $(SRCDIR)/orig/*/src/*.c)
-OBJS  = $(SRCS:$(SRCDIR)/%.c=%.o)
-
-CC = gcc
-CFLAGS = -O3 -fPIC -I$(SRCDIR)/include/xilinx -Iorig/common_v1_00_a/src -Wno-int-conversion -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
-
-ifdef DEBUG
-	CFLAGS += -DDEBUG -DXDEBUG_WARNING -g
-endif
-
-all: $(LIB)
-
-$(LIB): $(OBJS)
-	$(CC) -shared -o $@ $^
-
-clean:
-	rm -f $(LIB) $(OBJS)
-
-install: $(LIB)
-	mkdir -p $(PREFIX)/include/xilinx
-	install -m 0644 $(LIB) $(PREFIX)/lib
-	install -m 0644 $(SRCDIR)/include/xilinx/*.h $(PREFIX)/include/xilinx
-	@echo "note: you may need to run 'ldconfig'"
-	@echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
-
-.SECONDEXPANSION:
-	
-$(OBJS): | $$(dir $$@)
-
-%/:
-	mkdir -p $@
\ No newline at end of file
diff --git a/thirdparty/libxil/libxil.pc.in b/thirdparty/libxil/libxil.pc.in
new file mode 100644
index 000000000..5f98b236a
--- /dev/null
+++ b/thirdparty/libxil/libxil.pc.in
@@ -0,0 +1,10 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+includedir=${prefix}/include
+libdir=${exec_prefix}/lib
+
+Name: xil
+Description: Xilinx standalone drivers
+Version: 1.0.0
+Cflags: -I${includedir}
+Libs: -L${libdir} -lxil
\ No newline at end of file

From 410a80faf977ed0a63a0167ebdd88e42e7febc3a Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 19:46:57 -0400
Subject: [PATCH 26/45] do not try to delete directories

---
 Makefile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Makefile b/Makefile
index 90599816f..cc0b737f3 100644
--- a/Makefile
+++ b/Makefile
@@ -113,6 +113,7 @@ doc:
 %/:
 	mkdir -p $@
 
+.PRECIOUS: %/
 .SECONDEXPANSION:
 
 -include $(wildcard $(BUILDDIR)/**/*.d)

From f038f00572af305a5fa4f9851aaefd9bcfa66c57 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 19:47:50 -0400
Subject: [PATCH 27/45] continuing effort to modularize our build system

---
 Makefile           | 3 +--
 tools/Makefile.inc | 8 ++++++++
 2 files changed, 9 insertions(+), 2 deletions(-)
 create mode 100644 tools/Makefile.inc

diff --git a/Makefile b/Makefile
index cc0b737f3..782b21f9b 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@
 #################################################################################
 
 # Project modules
-MODULES = lib plugins src tests thirdparty
+MODULES = lib plugins src tests thirdparty tools
 
 # Default prefix for install target
 PREFIX ?= /usr/local
@@ -97,7 +97,6 @@ everything:
 .PHONY: all clean install docker doc $(MODULES)
 
 install: $(addprefix install-,$(MODULES))
-	install -m 0755 tools/villas.sh $(PREFIX)/bin/villas
 
 clean: $(addprefix clean-,$(MODULES))
 	rm -rf $(BUILDDIR)
diff --git a/tools/Makefile.inc b/tools/Makefile.inc
new file mode 100644
index 000000000..6a9229bb5
--- /dev/null
+++ b/tools/Makefile.inc
@@ -0,0 +1,8 @@
+tools:
+
+clean-tools:
+
+install-tools:
+	install -m 0755 tools/villas.sh $(PREFIX)/bin/villas
+
+.PHONY: tools clean-tools install-tools
\ No newline at end of file

From da611d69b1a29f3bb24ef23c79ead4b2b7edcf04 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 19:48:18 -0400
Subject: [PATCH 28/45] fixed some unit tests

---
 tests/hist.c   | 17 +++++++++--------
 tests/timing.c | 44 ++++++++++++++++++++++----------------------
 2 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/tests/hist.c b/tests/hist.c
index b5092b29d..df9c655e8 100644
--- a/tests/hist.c
+++ b/tests/hist.c
@@ -9,26 +9,27 @@
 #include <criterion/criterion.h>
 
 #include "hist.h"
+#include "utils.h"
 
-const double test_data[] = {};
+const double test_data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 
 /* Histogram of test_data with 200 buckets between -100 and 100 */
 const int hist_result[] = {};
 
-Test(hist) {
+Test(hist, simple) {
 	struct hist h;
 	
 	hist_create(&h, -100, 100, 1);
 	
 	for (int i = 0; i < ARRAY_LEN(test_data); i++)
-		hist_put(&h, test_data[i])
+		hist_put(&h, test_data[i]);
 	
-	cr_assert_float_eq(hist_mean(&h), 1, 1e-6);
-	cr_assert_float_eq(hist_var(s&h), 1, 1e-6);
-	cr_assert_float_eq(hist_stddev(&h), 1, 1e-6);
+	cr_assert_float_eq(hist_mean(&h), 5.5, 1e-6);
+	cr_assert_float_eq(hist_var(&h), 9.1666, 1e-3,);
+	cr_assert_float_eq(hist_stddev(&h), 3.027650, 1e-6);
 	
-	for (int i = 0; i < ARRAY_LEN(hist_result); i++)
-		cr_assert_eq()
+//	for (int i = 0; i < ARRAY_LEN(hist_result); i++)
+//		cr_assert_eq()
 	
 	hist_destroy(&h);
 }
\ No newline at end of file
diff --git a/tests/timing.c b/tests/timing.c
index 28412a2ac..98f4e2616 100644
--- a/tests/timing.c
+++ b/tests/timing.c
@@ -10,7 +10,7 @@
 
 #include "timing.h"
 
-Test(time_now) {
+Test(timing, time_now) {
 	struct timespec now1 = time_now();
 	struct timespec now2 = time_now();
 	
@@ -20,9 +20,9 @@ Test(time_now) {
 	cr_assert_gt(delta, 0, "time_now() was reordered!");
 }
 
-Test(time_diff) {
-	struct timespec ts1 = { .tv_sec 1, .tv_nsec = 0}; /* Value doesnt matter */
-	struct timespec ts2 = { .tv_sec 0, .tv_nsec = 1}; /* Overflow in nano seconds! */
+Test(timing, time_diff) {
+	struct timespec ts1 = { .tv_sec = 0, .tv_nsec = 1}; /* Value doesnt matter */
+	struct timespec ts2 = { .tv_sec = 1, .tv_nsec = 0}; /* Overflow in nano seconds! */
 	
 	struct timespec ts3 = time_diff(&ts1, &ts2);
 	
@@ -31,27 +31,27 @@ Test(time_diff) {
 	cr_assert_eq(ts3.tv_nsec, 999999999);
 }
 
-Test(time_add) {
-	struct timespec ts1 = { .tv_sec 1, .tv_nsec = 999999999}; /* Value doesnt matter */
-	struct timespec ts2 = { .tv_sec 1, .tv_nsec =         1}; /* Overflow in nano seconds! */
+Test(timing, time_add) {
+	struct timespec ts1 = { .tv_sec = 1, .tv_nsec = 999999999}; /* Value doesnt matter */
+	struct timespec ts2 = { .tv_sec = 1, .tv_nsec =         1}; /* Overflow in nano seconds! */
 	
 	struct timespec ts3 = time_add(&ts1, &ts2);
 	
 	/* ts4 == ts2? */
-	cr_assert_eq(ts3.tv_sec,  2);
+	cr_assert_eq(ts3.tv_sec,  3);
 	cr_assert_eq(ts3.tv_nsec, 0);
 }
 
-Test(time_delta) {
-	struct timespec ts1 = { .tv_sec 1, .tv_nsec = 123}; /* Value doesnt matter */
-	struct timespec ts2 = { .tv_sec 5, .tv_nsec = 246}; /* Overflow in nano seconds! */
+Test(timing, time_delta) {
+	struct timespec ts1 = { .tv_sec = 1, .tv_nsec = 123}; /* Value doesnt matter */
+	struct timespec ts2 = { .tv_sec = 5, .tv_nsec = 246}; /* Overflow in nano seconds! */
 	
-	double = time_delta(&ts1, &ts2);
+	double delta = time_delta(&ts1, &ts2);
 	
-	cr_assert_float_eq(ts3.tv_sec, 4 + 123e-9, 1e-9);
+	cr_assert_float_eq(delta, 4 + 123e-9, 1e-9);
 }
 
-Test(time_from_double) {
+Test(timing, time_from_double) {
 	double ref = 1234.56789;
 	
 	struct timespec ts = time_from_double(ref);
@@ -60,7 +60,7 @@ Test(time_from_double) {
 	cr_assert_eq(ts.tv_nsec, 567890000);
 }
 
-Test(time_to_from_double) {
+Test(timing, time_to_from_double) {
 	double ref = 1234.56789;
 	
 	struct timespec ts = time_from_double(ref);
@@ -69,22 +69,22 @@ Test(time_to_from_double) {
 	cr_assert_float_eq(dbl, ref, 1e-9); 
 }
 
-Test(timer_wait_until) {
-	int tfd = timer_fd_create(CLOCK_MONOTONIC, 0);
+Test(timing, timerfd_wait_until) {
+	int tfd = timerfd_create(CLOCK_REALTIME, 0);
 	
 	cr_assert(tfd > 0);
 	
-	double waitfor = 1.123456789;
+	double waitfor = 0.423456789;
 	
 	struct timespec start = time_now();
 	struct timespec diff = time_from_double(waitfor);
-	struct timespec future = time_add(&start, &diff)
+	struct timespec future = time_add(&start, &diff);
 	
-	timer_wait_until(tfd, &future);
+	timerfd_wait_until(tfd, &future);
 	
 	struct timespec end = time_now();
 	
-	double waited = time_delta(&end, &start);
+	double waited = time_delta(&start, &end);
 	
-	cr_assert_float_eq(waited, waitfor, 1e-3, "We did not wait for %f secs");
+	cr_assert_float_eq(waited, waitfor, 1e-3, "We slept for %f instead of %f secs", waited, waitfor);
 }
\ No newline at end of file

From c3f2c966066103c9c261505fc9c734b673caa039 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 19:53:30 -0400
Subject: [PATCH 29/45] unify the style of the module Makefiles

---
 Makefile                | 4 +---
 lib/Makefile.inc        | 7 ++++++-
 plugins/Makefile.inc    | 8 ++++++++
 src/Makefile.inc        | 9 ++++++++-
 tests/Makefile.inc      | 9 ++++++++-
 thirdparty/Makefile.inc | 6 ++++++
 6 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/Makefile b/Makefile
index 782b21f9b..d53959a15 100644
--- a/Makefile
+++ b/Makefile
@@ -93,13 +93,10 @@ everything:
 	$(MAKE) PROFILE=1
 	$(MAKE) doc
 	$(MAKE) tests
-	
-.PHONY: all clean install docker doc $(MODULES)
 
 install: $(addprefix install-,$(MODULES))
 
 clean: $(addprefix clean-,$(MODULES))
-	rm -rf $(BUILDDIR)
 
 docker:
 	docker build -t villas .
@@ -112,6 +109,7 @@ doc:
 %/:
 	mkdir -p $@
 
+.PHONY: all everything clean install docker doc
 .PRECIOUS: %/
 .SECONDEXPANSION:
 
diff --git a/lib/Makefile.inc b/lib/Makefile.inc
index edb3ad7c6..4c4025473 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -79,9 +79,14 @@ $(LIBS): $(LIB_OBJS)
 	$(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS)
 	
 # Install
-install-lib:
+install-lib: lib
 	install -m 0644 $(LIBS) $(PREFIX)/lib
 	install -m 0755				-d $(PREFIX)/include/villas/
 	install -m 0644 include/villas/*.h 	   $(PREFIX)/include/villas/
 	@echo "note: you may need to run 'ldconfig'"
 	@echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
+
+clean-lib:
+	rm -rf $(BUILDDIR)/lib $(LIBS)
+
+.PHONY: lib lib-tests lib-tests
diff --git a/plugins/Makefile.inc b/plugins/Makefile.inc
index e1a0d34b1..ecfae78a9 100644
--- a/plugins/Makefile.inc
+++ b/plugins/Makefile.inc
@@ -17,3 +17,11 @@ $(BUILDDIR)/plugins/%.o: plugins/%.c | $$(dir $$@)
 # Link
 $(PLUGINS):
 	$(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS)
+
+install-plugins: plugins
+	# Plugins are not installed to the system for now...
+	
+clean-plugins:
+	rm -rf $(BUILDDIR)/plugins $(PLUGINS)
+
+.PHONY: plugins install-plugins clean-plugins
\ No newline at end of file
diff --git a/src/Makefile.inc b/src/Makefile.inc
index 020f96408..26ea1f62c 100644
--- a/src/Makefile.inc
+++ b/src/Makefile.inc
@@ -17,6 +17,8 @@ ifeq ($(shell pkg-config blas lapack; echo $$?),0)
 	BENCH_OBJS  += fpga-bench-overruns.o
 endif
 
+src: $(TARGETS)
+
 # Dependencies for individual binaries
 $(BUILDDIR)/fpga:   $(addprefix $(BUILDDIR)/src/,fpga.o fpga-tests.o fpga-bench.o $(BENCH_OBJS))
 $(BUILDDIR)/node:   $(BUILDDIR)/src/node.o
@@ -38,4 +40,9 @@ install-src:
 	install -m 0755 $(BUILDDIR)/fpga	-T $(PREFIX)/bin/villas-fpga
 	install -m 0755 $(BUILDDIR)/signal	-T $(PREFIX)/bin/villas-signal
 	install -m 0755 $(BUILDDIR)/pipe	-T $(PREFIX)/bin/villas-pipe
-	install -m 0755 $(BUILDDIR)/test	-T $(PREFIX)/bin/villas-test
\ No newline at end of file
+	install -m 0755 $(BUILDDIR)/test	-T $(PREFIX)/bin/villas-test
+
+clean-src:
+	rm -rf $(BUILDDIR)/src $(TARGETS)
+
+.PHONY: src src-tests src-tests
\ No newline at end of file
diff --git a/tests/Makefile.inc b/tests/Makefile.inc
index b2e75bfd5..c8bda7f64 100644
--- a/tests/Makefile.inc
+++ b/tests/Makefile.inc
@@ -17,4 +17,11 @@ $(BUILDDIR)/tests: $(TEST_OBJS) | $(LIBS)
 
 ifdef COVERAGE
 -include Makefile.gcov.inc
-endif
\ No newline at end of file
+endif
+install-tests:
+	# Tests are not installed
+	
+clean-tests:
+	rm -rf $(BUILDDIR)/tests $(BUILDDIR)/testsuite
+
+.PHONY: tests install-tests clean-tests
\ No newline at end of file
diff --git a/thirdparty/Makefile.inc b/thirdparty/Makefile.inc
index f6e032fa7..14e8f4f8d 100644
--- a/thirdparty/Makefile.inc
+++ b/thirdparty/Makefile.inc
@@ -27,3 +27,9 @@ clean-thirdparty:
 	    git clean -dxf $$DEP . ; \
 	  popd; \
 	done
+
+install-thirdparty: $(addprefix install-,$(DEPS))
+
+clean-thirdparty: $(addprefix clean-,$(DEPS))
+
+.PHONY: $(DEPS) thirdparty clean-thirdparty install-thirdparty
\ No newline at end of file

From 9e851f7102d332a92354beee5d81b0655e75a9b5 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 19:53:55 -0400
Subject: [PATCH 30/45] fixing first bug discovered by unit tests!!!

---
 lib/timing.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/timing.c b/lib/timing.c
index 5f8529f36..16f901afd 100644
--- a/lib/timing.c
+++ b/lib/timing.c
@@ -71,7 +71,7 @@ struct timespec time_add(struct timespec *start, struct timespec *end)
 		.tv_nsec = end->tv_nsec + start->tv_nsec
 	};
 
-	if (sum.tv_nsec > 1000000000) {
+	if (sum.tv_nsec >= 1000000000) {
 		sum.tv_sec  += 1;
 		sum.tv_nsec -= 1000000000;
 	}

From 9dd9dc8ddcba56a951ded5e8ea4f6eba7263e518 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:09:00 -0400
Subject: [PATCH 31/45] fixed dependency in fpga node-type description

---
 lib/nodes/fpga.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/nodes/fpga.c b/lib/nodes/fpga.c
index def80ce47..d4082317b 100644
--- a/lib/nodes/fpga.c
+++ b/lib/nodes/fpga.c
@@ -433,7 +433,7 @@ int fpga_write(struct node *n, struct sample *smps[], unsigned cnt)
 
 static struct node_type vt = {
 	.name		= "fpga",
-	.description	= "VILLASfpga PCIe card (libpci)",
+	.description	= "VILLASfpga PCIe card (libxil)",
 	.size		= sizeof(struct fpga_dm),
 	.vectorize	= 1,
 	.parse		= fpga_parse,

From 1472e90c2b7eb6f6861ad5d3bc21439c36a66725 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:10:06 -0400
Subject: [PATCH 32/45] build mandatory prerequisites as part of Docker build
 process

---
 .dockerignore |  3 +++
 Dockerfile    | 15 +++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/.dockerignore b/.dockerignore
index 72e8ffc0d..bec958ec2 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1 +1,4 @@
 *
+!thirdparty/libxil/
+!thirdparty/criterion/
+!thirdparty/libwebsockets/
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index c93218039..ecba9af1b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -59,6 +59,21 @@ RUN dnf -y update && \
 	bison \
 	texinfo
 
+# Build & Install libxil
+COPY thirdparty/libxil /tmp/libxil
+RUN mkdir -p /tmp/libxil/build && cd /tmp/libxil/build && cmake .. && make install
+
+# Build & Install Criterion
+COPY thirdparty/criterion /tmp/criterion
+RUN mkdir -p /tmp/criterion/build && cd /tmp/criterion/build && cmake .. && make install
+
+# Build & Install libwebsockets
+COPY thirdparty/libwebsockets /tmp/libwebsockets
+RUN mkdir -p /tmp/libwebsockets/build && cd /tmp/libwebsockets/build && cmake .. && make install
+
+# Cleanup intermediate files from builds
+RUN rm -rf /tmp
+
 WORKDIR /villas
 
 ENTRYPOINT /bin/bash

From f9f9c71f77efcdafc087305d0685df6c741f3335 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:10:51 -0400
Subject: [PATCH 33/45] Fedora, for some stupid reason, does not include
 /usr/local/ into its default search paths

---
 Dockerfile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Dockerfile b/Dockerfile
index ecba9af1b..aee38416c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -59,6 +59,9 @@ RUN dnf -y update && \
 	bison \
 	texinfo
 
+ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
+ENV LD_LIBRARY_PATH /usr/local/lib
+
 # Build & Install libxil
 COPY thirdparty/libxil /tmp/libxil
 RUN mkdir -p /tmp/libxil/build && cd /tmp/libxil/build && cmake .. && make install

From e6639cded5be706df5db4668ecb82712d3319e9c Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:11:40 -0400
Subject: [PATCH 34/45] obey coding style

---
 tests/timing.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/tests/timing.c b/tests/timing.c
index 98f4e2616..4ca8b18ef 100644
--- a/tests/timing.c
+++ b/tests/timing.c
@@ -10,7 +10,8 @@
 
 #include "timing.h"
 
-Test(timing, time_now) {
+Test(timing, time_now)
+{
 	struct timespec now1 = time_now();
 	struct timespec now2 = time_now();
 	
@@ -20,7 +21,8 @@ Test(timing, time_now) {
 	cr_assert_gt(delta, 0, "time_now() was reordered!");
 }
 
-Test(timing, time_diff) {
+Test(timing, time_diff)
+{
 	struct timespec ts1 = { .tv_sec = 0, .tv_nsec = 1}; /* Value doesnt matter */
 	struct timespec ts2 = { .tv_sec = 1, .tv_nsec = 0}; /* Overflow in nano seconds! */
 	
@@ -31,7 +33,8 @@ Test(timing, time_diff) {
 	cr_assert_eq(ts3.tv_nsec, 999999999);
 }
 
-Test(timing, time_add) {
+Test(timing, time_add)
+{
 	struct timespec ts1 = { .tv_sec = 1, .tv_nsec = 999999999}; /* Value doesnt matter */
 	struct timespec ts2 = { .tv_sec = 1, .tv_nsec =         1}; /* Overflow in nano seconds! */
 	
@@ -42,7 +45,8 @@ Test(timing, time_add) {
 	cr_assert_eq(ts3.tv_nsec, 0);
 }
 
-Test(timing, time_delta) {
+Test(timing, time_delta)
+{
 	struct timespec ts1 = { .tv_sec = 1, .tv_nsec = 123}; /* Value doesnt matter */
 	struct timespec ts2 = { .tv_sec = 5, .tv_nsec = 246}; /* Overflow in nano seconds! */
 	
@@ -51,7 +55,8 @@ Test(timing, time_delta) {
 	cr_assert_float_eq(delta, 4 + 123e-9, 1e-9);
 }
 
-Test(timing, time_from_double) {
+Test(timing, time_from_double)
+{
 	double ref = 1234.56789;
 	
 	struct timespec ts = time_from_double(ref);
@@ -60,7 +65,8 @@ Test(timing, time_from_double) {
 	cr_assert_eq(ts.tv_nsec, 567890000);
 }
 
-Test(timing, time_to_from_double) {
+Test(timing, time_to_from_double)
+{
 	double ref = 1234.56789;
 	
 	struct timespec ts = time_from_double(ref);

From 8017cffe2f319fb8bafd2074c842f9f3fa3a8e77 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:12:06 -0400
Subject: [PATCH 35/45] increase test coverage

---
 tests/list.c   | 86 +++++++++++++++++++++++++++++++++++++++++++++++++-
 tests/timing.c | 32 +++++++++++++++++--
 2 files changed, 115 insertions(+), 3 deletions(-)

diff --git a/tests/list.c b/tests/list.c
index 11f7975c1..79543d264 100644
--- a/tests/list.c
+++ b/tests/list.c
@@ -7,15 +7,99 @@
  *********************************************************************************/
 
 #include <stdint.h>
+#include <string.h>
 #include <criterion/criterion.h>
 
+#include "utils.h"
 #include "list.h"
 
+static char *nouns[] = { "time", "person", "year", "way", "day", "thing", "man", "world", "life", "hand", "part", "child", "eye", "woman", "place", "work", "week", "case", "point", "government", "company", "number", "group", "problem", "fact" };
+
+struct data {
+	char *tag;
+	int data;
+};
+
+Test(list, list_lookup)
+{
+	struct list l;
+	
+	list_init(&l);
+	
+	for (int i = 0; i < ARRAY_LEN(nouns); i++) {
+		struct data *d = malloc(sizeof(struct data));
+		
+		d->tag = nouns[i];
+		d->data = i;
+		
+		list_push(&l, d);
+	}
+	
+	struct data *found = list_lookup(&l, "woman");
+	
+	cr_assert_eq(found->data, 13);
+	
+	list_destroy(&l, NULL, true);
+}
+
+Test(list, list_search)
+{
+	struct list l;
+	
+	list_init(&l);
+	
+	/* Fill list */
+	for (int i = 0; i < ARRAY_LEN(nouns); i++)
+		list_push(&l, nouns[i]);
+
+	/* Declare on stack! */
+	char positive[] = "woman";
+	char negative[] = "dinosaurrier";
+	
+	char *found = (char *) list_search(&l, (cmp_cb_t) strcmp, positive);
+	
+	cr_assert_not_null(found);
+	cr_assert_eq(found, nouns[13]);
+	cr_assert_str_eq(found, positive);
+	
+	char *not_found = (char *) list_search(&l, (cmp_cb_t) strcmp, negative);
+
+	cr_assert_null(not_found);
+
+	list_destroy(&l, NULL, false);
+}
+
+struct content {
+	int destroyed;
+};
+
+static void dtor(void *ptr)
+{
+	struct content *elm = (struct content *) ptr;
+	
+	elm->destroyed = 1;
+}
+
+Test(list, destructor)
+{
+	struct list l;
+	struct content elm = { .destroyed = 0 };
+	
+	list_init(&l);
+	list_push(&l, &elm);
+	
+	cr_assert_eq(list_length(&l), 1);
+	
+	list_destroy(&l, dtor, false);
+
+	cr_assert_eq(elm.destroyed, 1);
+}
+
 static int compare(const void *a, const void *b) {
 	return b - a;
 }
 
-Test(test, basics)
+Test(list, basics)
 {
 	intptr_t i;
 	struct list l;
diff --git a/tests/timing.c b/tests/timing.c
index 4ca8b18ef..b4ef56813 100644
--- a/tests/timing.c
+++ b/tests/timing.c
@@ -6,6 +6,7 @@
  *   Unauthorized copying of this file, via any medium is strictly prohibited.
  *********************************************************************************/
 
+#include <unistd.h>
 #include <criterion/criterion.h>
 
 #include "timing.h"
@@ -75,7 +76,32 @@ Test(timing, time_to_from_double)
 	cr_assert_float_eq(dbl, ref, 1e-9); 
 }
 
-Test(timing, timerfd_wait_until) {
+Test(timing, timerfd_create_rate)
+{
+	struct timespec start, end;
+	
+	double rate = 5, waited;
+	
+	int tfd = timerfd_create_rate(rate);
+	
+	cr_assert(tfd > 0);
+	
+	for (int i = 0; i < 10; i++) {
+		start = time_now();
+
+		timerfd_wait(tfd);
+		
+		end = time_now();
+		waited = time_delta(&start, &end);
+		
+		cr_assert_float_eq(waited, 1.0 / rate, 10e-3, "We slept for %f instead of %f secs in round %d", waited, 1.0 / rate, i);
+	}
+	
+	close(tfd);
+}
+
+Test(timing, timerfd_wait_until)
+{
 	int tfd = timerfd_create(CLOCK_REALTIME, 0);
 	
 	cr_assert(tfd > 0);
@@ -92,5 +118,7 @@ Test(timing, timerfd_wait_until) {
 	
 	double waited = time_delta(&start, &end);
 	
-	cr_assert_float_eq(waited, waitfor, 1e-3, "We slept for %f instead of %f secs", waited, waitfor);
+	cr_assert_float_eq(waited, waitfor, 5e-3, "We slept for %f instead of %f secs", waited, waitfor);
+	
+	close(tfd);
 }
\ No newline at end of file

From e35c99b9a6024b82ed71508336d4fe294828b348 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:12:44 -0400
Subject: [PATCH 36/45] add workaround for broken libconfig build system

---
 thirdparty/Makefile.inc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/thirdparty/Makefile.inc b/thirdparty/Makefile.inc
index 14e8f4f8d..8ef65afc5 100644
--- a/thirdparty/Makefile.inc
+++ b/thirdparty/Makefile.inc
@@ -32,4 +32,8 @@ install-thirdparty: $(addprefix install-,$(DEPS))
 
 clean-thirdparty: $(addprefix clean-,$(DEPS))
 
-.PHONY: $(DEPS) thirdparty clean-thirdparty install-thirdparty
\ No newline at end of file
+.PHONY: $(DEPS) thirdparty clean-thirdparty install-thirdparty# libconfig's build system is currently broken.
+# This is a workaround for: https://github.com/hyperrealm/libconfig/issues/53
+libconfig: | libconfig-fix
+libconfig-fix:
+	rm -f $(SRCDIR)/thirdparty/libconfig/lib/scanner.[hc]
\ No newline at end of file

From 1376055f7f742d5ce326fbb37298fb0818b0015d Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:13:49 -0400
Subject: [PATCH 37/45] don't be so verbose during build

---
 lib/Makefile.inc     | 3 +--
 plugins/Makefile.inc | 4 ++--
 tests/Makefile.inc   | 3 ++-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/lib/Makefile.inc b/lib/Makefile.inc
index 4c4025473..9a5f11b34 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -83,8 +83,7 @@ install-lib: lib
 	install -m 0644 $(LIBS) $(PREFIX)/lib
 	install -m 0755				-d $(PREFIX)/include/villas/
 	install -m 0644 include/villas/*.h 	   $(PREFIX)/include/villas/
-	@echo "note: you may need to run 'ldconfig'"
-	@echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
+	ldconfig
 
 clean-lib:
 	rm -rf $(BUILDDIR)/lib $(LIBS)
diff --git a/plugins/Makefile.inc b/plugins/Makefile.inc
index ecfae78a9..cb61871b8 100644
--- a/plugins/Makefile.inc
+++ b/plugins/Makefile.inc
@@ -18,8 +18,8 @@ $(BUILDDIR)/plugins/%.o: plugins/%.c | $$(dir $$@)
 $(PLUGINS):
 	$(CC) $(LIB_LDFLAGS) -o $@ $^ $(LIB_LDLIBS)
 
-install-plugins: plugins
-	# Plugins are not installed to the system for now...
+# Plugins are not installed to the system for now...
+install-plugins:
 	
 clean-plugins:
 	rm -rf $(BUILDDIR)/plugins $(PLUGINS)
diff --git a/tests/Makefile.inc b/tests/Makefile.inc
index c8bda7f64..cfc6120a7 100644
--- a/tests/Makefile.inc
+++ b/tests/Makefile.inc
@@ -18,8 +18,9 @@ $(BUILDDIR)/tests: $(TEST_OBJS) | $(LIBS)
 ifdef COVERAGE
 -include Makefile.gcov.inc
 endif
+
+# Tests are not installed
 install-tests:
-	# Tests are not installed
 	
 clean-tests:
 	rm -rf $(BUILDDIR)/tests $(BUILDDIR)/testsuite

From 17bc32ad895dadf2bb2c0eb07161509c1a45d572 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 22:15:28 -0400
Subject: [PATCH 38/45] more improvement for our build system

---
 Dockerfile              |  2 +-
 Makefile                |  5 ++---
 lib/Makefile.inc        |  7 +++---
 src/Makefile.inc        | 49 +++++++++++++++++++++--------------------
 tests/Makefile.inc      | 12 +++++-----
 thirdparty/Makefile.inc | 30 ++++++++++++-------------
 6 files changed, 52 insertions(+), 53 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index aee38416c..48ba1fe52 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -79,4 +79,4 @@ RUN rm -rf /tmp
 
 WORKDIR /villas
 
-ENTRYPOINT /bin/bash
+ENTRYPOINT make clean && make install && villas node; bash
diff --git a/Makefile b/Makefile
index d53959a15..8b505509b 100644
--- a/Makefile
+++ b/Makefile
@@ -84,9 +84,8 @@ CFLAGS += $(addprefix -DWITH_, $(shell echo ${PKGS} | tr a-z- A-Z_ | tr -dc ' A-
 CFLAGS += $(shell pkg-config --cflags ${PKGS})
 LDLIBS += $(shell pkg-config --libs ${PKGS})
 
-# Default target: build everything; no tests, docs
-all: src
-	
+all: src plugins | lib
+
 everything:
 	$(MAKE) DEBUG=1
 	$(MAKE) COVERAGE=1
diff --git a/lib/Makefile.inc b/lib/Makefile.inc
index 9a5f11b34..d7874fe03 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -24,13 +24,12 @@ ifeq ($(shell pkg-config libnl-route-3.0; echo $$?),0)
 	LIB_PKGS    += libnl-route-3.0
 endif
 
-# Enable VILLASfpga support when libpci is available
-ifeq ($(shell pkg-config libpci; echo $$?),0)
+# Enable VILLASfpga support when libxil is available
+ifeq ($(shell pkg-config libxil; echo $$?),0)
 	LIB_SRCS    += $(addprefix lib/nodes/, fpga.c)
 	LIB_SRCS    += $(addprefix lib/kernel/, pci.c vfio.c)
 	LIB_SRCS    += $(wildcard  lib/fpga/*.c)
-	LIB_PKGS    += libpci
-	LIB_LDLIBS  += -lxil
+	PKGS        += libxil
 endif
 
 # Enable NGSI support
diff --git a/src/Makefile.inc b/src/Makefile.inc
index 26ea1f62c..280efdbe2 100644
--- a/src/Makefile.inc
+++ b/src/Makefile.inc
@@ -1,30 +1,35 @@
 # Executables
-TARGETS = $(BUILDDIR)/node \
-	  $(BUILDDIR)/pipe  \
-	  $(BUILDDIR)/signal \
-	  $(BUILDDIR)/test \
-	  $(BUILDDIR)/fpga
+TARGETS = $(BUILDDIR)/villas-node \
+	  $(BUILDDIR)/villas-pipe  \
+	  $(BUILDDIR)/villas-signal \
+	  $(BUILDDIR)/villas-test
 
-SRC_LDLIBS = $(LDLIBS) -pthread -lm -lvillas -lxil
+SRC_LDLIBS = $(LDLIBS) -pthread -lm -lvillas
 SRC_CFLAGS = $(CFLAGS)
-SRC_LDFLAGS = $(LDFLAGS)
+SRC_LDFLAGS = $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
 
-src: $(TARGETS)
+# Enable VILLASfpga support when libxil is available
+ifeq ($(shell pkg-config libxil; echo $$?),0)
+	LIB_SRCS    += $(addprefix lib/nodes/, fpga.c)
+	LIB_SRCS    += $(addprefix lib/kernel/, pci.c vfio.c)
+	LIB_SRCS    += $(wildcard  lib/fpga/*.c)
+	TARGETS     += $(BUILDDIR)/villas-fpga
+	PKGS        += libxil
 
-# Add support for LAPACK / BLAS benchmarks / solvers
-ifeq ($(shell pkg-config blas lapack; echo $$?),0)
-	PKGS        += blas lapack
-	BENCH_OBJS  += fpga-bench-overruns.o
+	# Add support for LAPACK / BLAS benchmarks / solvers
+	ifeq ($(shell pkg-config blas lapack; echo $$?),0)
+		PKGS        += blas lapack
+		BENCH_OBJS  += fpga-bench-overruns.o
+	endif
 endif
 
 src: $(TARGETS)
 
-# Dependencies for individual binaries
-$(BUILDDIR)/fpga:   $(addprefix $(BUILDDIR)/src/,fpga.o fpga-tests.o fpga-bench.o $(BENCH_OBJS))
-$(BUILDDIR)/node:   $(BUILDDIR)/src/node.o
-$(BUILDDIR)/pipe:   $(BUILDDIR)/src/pipe.o
-$(BUILDDIR)/signal: $(BUILDDIR)/src/signal.o
-$(BUILDDIR)/test:   $(BUILDDIR)/src/test.o
+$(TARGETS): $(BUILDDIR)/villas-%: $(BUILDDIR)/src/%.o
+
+# Some additional prereqs for individual binaries
+$(BUILDDIR)/villas-fpga: $(addprefix $(BUILDDIR)/src/,fpga-tests.o fpga-bench.o $(BENCH_OBJS))
+
 
 # Compile executable objects
 $(BUILDDIR)/src/%.o: src/%.c | $$(dir $$@)
@@ -35,12 +40,8 @@ $(TARGETS): | $(LIBS)
 	$(CC) $(SRC_LDFLAGS) $^ $(SRC_LDLIBS) -o $@
 
 # Install
-install-src:
-	install -m 0755 $(BUILDDIR)/node	-T $(PREFIX)/bin/villas-node
-	install -m 0755 $(BUILDDIR)/fpga	-T $(PREFIX)/bin/villas-fpga
-	install -m 0755 $(BUILDDIR)/signal	-T $(PREFIX)/bin/villas-signal
-	install -m 0755 $(BUILDDIR)/pipe	-T $(PREFIX)/bin/villas-pipe
-	install -m 0755 $(BUILDDIR)/test	-T $(PREFIX)/bin/villas-test
+install-src: src
+	install -m 0755 $(TARGETS) $(PREFIX)/bin
 
 clean-src:
 	rm -rf $(BUILDDIR)/src $(TARGETS)
diff --git a/tests/Makefile.inc b/tests/Makefile.inc
index cfc6120a7..121ba1360 100644
--- a/tests/Makefile.inc
+++ b/tests/Makefile.inc
@@ -1,19 +1,19 @@
-TARGETS += $(BUILDDIR)/tests
-
 TEST_SRCS = $(wildcard tests/*.c)
 TEST_OBJS = $(patsubst %.c,$(BUILDDIR)/%.o,$(TEST_SRCS))
 
 TEST_CFLAGS = $(CFLAGS)
-TEST_LDFLAGS = $(LDFLAGS)
-TEST_LDLIBS = $(LDLIBS) -l criterion
+TEST_LDFLAGS = $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
+TEST_LDLIBS = $(LDLIBS) -lcriterion -lvillas
+
+tests: $(BUILDDIR)/testsuite
 
 # Compile
 $(BUILDDIR)/tests/%.o: tests/%.c | $$(dir $$@)
 	$(CC) $(TEST_CFLAGS) -c $< -o $@
 
 # Link
-$(BUILDDIR)/tests: $(TEST_OBJS) | $(LIBS)
-	$(CC) $(TEST_LDFLAGS) $(TEST_LDLIBS) $^ -o $@#
+$(BUILDDIR)/testsuite: $(TEST_OBJS) | $(LIBS)
+	$(CC) $(TEST_LDFLAGS) $(TEST_LDLIBS) $^ -o $@
 
 ifdef COVERAGE
 -include Makefile.gcov.inc
diff --git a/thirdparty/Makefile.inc b/thirdparty/Makefile.inc
index 8ef65afc5..7fc108858 100644
--- a/thirdparty/Makefile.inc
+++ b/thirdparty/Makefile.inc
@@ -3,36 +3,36 @@ DEPS_AUTOCONF = libnl libconfig libcurl
 
 DEPS = $(DEPS_CMAKE) $(DEPS_AUTOCONF)
 
-.PHONY: $(DEPS)
-
-# Install all dependencies
-thirdparty: libxil
+thirdparty:
 
 # Install & compile autotools based projects
 $(DEPS_AUTOCONF): | $(BUILDDIR)/thirdparty/$$@/
 	autoreconf -fi $(SRCDIR)/thirdparty/$@
-	cd $(BUILDDIR)/thirdparty/$@ && $(SRCDIR)/thirdparty/$@/configure --prefix=$(PREFIX) && make install
+	cd $(BUILDDIR)/thirdparty/$@ && $(SRCDIR)/thirdparty/$@/configure --prefix=$(PREFIX) && make
 
 # Install & compile CMake based projects
 $(DEPS_CMAKE): | $(BUILDDIR)/thirdparty/$$@/
 	cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) \
 	      -H$(SRCDIR)/thirdparty/$@ \
 	      -B$(BUILDDIR)/thirdparty/$@
-	make  -C$(BUILDDIR)/thirdparty/$@ install
+	make  -C$(BUILDDIR)/thirdparty/$@
+
+$(addprefix install-,$(DEPS)): install-%: %
+	make -C$(BUILDDIR)/thirdparty/$(@:install-%=%) install
+	ldconfig
+
+$(addprefix clean-,$(DEPS)):
+	rm -rf $(BUILDDIR)/thirdparty/$(@:clean-%=%)
+
+install-thirdparty:
 
 clean-thirdparty:
-	for DEP in $(DEPS); do \
-	  pushd $$DEP; \
-	    git checkout . ; \
-	    git clean -dxf $$DEP . ; \
-	  popd; \
-	done
+	rm -rf $(BUILDDIR)/thirdparty
 
-install-thirdparty: $(addprefix install-,$(DEPS))
+.PHONY: $(DEPS) thirdparty clean-thirdparty install-thirdparty
 
-clean-thirdparty: $(addprefix clean-,$(DEPS))
 
-.PHONY: $(DEPS) thirdparty clean-thirdparty install-thirdparty# libconfig's build system is currently broken.
+# libconfig's build system is currently broken.
 # This is a workaround for: https://github.com/hyperrealm/libconfig/issues/53
 libconfig: | libconfig-fix
 libconfig-fix:

From 33a3ac5c8046b9c968f697a308c131242319e3f6 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 23:44:59 -0400
Subject: [PATCH 39/45] do not build the dependencies as part of the CI script.
 They are part of the Dockerfile now

---
 .gitlab-ci.yml | 30 ++----------------------------
 1 file changed, 2 insertions(+), 28 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index aa9919812..25c4e750d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,20 +9,12 @@ variables:
 
 stages:
   - prepare
-  - dependencies
   - build
   - test
   - deploy
   
 # Templates
 ##############################################################################
-.dep: &dep
-  stage: dependencies
-  script:
-    - make -C thirdparty $CI_BUILD_NAME
-  artifacts:
-    paths:
-      - $PREFIX
 
 .ssh: &ssh
   before_script:
@@ -46,18 +38,6 @@ docker-image:
     - docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE .
     - docker push $DOCKER_REGISTRY/$DOCKER_IMAGE
 
-# Stage: dependencies
-##############################################################################
-
-libwebsockets:
-  <<dep: *dep
-
-libxil:
-  <<dep: *dep
-
-libxil:
-  <<dep: *dep
-
 # Stage: build
 ##############################################################################
 
@@ -69,9 +49,6 @@ build:
     name: "${CI_PROJECT_NAME}-${CI_BUILD_REF}"
     paths:
       - $PREFIX
-  dependencies:
-    - libwebsockets
-    - libxil
 
 docs:
   stage: build
@@ -88,18 +65,15 @@ docs:
 
 unit:
   stage: test
-  dependencies:
-    - criterion
-    - build
   script:
-    - test
+    - build/release/villas-node
+    - build/release/testsuite
 
 integration:
   stage: test
   dependencies:
     - build
   script:
-    # Nothing to do here right now
     - true
 
 # Stage: deliver

From 97e22b06d4607cd62f77595ef80a50fad09a2447 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Thu, 13 Oct 2016 23:48:29 -0400
Subject: [PATCH 40/45] fix gitlab-ci.yml

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 25c4e750d..380c9674d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -74,7 +74,7 @@ integration:
   dependencies:
     - build
   script:
-    - true
+    - "true"
 
 # Stage: deliver
 ##############################################################################

From 5c02966c2a6bb1c9acf6ce4c77735551bb717e22 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Fri, 14 Oct 2016 01:08:57 -0400
Subject: [PATCH 41/45] build Docker image on octopus shell

---
 .gitlab-ci.yml | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 380c9674d..4b34dfc63 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -31,12 +31,15 @@ stages:
 docker-image:
   stage: prepare
   # Must match the docker version on the build machine!
-  image: stackbrew/docker:1.8.2
   before_script:
+    - git submodule update --init --recursive
     - docker info
   script:
     - docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE .
     - docker push $DOCKER_REGISTRY/$DOCKER_IMAGE
+  tags:
+    - shell
+    - linux
 
 # Stage: build
 ##############################################################################
@@ -49,6 +52,8 @@ build:
     name: "${CI_PROJECT_NAME}-${CI_BUILD_REF}"
     paths:
       - $PREFIX
+  tags:
+    - docker
 
 docs:
   stage: build
@@ -59,6 +64,9 @@ docs:
       - doc/latex/
   script:
     - make doc
+  tags:
+    - docker
+
 
 # Stage: test
 ##############################################################################
@@ -68,6 +76,8 @@ unit:
   script:
     - build/release/villas-node
     - build/release/testsuite
+  tags:
+    - docker
 
 integration:
   stage: test
@@ -75,6 +85,9 @@ integration:
     - build
   script:
     - "true"
+  tags:
+    - docker
+
 
 # Stage: deliver
 ##############################################################################
@@ -89,4 +102,6 @@ deliver:
     - develop
   dependencies:
    - docs
+  tags:
+    - docker
 

From d8271f82f8a6176b98860550a67b2a9975dc6e81 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Fri, 14 Oct 2016 01:33:07 -0400
Subject: [PATCH 42/45] improve gitlab-ci.yml

---
 .gitlab-ci.yml   | 53 ++++++++++++++++++++++++++----------------------
 Makefile         |  4 ++--
 lib/Makefile.inc |  8 ++++++++
 3 files changed, 39 insertions(+), 26 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4b34dfc63..ed37992de 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,3 @@
-image: acs-public:5000/villas:latest
-
 variables:
   # This registry is a linked docker container running on the same host
   # and configured in gitlab-ci-runner config.toml as a linked service
@@ -12,17 +10,6 @@ stages:
   - build
   - test
   - deploy
-  
-# Templates
-##############################################################################
-
-.ssh: &ssh
-  before_script:
-    - mkdir -p $HOME/.ssh
-    - echo -e "$SSH_SECRET_KEY" > $HOME/.ssh/id_rsa
-    - chmod 600 $HOME/.ssh/id_rsa
-    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > $HOME/.ssh/config
-    - ssh-keyscan -H $DEPLOY_HOST >> $HOME/.ssh/known_hosts
 
 # Stage: prepare
 ##############################################################################
@@ -47,11 +34,12 @@ docker-image:
 build:
   stage: build
   script:
-    - make
+    - make install
   artifacts:
     name: "${CI_PROJECT_NAME}-${CI_BUILD_REF}"
     paths:
-      - $PREFIX
+      - build/release/
+  image: $DOCKER_REGISTRY/$DOCKER_IMAGE
   tags:
     - docker
 
@@ -60,10 +48,10 @@ docs:
   artifacts:
     name: "${CI_PROJECT_NAME}-doc-${CI_BUILD_REF}"
     paths:
-      - doc/html/
-      - doc/latex/
+      - build/release/doc/
   script:
     - make doc
+  image: $DOCKER_REGISTRY/$DOCKER_IMAGE
   tags:
     - docker
 
@@ -71,11 +59,28 @@ docs:
 # Stage: test
 ##############################################################################
 
-unit:
+coverage:
   stage: test
   script:
-    - build/release/villas-node
+    - make coverage COVERAGE=1
+  artifacts:
+    name: "${CI_PROJECT_NAME}-coverage-${CI_BUILD_REF}"
+    paths:
+      - build/release-coverage/coverage/
+      - build/release-coverage/coverage.txt
+      - build/release-coverage/coverage.xml
+  image: $DOCKER_REGISTRY/$DOCKER_IMAGE
+  tags:
+    - docker
+
+unit:
+  stage: test
+  dependencies:
+    - build
+  script:
+    - make tests
     - build/release/testsuite
+  image: $DOCKER_REGISTRY/$DOCKER_IMAGE
   tags:
     - docker
 
@@ -84,7 +89,8 @@ integration:
   dependencies:
     - build
   script:
-    - "true"
+    - build/release/villas-node
+  image: $DOCKER_REGISTRY/$DOCKER_IMAGE
   tags:
     - docker
 
@@ -94,14 +100,13 @@ integration:
 
 deliver:
   stage: deploy
-  <<: *ssh
   script:
-    - '[ "$CI_BUILD_REF_NAME" == "develop" ] && scp -pr web/landing.html $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/index.html'
-    - scp -pr doc/html/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/doc/$CI_BUILD_REF_NAME/
+    - rsync    web/landing.html $DEPLOY_PATH/index.html
+    - rsync -r build/doc/html/  $DEPLOY_PATH/doc/$CI_BUILD_REF_NAME/
   only:
     - develop
   dependencies:
    - docs
   tags:
-    - docker
+    - villas-deploy
 
diff --git a/Makefile b/Makefile
index 8b505509b..db1520f70 100644
--- a/Makefile
+++ b/Makefile
@@ -101,8 +101,8 @@ docker:
 	docker build -t villas .
 	docker run -it -p 80:80 -p 443:443 -p 1234:1234 --privileged --cap-add sys_nic --ulimit memlock=1073741824 --security-opt seccomp:unconfined -v $(PWD):/villas villas
 
-doc:
-	( cat Doxyfile ; echo "OUTPUT_DIRECTORY=$(BUILD)/doc/" ) | doxygen -
+doc: | $(BUILDDIR)/doc/
+	( cat Doxyfile ; echo "OUTPUT_DIRECTORY=$(BUILDDIR)/doc/" ) | doxygen -
 
 # Create non-existent directories
 %/:
diff --git a/lib/Makefile.inc b/lib/Makefile.inc
index d7874fe03..21b221772 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -17,32 +17,40 @@ LIB_LDLIBS  = $(LDLIBS) -ldl -lrt
 ######## 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)
 	LIB_SRCS    += $(wildcard  lib/fpga/*.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

From afefc7f5fab2d048337f2ba49d1490cceead941a Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sat, 15 Oct 2016 22:06:00 -0400
Subject: [PATCH 43/45] added coverage information

---
 .gitlab-ci.yml          |  2 +-
 Dockerfile              |  7 +++++++
 tests/Makefile.gcov.inc | 34 ++++++++++++++++++++++++++++++++++
 tests/Makefile.inc      |  2 +-
 4 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 tests/Makefile.gcov.inc

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ed37992de..ae760ea07 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -89,7 +89,7 @@ integration:
   dependencies:
     - build
   script:
-    - build/release/villas-node
+    - "build/release/villas-node || true"
   image: $DOCKER_REGISTRY/$DOCKER_IMAGE
   tags:
     - docker
diff --git a/Dockerfile b/Dockerfile
index 48ba1fe52..408766244 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -59,6 +59,13 @@ RUN dnf -y update && \
 	bison \
 	texinfo
 
+# Tools for coverage and profiling
+RUN dnf -y update && \
+    dnf -y install \
+        python-pip && \
+    pip install \
+        gcovr
+
 ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
 ENV LD_LIBRARY_PATH /usr/local/lib
 
diff --git a/tests/Makefile.gcov.inc b/tests/Makefile.gcov.inc
new file mode 100644
index 000000000..c8833625e
--- /dev/null
+++ b/tests/Makefile.gcov.inc
@@ -0,0 +1,34 @@
+COVERAGE_TESTS = $(BUILDDIR)/testsuite
+COVERAGE_OBJS = $(LIB_OBJS) $(SRC_OBJS)
+
+GCDAS = $(COVERAGE_OBJS:.o=.gcda)
+GCNOS = $(COVERAGE_OBJS:.o=.gcno)
+
+GCOVR_OPTS = --exclude ^include --root . --sort-percentage --print-summary
+
+coverage: $(BUILDDIR)/coverage/index.html $(BUILDDIR)/coverage.xml $(BUILDDIR)/coverage.txt
+
+$(BUILDDIR)/coverage.txt:  $(addsuffix .gcdas,$(COVERAGE_TESTS)) | $$(dir $$@)
+	gcovr $(GCOVR_OPTS) -o $@
+
+$(BUILDDIR)/coverage.xml:  $(addsuffix .gcdas,$(COVERAGE_TESTS)) | $$(dir $$@)
+	gcovr $(GCOVR_OPTS) --xml --xml-pretty -o $@
+
+$(BUILDDIR)/coverage/index.html: $(addsuffix .gcdas,$(COVERAGE_TESTS)) | $$(dir $$@)
+	gcovr $(GCOVR_OPTS) --html --html-details -o $@
+
+# This is an intermediate target. It is used to run the test only once for all gcovr rules.
+%.gcdas: %
+	@echo "Delete previous coverage information"
+	rm -f $(GCDAS)
+	@echo "Run $< for collecting coverage information (.gcda)"
+	$^
+
+clean-coverage:
+	rm -rf $(BUILDDIR)/coverage $(BUILDDIR)/coverage.txt $(BUILDDIR)/coverage.xml
+	rm -f $(GCDAS)
+	
+install-coverage:
+
+.INTERMEDIATE: $(addsuffix .gcdas,$(COVERAGE_TESTS))
+.PHONY: coverage gcda clean-coverage install-coverage
\ No newline at end of file
diff --git a/tests/Makefile.inc b/tests/Makefile.inc
index 121ba1360..b701f5772 100644
--- a/tests/Makefile.inc
+++ b/tests/Makefile.inc
@@ -16,7 +16,7 @@ $(BUILDDIR)/testsuite: $(TEST_OBJS) | $(LIBS)
 	$(CC) $(TEST_LDFLAGS) $(TEST_LDLIBS) $^ -o $@
 
 ifdef COVERAGE
--include Makefile.gcov.inc
+-include tests/Makefile.gcov.inc
 endif
 
 # Tests are not installed

From e786a44c83106c2751aa366299bd3f460dd9e953 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sat, 15 Oct 2016 22:52:31 -0400
Subject: [PATCH 44/45] deploy coverage

---
 .gitlab-ci.yml | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ae760ea07..40efbaef7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -98,15 +98,23 @@ integration:
 # Stage: deliver
 ##############################################################################
 
-deliver:
+website:
   stage: deploy
   script:
     - rsync    web/landing.html $DEPLOY_PATH/index.html
-    - rsync -r build/doc/html/  $DEPLOY_PATH/doc/$CI_BUILD_REF_NAME/
   only:
     - develop
-  dependencies:
-   - docs
+  tags:
+    - villas-deploy
+
+deliver:
+  stage: deploy
+  script:
+    - rsync -r build/release/doc/html/ $DEPLOY_PATH/doc/$CI_BUILD_REF_NAME/
+    - rsync -r build/release-coverage/coverage/ $DEPLOY_PATH/coverage/$CI_BUILD_REF_NAME/
+  dependencies:
+   - docs
+   - coverage
   tags:
     - villas-deploy
 

From 2c2b0c3062a94e152a566b82fc4dff623951cfe9 Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Sat, 15 Oct 2016 23:07:30 -0400
Subject: [PATCH 45/45] improved landing page

---
 .gitlab-ci.yml                   | 2 +-
 web/{landing.html => index.html} | 9 +++------
 2 files changed, 4 insertions(+), 7 deletions(-)
 rename web/{landing.html => index.html} (76%)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 40efbaef7..d0ef8281f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -101,7 +101,7 @@ integration:
 website:
   stage: deploy
   script:
-    - rsync    web/landing.html $DEPLOY_PATH/index.html
+    - rsync web/ $DEPLOY_PATH/
   only:
     - develop
   tags:
diff --git a/web/landing.html b/web/index.html
similarity index 76%
rename from web/landing.html
rename to web/index.html
index 5cb405aba..98e3e6f68 100644
--- a/web/landing.html
+++ b/web/index.html
@@ -15,11 +15,8 @@
 			<li><a href="http://git.rwth-aachen.de/acs/VILLASnode">RWTH GitLab</a></li>
 		</ul>
 
-		<h3>Documentation</h3>
-
-		<ul>
-			<li><a href="doc/develop/html">develop</a></li>
-			<li><a href="doc/master/html/">master</a></li>
-		</ul>
+		<h3><a href="doc/">Documentation</a></h3>
+		<h3><a href="coverage/">Coverage</a></h3>
+		<h3><a href="socket/">WebSocket demo</a></h3>
 	</body>
 </html>