#!/bin/bash
#
# This script creates the hello_world application in this directory.


BSP_DIR=../DE2_NIOS_HOST_MOUSE_VGA_bsp
QUARTUS_PROJECT_DIR=../../
NIOS2_APP_GEN_ARGS="--elf-name DE2_NIOS_HOST_MOUSE_VGA.elf --set OBJDUMP_INCLUDE_SOURCE 1 --src-files hello_world.c"


# First, check to see if $SOPC_KIT_NIOS2 environmental variable is set.
# This variable is required for the command line tools to execute correctly.
if [ -z $SOPC_KIT_NIOS2 ]
then
    echo Required \$SOPC_KIT_NIOS2 Environmental Variable is not set!
    exit 1
fi


# Also make sure that the APP has not been created already.  Check for
# existence of Makefile in the app directory
if [ -f ./Makefile ]
then
    echo Application has already been created!  Delete Makefile if you want to create a new application makefile
    exit 1
fi


# We are selecting hal_default bsp because it supports this application.
# Check to see if the hal_default has already been generated by checking for 
# existence of the public.mk file.  If not, we need to run
# create-this-bsp file to generate the bsp.
if [ ! -f $BSP_DIR/public.mk ]; then
    # Since BSP doesn't exist, create the BSP
    # Pass any command line arguments passed to this script to the BSP.
    pushd $BSP_DIR >> /dev/null
    ./create-this-bsp "$@" || {
    	echo "create-this-bsp failed"
    	exit 1
    }
    popd >> /dev/null
fi


# Don't run make if create-this-app script is called with --no-make arg
SKIP_MAKE=
while [ $# -gt 0 ]
do
  case "$1" in
      --no-make)
          SKIP_MAKE=1
          ;;
  esac
  shift
done


# Now we also need to go copy the sources for this application to the
# local directory.
find $SOPC_KIT_NIOS2/examples/software/hello_world/ -name '*.c' -or -name '*.h' -or -name 'hostfs*' | xargs -i cp -L {} ./ || {
	echo "failed during copying example source files"
	exit 1
}

find $SOPC_KIT_NIOS2/examples/software/hello_world/ -name 'readme.txt' -or -name 'Readme.txt' | xargs -i cp -L {} ./ || {
	echo "failed copying readme file"
}

if [ -d $SOPC_KIT_NIOS2/examples/software/hello_world/system ]
then
	cp -RL $SOPC_KIT_NIOS2/examples/software/hello_world/system . || {
		echo "failed during copying project support files"
		exit 1
	}
fi

chmod -R +w . || {
	echo "failed during changing file permissions"
	exit 1
}

cmd="nios2-app-generate-makefile --bsp-dir $BSP_DIR --set QUARTUS_PROJECT_DIR=$QUARTUS_PROJECT_DIR $NIOS2_APP_GEN_ARGS"

echo "create-this-app: Running \"$cmd\""
$cmd || {
    echo "nios2-app-generate-makefile failed"
    exit 1
}

if [ -z "$SKIP_MAKE" ]; then
	cmd="make"

	echo "create-this-app: Running \"$cmd\""
	$cmd || {
    	echo "make failed"
	    exit 1
	}

	echo
	echo "To download and run the application:"
	echo "    1. Make sure the board is connected to the system."
	echo "    2. Run 'nios2-configure-sof <SOF_FILE_PATH>' to configure the FPGA with the hardware design."
	echo "    3. If you have a stdio device, run 'nios2-terminal' in a different shell."
	echo "    4. Run 'make download-elf' from the application directory."
	echo
	echo "To debug the application:"
	echo "    Import the project into Nios II Software Build Tools for Eclipse."  
	echo "    Refer to Nios II Software Build Tools for Eclipse Documentation for more information."
	echo
	echo -e ""
fi


exit 0
