diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8e53db85b2bd85578843ca3e3b47eb59afdeb927..13bc283c77c88eead0b0297c5069e468205ce552 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,10 +1,10 @@
 build:
   stage: build
   script:
-    - echo "It works."
+    - bash ci-build.sh
 
 # run tests using the binary built before
 test:
   stage: test
   script:
-    - bash test-ci.sh
+    - bash ci-test.sh
diff --git a/ci-build.sh b/ci-build.sh
new file mode 100644
index 0000000000000000000000000000000000000000..af6f06ee2b0ac51bbf2ca42d1819684979dd267e
--- /dev/null
+++ b/ci-build.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+PROJECT_ROOT=$(pwd)
+export PROJECT_ROOT
+
+# Quad
+bash quad/ci-build.sh || exit 1
diff --git a/test-ci.sh b/ci-test.sh
similarity index 66%
rename from test-ci.sh
rename to ci-test.sh
index 8278c93522978d69a943fbc608444196fe58b5ec..5542a1b99fad91c60197f1aa8189a780316b94ff 100644
--- a/test-ci.sh
+++ b/ci-test.sh
@@ -4,4 +4,4 @@ PROJECT_ROOT=$(pwd)
 export PROJECT_ROOT
 
 # Quad
-bash quad/test-ci.sh || exit 1
+bash quad/ci-test.sh || exit 1
diff --git a/quad/ci-build.sh b/quad/ci-build.sh
new file mode 100644
index 0000000000000000000000000000000000000000..36ff958b187383adb5a1007f85e6bffa1f5b09d2
--- /dev/null
+++ b/quad/ci-build.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+QUAD_ROOT=$PROJECT_ROOT/quad
+export QUAD_ROOT
+
+# Build Quad code
+cd $QUAD_ROOT/sw/modular_quad_pid/
+bash build.sh || exit 1
diff --git a/quad/test-ci.sh b/quad/ci-test.sh
similarity index 81%
rename from quad/test-ci.sh
rename to quad/ci-test.sh
index c35802b3984f5ba6dd4ba5984136340dec297e35..bb2cc16665d0687f7f3cdb553e2d39e8c1ff1b9c 100644
--- a/quad/test-ci.sh
+++ b/quad/ci-test.sh
@@ -3,9 +3,11 @@
 QUAD_ROOT=$PROJECT_ROOT/quad
 export QUAD_ROOT
 
+# Build Test Library
 cd $QUAD_ROOT/lib/test
 make || exit 1
 
+# Test UART buffer
 cd $QUAD_ROOT/sw/modular_quad_pid/test
 make || exit 1
 ./test_uart_buff || exit 1
diff --git a/quad/sw/modular_quad_pid/.build_app.tcl b/quad/sw/modular_quad_pid/.build_app.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..ae51135bb7ea13e1f14bc28fda3da7f2c4751181
--- /dev/null
+++ b/quad/sw/modular_quad_pid/.build_app.tcl
@@ -0,0 +1,3 @@
+cd ..
+sdk set_workspace .
+sdk build_project -type app -name modular_quad_pid
diff --git a/quad/sw/modular_quad_pid/.build_bsp.tcl b/quad/sw/modular_quad_pid/.build_bsp.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..6188f060ae618549d958ff723b7fc645778128c6
--- /dev/null
+++ b/quad/sw/modular_quad_pid/.build_bsp.tcl
@@ -0,0 +1,3 @@
+cd ..
+sdk set_workspace .
+sdk build_project -type bsp -name system_bsp
diff --git a/quad/sw/modular_quad_pid/.create_bsp.tcl b/quad/sw/modular_quad_pid/.create_bsp.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..48668ef358b00c6a12098269411fe91a613053a1
--- /dev/null
+++ b/quad/sw/modular_quad_pid/.create_bsp.tcl
@@ -0,0 +1,3 @@
+cd ..
+sdk set_workspace .
+sdk create_bsp_project -name system_bsp -hwproject system_hw_platform -proc ps7_cortexa9_0 -os standalone
diff --git a/quad/sw/modular_quad_pid/build.sh b/quad/sw/modular_quad_pid/build.sh
new file mode 100644
index 0000000000000000000000000000000000000000..16f728e1c52a93f5b3996876765b2cc12919dc7c
--- /dev/null
+++ b/quad/sw/modular_quad_pid/build.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+source /remote/Xilinx/2015.4/SDK/2015.4/settings64.sh
+
+echo "Building modular_quad_pid"
+
+if [ ! -d ../.metadata ]; then
+    # Haven't configured XSDK environment yet. Do that now
+
+    ECLIPSE=/remote/Xilinx/2015.4/SDK/2015.4/eclipse/lnx64.o/eclipse
+    VM=/remote/Xilinx/2015.4/SDK/2015.4/tps/lnx64/jre/bin
+    WSPACE=$(dirname $0)/..
+    HW=$WSPACE/system_hw_platform
+    BSP=$WSPACE/system_bsp
+    APP=$WSPACE/modular_quad_pid
+
+    echo "Setting up dependencies for modular_quad_pid"
+
+    # Import the system_hw_platform into the workspace
+    $ECLIPSE -vm $VM -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
+        -import $HW \
+        -data $WSPACE \
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole || exit 1
+
+    # Create the BSP
+    xsct .create_bsp.tcl || exit 1
+
+    # Import the system_bsp and modular_quad_pid into workspace
+    $ECLIPSE -vm $VM -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
+        -import $BSP \
+        -import $APP \
+        -data $WSPACE \
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole || exit 1
+
+    # Build the BSP
+    xsct .build_bsp.tcl || exit 1
+
+fi
+
+xsct .build_app.tcl || exit 1