diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f26486f84123007bb026e9a5ed9fc9ccdfbf49cf..907f21c8b4c695a9283bf1e104babb9868dfb785 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,6 +4,7 @@ variables:
   FLAWFINDER_OPTIONS: "-m 4 --error-level=5"
   CPD_OPTIONS: "--minimum-tokens 200 --language c --exclude ./daemon/json_rpc/ --files"
   CPPCHECK_OPTIONS: " --enable=performance,portability,information --inline-suppr"
+  COMPILE: "./gitlab-ci/compile.sh"
 
 include:
   - project: 'iopsys/gitlab-ci-pipeline'
diff --git a/CMakeLists.txt b/CMakeLists.txt
index af09abce944d00023b48457ee2a87908cc277e97..22dd66729ac8bf2ea0eca6b5353b21c03665900d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,6 +2,30 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(tr104d C)
 
+IF(DATAMODEL_DB_PATH)
+	ADD_DEFINITIONS(-DETC_DB_CONFIG="${DATAMODEL_DB_PATH}")
+ENDIF()
+
+IF(DATAMODEL_DMMAP_PATH)
+	ADD_DEFINITIONS(-DBBFDM_CONFIG="${DATAMODEL_DMMAP_PATH}")
+ENDIF()
+
+IF(DATAMODEL_UCI_PATH)
+	ADD_DEFINITIONS(-DUCI_CONFIG_DIR="${DATAMODEL_UCI_PATH}")
+ENDIF()
+
+IF(BBF_VENDOR_PREFIX)
+	ADD_DEFINITIONS(-DBBF_VENDOR_PREFIX="${BBF_VENDOR_PREFIX}")
+ENDIF()
+
+ADD_DEFINITIONS(-Wall -Werror -D_GNU_SOURCE)
+
+IF(NOT RUNAS_BBFDM_MICROSERVICE)
+	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SOURCE_DIR}/libdmtree")
+ENDIF()
+
 add_subdirectory(libdm)
 add_subdirectory(libdmtree)
+
+ADD_DEFINITIONS(-fstrict-aliasing -Wall -Wextra -Werror -Wformat -Wformat-signedness -fPIC -D_GNU_SOURCE)
 add_subdirectory(daemon)
diff --git a/daemon/json_rpc/CMakeLists.txt b/daemon/json_rpc/CMakeLists.txt
index 0502a5b766d42bed1ff3ecefcc637fae88155dbe..e8dec5ead034d9bf135e012e94a436ba828bcd04 100644
--- a/daemon/json_rpc/CMakeLists.txt
+++ b/daemon/json_rpc/CMakeLists.txt
@@ -2,12 +2,6 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(tr104d)
 
-ADD_DEFINITIONS(-fstrict-aliasing -Wall -Wextra -Werror -Wformat -Wformat-signedness -fPIC -D_GNU_SOURCE)
-ADD_DEFINITIONS(-DBBF_VENDOR_PREFIX="${BBF_VENDOR_PREFIX}")
-ADD_DEFINITIONS(-DETC_DB_CONFIG="${ETC_DB_CONFIG}")
-ADD_DEFINITIONS(-DBBFDM_CONFIG="${BBFDM_CONFIG}")
-ADD_DEFINITIONS(-DUCI_CONFIG_DIR="${UCI_CONFIG_DIR}")
-
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/libdmtree")
 
 OPTION(DM_ENABLE_DECT "Enable DECT support" OFF)
diff --git a/daemon/ubus/CMakeLists.txt b/daemon/ubus/CMakeLists.txt
index dfb866661b5a71f930842907ccd43c3c435b0762..6e986d843df0253d5767b33130ab72bf26efd661 100644
--- a/daemon/ubus/CMakeLists.txt
+++ b/daemon/ubus/CMakeLists.txt
@@ -2,17 +2,14 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(tr104d)
 
-ADD_DEFINITIONS(-fstrict-aliasing -Wall -Wextra -Werror -Wformat -Wformat-signedness -fPIC -D_GNU_SOURCE)
-ADD_DEFINITIONS(-DBBF_VENDOR_PREFIX="${BBF_VENDOR_PREFIX}")
-ADD_DEFINITIONS(-DDAEMON_JSON_INPUT="${DAEMON_JSON_INPUT}")
-ADD_DEFINITIONS(-DETC_DB_CONFIG="${ETC_DB_CONFIG}")
-ADD_DEFINITIONS(-DBBFDM_CONFIG="${BBFDM_CONFIG}")
-ADD_DEFINITIONS(-DUCI_CONFIG_DIR="${UCI_CONFIG_DIR}")
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/libdmtree")
+IF(DAEMON_JSON_INPUT)
+	ADD_DEFINITIONS(-DDAEMON_JSON_INPUT="${DAEMON_JSON_INPUT}")
+ELSE()
+	ADD_DEFINITIONS(-DDAEMON_JSON_INPUT="/etc/tr104/input.json")
+ENDIF()
 
 FILE(GLOB BBF_SOURCES *.c)
 ADD_EXECUTABLE(tr104d ${BBF_SOURCES})
-TARGET_LINK_LIBRARIES(tr104d ubus ubox blobmsg_json uci json-c dl dmtree)
+TARGET_LINK_LIBRARIES(tr104d dmtree ubus ubox blobmsg_json uci json-c dl)
 
 INSTALL(TARGETS tr104d DESTINATION usr/sbin)
diff --git a/gitlab-ci/compile.sh b/gitlab-ci/compile.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2d857606b74b41e43f3d57bee1c2e9f734eeb6fe
--- /dev/null
+++ b/gitlab-ci/compile.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+exec_cmd()
+{
+	echo "Executing [$*]"
+	if ! $@; then
+		echo "Failed to execute [$*]"
+		exit -1
+	fi
+}
+
+install_iowrt()
+{
+	echo "Compiling IOWRT version"
+	[ -d "builds" ] && rm -rf builds
+
+	mkdir -p builds
+	cd builds
+
+	exec_cmd cmake -DBBF_VENDOR_PREFIX:String="X_IOPSYS_EU" -DCMAKE_INSTALL_PREFIX:PATH=/ -DCMAKE_VERBOSE_MAKEFILE=ON -DDM_ENABLE_UBUS=ON -DTR104_EXTENSION_DIR:String="iowrt" ../
+	exec_cmd make
+	exec_cmd make install
+	cd ..
+
+	[ -d "builds" ] && rm -rf builds
+}
+
+install_rdk()
+{
+	echo "Compiling RDK version"
+	# RDK specific compilation
+	# exec_cmd cmake -DCMAKE_INSTALL_PREFIX:PATH=/ -DCMAKE_VERBOSE_MAKEFILE=ON -DDM_ENABLE_UBUS=ON -DTR104_EXTENSION_DIR:String="iowrt" ../
+	# exec_cmd make
+	# exec_cmd make install
+}
+
+install_iowrt
+install_rdk
+
+date +%s > timestamp.log
diff --git a/gitlab-ci/files/etc/tr104/input.json b/gitlab-ci/files/etc/tr104/input.json
new file mode 100644
index 0000000000000000000000000000000000000000..872fca3c41b7a2509e318641d7acd4400d11214f
--- /dev/null
+++ b/gitlab-ci/files/etc/tr104/input.json
@@ -0,0 +1,32 @@
+{
+        "daemon": {
+                "config": {
+                        "loglevel": "1",
+                        "refresh_time": "10",
+                        "transaction_timeout": "30"
+                },
+                "input": {
+                        "type": "DotSo",
+                        "name": "/etc/tr104/libtr104.so",
+                        "plugin_dir": "/etc/tr104/plugins/"
+                },
+                "output": {
+                        "type": "UBUS",
+                        "name": "tr104"
+                }
+        },
+        "cli": {
+                "config": {
+                        "proto": "both",
+                        "instance_mode": 0
+                },
+                "input": {
+                        "type": "UBUS",
+                        "name": "tr104"
+                },
+                "output": {
+                        "type": "CLI"
+                }
+        }
+}
+
diff --git a/libdm/CMakeLists.txt b/libdm/CMakeLists.txt
index 007cb581942a339128d56b527345bb786a93c96e..3443efc98c0f2d19dcdc016ee53d69fe34d5e76e 100644
--- a/libdm/CMakeLists.txt
+++ b/libdm/CMakeLists.txt
@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(libdm C)
 
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}/common")
 add_subdirectory(tr104)
 
 IF(TR104_EXTENSION_DIR)
diff --git a/libdm/extensions/iowrt/CMakeLists.txt b/libdm/extensions/iowrt/CMakeLists.txt
index 552683ed4ada709f77f0dcd0d0078ee81cc0a1f4..b1a9932bce8c894606cacdcc25e2377d2a4a6685 100644
--- a/libdm/extensions/iowrt/CMakeLists.txt
+++ b/libdm/extensions/iowrt/CMakeLists.txt
@@ -2,15 +2,7 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(libtr104ext)
 
-ADD_DEFINITIONS(-Wall -Werror)
-ADD_DEFINITIONS(-D_GNU_SOURCE)
-ADD_DEFINITIONS(-DBBF_VENDOR_PREFIX="${BBF_VENDOR_PREFIX}")
-ADD_DEFINITIONS(-DETC_DB_CONFIG="${ETC_DB_CONFIG}")
-ADD_DEFINITIONS(-DBBFDM_CONFIG="${BBFDM_CONFIG}")
-ADD_DEFINITIONS(-DUCI_CONFIG_DIR="${UCI_CONFIG_DIR}")
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/libdmtree -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR}/../../common/")
-
 FILE(GLOB BBF_DM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.c)
 
 ADD_LIBRARY(tr104ext SHARED ${BBF_DM_SOURCES})
+INSTALL(TARGETS tr104ext DESTINATION etc/tr104/plugins)
diff --git a/libdm/extensions/rdk/CMakeLists.txt b/libdm/extensions/rdk/CMakeLists.txt
index e5a19d38a0a3bda7afea66247ead6e9361859499..3415c3547103dcc3d774dc42c1592e3948108b31 100644
--- a/libdm/extensions/rdk/CMakeLists.txt
+++ b/libdm/extensions/rdk/CMakeLists.txt
@@ -2,13 +2,6 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(libtr104ext)
 
-ADD_DEFINITIONS(-Wall -Werror)
-ADD_DEFINITIONS(-D_GNU_SOURCE)
-ADD_DEFINITIONS(-DBBF_VENDOR_PREFIX="${BBF_VENDOR_PREFIX}")
-ADD_DEFINITIONS(-DETC_DB_CONFIG="${ETC_DB_CONFIG}")
-ADD_DEFINITIONS(-DBBFDM_CONFIG="${BBFDM_CONFIG}")
-ADD_DEFINITIONS(-DUCI_CONFIG_DIR="${UCI_CONFIG_DIR}")
-
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/libdmtree -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR}/../../common")
 
 FILE(GLOB BBF_DM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.c)
diff --git a/libdm/tr104/CMakeLists.txt b/libdm/tr104/CMakeLists.txt
index 7e902ed22a2aeb1cdbef10d47b1141cb3e2600a7..86d7978147f443f2b42157038c56d74f9f8b8724 100644
--- a/libdm/tr104/CMakeLists.txt
+++ b/libdm/tr104/CMakeLists.txt
@@ -2,15 +2,7 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(libtr104)
 
-ADD_DEFINITIONS(-Wall -Werror)
-ADD_DEFINITIONS(-D_GNU_SOURCE)
-ADD_DEFINITIONS(-DBBF_VENDOR_PREFIX="${BBF_VENDOR_PREFIX}")
-ADD_DEFINITIONS(-DETC_DB_CONFIG="${ETC_DB_CONFIG}")
-ADD_DEFINITIONS(-DBBFDM_CONFIG="${BBFDM_CONFIG}")
-ADD_DEFINITIONS(-DUCI_CONFIG_DIR="${UCI_CONFIG_DIR}")
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SOURCE_DIR}/libdmtree -I${CMAKE_SOURCE_DIR}/libdmtree/include -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR}/../common")
-
 FILE(GLOB BBF_DM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.c)
 
 ADD_LIBRARY(tr104 SHARED ${BBF_DM_SOURCES})
+INSTALL(TARGETS tr104 DESTINATION etc/tr104)
diff --git a/libdmtree/CMakeLists.txt b/libdmtree/CMakeLists.txt
index 477d6078c7689ab4fcf9baf808dc8ca0ac2c8885..c5617a3b51885e3847b55f5c7dc78d1bbeae68d5 100644
--- a/libdmtree/CMakeLists.txt
+++ b/libdmtree/CMakeLists.txt
@@ -2,13 +2,6 @@ cmake_minimum_required(VERSION 3.0)
 
 PROJECT(libdmtree)
 
-ADD_DEFINITIONS(-Wall -Werror)
-ADD_DEFINITIONS(-D_GNU_SOURCE)
-ADD_DEFINITIONS(-DBBF_VENDOR_PREFIX="${BBF_VENDOR_PREFIX}")
-ADD_DEFINITIONS(-DETC_DB_CONFIG="${ETC_DB_CONFIG}")
-ADD_DEFINITIONS(-DBBFDM_CONFIG="${BBFDM_CONFIG}")
-ADD_DEFINITIONS(-DUCI_CONFIG_DIR="${UCI_CONFIG_DIR}")
-
 FILE(GLOB BBF_API_SOURCES *.c plugin/*.c)
 
 ADD_LIBRARY(dmtree STATIC ${BBF_API_SOURCES})