#!/bin/bash

###############################################################################
# Clean if you need to!
#make -C $OCPI_CDK_DIR/../projects/core cleanhdl
#make -C $OCPI_CDK_DIR/../projects/platform cleanhdl
#make -C $OCPI_CDK_DIR/../projects/assets cleanhdl
#make -C $OCPI_CDK_DIR/../projects/assets_ts cleanhdl
#make -C $OCPI_CDK_DIR/../projects/inactive cleanhdl
#make -C $OCPI_CDK_DIR/../projects/tutorial cleanhdl

###############################################################################
echo " Build HDL primitives libraries of 'main' projects"
# BUILD SEQUENTIALLY TO RESPECT DEPENDENCIES
make -C $OCPI_CDK_DIR/../projects/core hdlprimitives HdlTargets=zynq
make -C $OCPI_CDK_DIR/../projects/platform hdlprimitives HdlTargets=zynq
make -C $OCPI_CDK_DIR/../projects/assets hdlprimitives HdlTargets=zynq
make -C $OCPI_CDK_DIR/../projects/assets_ts hdlprimitives HdlTargets=zynq
make -C $OCPI_CDK_DIR/../projects/inactive hdlprimitives HdlTargets=zynq
make -C $OCPI_CDK_DIR/../projects/tutorial hdlprimitives HdlTargets=zynq

###############################################################################
echo " Build HDL workers libraries of 'main' projects"
# BUILD IN PARALLEL!!
# Set the -j # value per your system's performance capabilities
make -C $OCPI_CDK_DIR/../projects/core/components HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/core/hdl/adapters -j 5 HdlTargets=zynq
# core adapters takes a long time

# BUILD IN PARALLEL!!
make -C $OCPI_CDK_DIR/../projects/core/hdl/devices -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/platform HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/components/base_comps -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/components/comms_comps HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/components/dsp_comps -j 10 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/components/misc_comps -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/components/util_comps -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/hdl/adapters HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/hdl/cards -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets/hdl/devices -j 10 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets_ts/components -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/assets_ts/hdl/devices -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/inactive/components -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/inactive/hdl/devices -j 5 HdlTargets=zynq &
make -C $OCPI_CDK_DIR/../projects/tutorial/components -j 5 HdlTargets=zynq

###############################################################################
echo " Build 'catch all' from top 'main' projects" 
# BUILD SEQUENTIALLY TO KEEP IT SIMPLE
# Occasionally, some of the above parallel worker builds will error, which is
# possibly a result of multiple accesses to Vivado.
# This step is a 'catch all' step to build from the top of each project in-turn
echo " Build 'catch all' project: core"
make -C $OCPI_CDK_DIR/../projects/core HdlTargets=zynq
echo " Build 'catch all' project: platform"
make -C $OCPI_CDK_DIR/../projects/platform HdlTargets=zynq
echo " Build 'catch all' project: assets"
make -C $OCPI_CDK_DIR/../projects/assets HdlTargets=zynq
echo " Build 'catch all' project: assets_ts"
make -C $OCPI_CDK_DIR/../projects/assets_ts HdlTargets=zynq
echo " Build 'catch all' project: tutorial"
make -C $OCPI_CDK_DIR/../projects/tutorial HdlTargets=zynq
echo " Build 'catch all' project: inactive"
make -C $OCPI_CDK_DIR/../projects/inactive HdlTargets=zynq

###############################################################################
echo " Install xilinx13_3 platform"
ocpiadmin install platform xilinx13_3 && 
echo " Install zed platform"
ocpiadmin install platform zed
echo " Deploy zed platform with xilinx13_3"
ocpiadmin deploy platform xilinx13_3 zed

###############################################################################
echo " Build CP ONLY 'canary' assembly for Zynq-7000 based platforms"
# To avoid initiallization issues, used 'sleep 3' to stagger the start of the builds
make -C $OCPI_CDK_DIR/../projects/assets/hdl/assemblies Assemblies='pattern_capture_asm' HdlPlatforms=zed &
sleep 3
#testbias is built during the install of zed
#echo " Build DP 'canary' assembly for Zynq-7000 based platforms"
#make -C $OCPI_CDK_DIR/../projects/assets/hdl/assemblies Assemblies='testbias' HdlPlatforms=zed &
sleep 3
echo " Build assembly for FSK filerw app"
make -C $OCPI_CDK_DIR/../projects/assets/hdl/assemblies Assemblies='fsk_filerw' HdlPlatforms=zed &
sleep 3
echo " Build assembly for FSK txrx app"
make -C $OCPI_CDK_DIR/../projects/assets/hdl/assemblies Assemblies='fsk_modem' HdlPlatforms=zed &
sleep 3


###############################################################################
echo " Build Component Unit Tests, from within their libraries"
# IN PARALLEL!!
echo " Build Component Unit Tests, project: core"
make -C $OCPI_CDK_DIR/../projects/core/components -j 4 test HdlPlatform=zed &
sleep 3

#echo " Build Component Unit Tests, project: platform"
#make -C $OCPI_CDK_DIR/../projects/platform/components test HdlPlatform=zed &
sleep 3

echo " Build Component Unit Tests, project: assets"
# These are "spread out" in an attempt to build efficiently and so that they
# finished in "close" (~30 min, system dependent) proximity 
make -C $OCPI_CDK_DIR/../projects/assets/components/base_comps test HdlPlatform=zed &
sleep 3
make -C $OCPI_CDK_DIR/../projects/assets/components/comms_comps test HdlPlatform=zed &
sleep 3
make -C $OCPI_CDK_DIR/../projects/assets/components/dsp_comps test HdlPlatform=zed &
sleep 3
make -C $OCPI_CDK_DIR/../projects/assets/components/dsp_comps/cic_int.test HdlPlatform=zed &
sleep 3
make -C $OCPI_CDK_DIR/../projects/assets/components/misc_comps -j 5 test HdlPlatform=zed &
sleep 3
make -C $OCPI_CDK_DIR/../projects/assets/components/util_comps -j 5 test HdlPlatform=zed &
sleep 3
echo " Build Component Unit Tests, project: assets_ts"
make -C $OCPI_CDK_DIR/../projects/assets_ts/components -j 5 test HdlPlatform=zed
