From 825e2713fbf5db57173c76c6c5c1df3a2e2d23a7 Mon Sep 17 00:00:00 2001
From: Brendan Bartels <bbartels@iastate.edu>
Date: Fri, 10 Mar 2017 22:41:59 -0600
Subject: [PATCH] wip: automate creation of BOOT.bin

---
 quad/.gitignore                               |  3 +-
 quad/Makefile                                 | 24 +++++++++++++-
 .../modular_quad_pid/.build_app.tcl           |  1 +
 .../modular_quad_pid/.build_fsbl.tcl          |  4 +++
 .../modular_quad_pid/.create_fsbl.tcl         |  3 ++
 quad/xsdk_workspace/modular_quad_pid/build.sh | 31 +++++++++++++------
 6 files changed, 54 insertions(+), 12 deletions(-)
 create mode 100644 quad/xsdk_workspace/modular_quad_pid/.build_fsbl.tcl
 create mode 100644 quad/xsdk_workspace/modular_quad_pid/.create_fsbl.tcl

diff --git a/quad/.gitignore b/quad/.gitignore
index d22e061fd..b18b9b0b9 100644
--- a/quad/.gitignore
+++ b/quad/.gitignore
@@ -5,4 +5,5 @@ inc/
 obj/
 lib/
 lib-zybo/
-TAGS
\ No newline at end of file
+TAGS
+out/
\ No newline at end of file
diff --git a/quad/Makefile b/quad/Makefile
index 867de1bd9..e0e196eaa 100644
--- a/quad/Makefile
+++ b/quad/Makefile
@@ -1,7 +1,11 @@
 INCDIR = inc
 LIBDIR = lib
+OUTDIR = out
+WS = $(CURDIR)/xsdk_workspace
 
-.PHONY: default test clean deep-clean
+BOOT = $(OUTDIR)/BOOT.bin
+
+.PHONY: default zybo boot test clean deep-clean
 
 default:
 	$(MAKE) -C src/test
@@ -9,6 +13,11 @@ default:
 	$(MAKE) -C src/computation_graph
 	$(MAKE) -C src/quad_app
 
+zybo:
+	cd xsdk_workspace/modular_quad_pid && ./build.sh
+
+boot: $(BOOT)
+
 test:
 	$(MAKE) -C src/queue test
 	$(MAKE) -C src/computation_graph test
@@ -22,3 +31,16 @@ deep-clean:
 	$(MAKE) -C src/queue clean
 	$(MAKE) -C src/computation_graph clean
 	$(MAKE) -C src/quad_app clean
+
+$(OUTDIR):
+	mkdir $(OUTDIR)
+
+$(BOOT): zybo | $(OUTDIR)
+	echo "the_ROM_image:" > zybo_fsbl.bif
+	echo "{" >> zybo_fsbl.bif
+	echo $(WS)/zybo_fsbl/Release/zybo_fsbl.elf >> zybo_fsbl.bif
+	echo $(WS)/system_hw_platform/system.bit >> zybo_fsbl.bif
+	echo $(WS)/modular_quad_pid/Release/modular_quad_pid.elf >> zybo_fsbl.bif
+	echo "}" >> zybo_fsbl.bif
+	/remote/Xilinx/2015.4/SDK/2015.4/bin/bootgen -arch zynq -image zybo_fsbl.bif -o $(BOOT)
+	rm zybo_fsbl.bif
diff --git a/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl b/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl
index ae51135bb..d7cbdc28e 100644
--- a/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl
+++ b/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl
@@ -1,3 +1,4 @@
 cd ..
 sdk set_workspace .
+sdk set_build_config -app modular_quad_pid -type release
 sdk build_project -type app -name modular_quad_pid
diff --git a/quad/xsdk_workspace/modular_quad_pid/.build_fsbl.tcl b/quad/xsdk_workspace/modular_quad_pid/.build_fsbl.tcl
new file mode 100644
index 000000000..ca98b772f
--- /dev/null
+++ b/quad/xsdk_workspace/modular_quad_pid/.build_fsbl.tcl
@@ -0,0 +1,4 @@
+cd ..
+sdk set_workspace .
+sdk set_build_config -app zybo_fsbl -type release
+sdk build_project -type app -name zybo_fsbl
diff --git a/quad/xsdk_workspace/modular_quad_pid/.create_fsbl.tcl b/quad/xsdk_workspace/modular_quad_pid/.create_fsbl.tcl
new file mode 100644
index 000000000..6c9ca7b40
--- /dev/null
+++ b/quad/xsdk_workspace/modular_quad_pid/.create_fsbl.tcl
@@ -0,0 +1,3 @@
+cd ..
+sdk set_workspace .
+sdk create_app_project -name zybo_fsbl -app {Zynq FSBL} -hwproject system_hw_platform -proc ps7_cortexa9_0 -os standalone -lang C
diff --git a/quad/xsdk_workspace/modular_quad_pid/build.sh b/quad/xsdk_workspace/modular_quad_pid/build.sh
index 16f728e1c..069d43ea1 100644
--- a/quad/xsdk_workspace/modular_quad_pid/build.sh
+++ b/quad/xsdk_workspace/modular_quad_pid/build.sh
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+set -e
+
 source /remote/Xilinx/2015.4/SDK/2015.4/settings64.sh
 
 echo "Building modular_quad_pid"
@@ -10,31 +12,40 @@ if [ ! -d ../.metadata ]; then
     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
+    FSBL=$WSPACE/zybo_fsbl
+    FSBL_BSP=$WSPACE/zybo_fsbl_bsp
+    HW=$WSPACE/system_hw_platform
     APP=$WSPACE/modular_quad_pid
 
     echo "Setting up dependencies for modular_quad_pid"
 
-    # Import the system_hw_platform into the workspace
+    # Import the system_hw_platform and app into the workspace
     $ECLIPSE -vm $VM -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
         -import $HW \
+        -import $APP \
         -data $WSPACE \
-        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole || exit 1
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole
 
     # Create the BSP
-    xsct .create_bsp.tcl || exit 1
+    xsct .create_bsp.tcl
+
+    # Create the FSBL project
+    xsct .create_fsbl.tcl
 
-    # 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 \
+        -import $FSBL \
+        -import $FSBL_BSP \
         -data $WSPACE \
-        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole || exit 1
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole
 
-    # Build the BSP
-    xsct .build_bsp.tcl || exit 1
+    # Build everything
+    $ECLIPSE -vm $VM -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
+        -build all \
+        -data $WSPACE \
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole
 
 fi
 
-xsct .build_app.tcl || exit 1
+xsct .build_app.tcl
-- 
GitLab