1
0
mirror of https://github.com/pConst/basic_verilog.git synced 2025-01-14 06:42:54 +08:00
2021-11-03 17:45:33 +03:00

199 lines
5.4 KiB
Batchfile
Executable File

@echo off
rem ----------------------------------------------------------------------------
rem b.bat
rem build script for Intel High Level Synthesis projects for Windows
rem Konstantin Pavlov, pavlovconst@gmail.com
rem ----------------------------------------------------------------------------
setlocal enabledelayedexpansion
set "COMPONENT=test"
set "FPGA_SERIES=CycloneV"
set "FPGA_CLOCK=100MHz"
set "SOURCE_FILES=test.cpp"
set "HLS_CXX_FLAGS=-v --debug-log"
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set Z_DATE=%%c-%%a-%%b)
for /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set Z_TIME=%%a-%%b)
echo DBG: start timestamp is %Z_DATE%_%Z_TIME%
set "Z_PATH="C:\Program Files\7-Zip\7z.exe""
echo DBG: 7z.exe path is %Z_PATH%
:: Accept the user's target, else default to e[mulation]
if not "%1"=="" (
set "TARGET=%1"
) else (
set "TARGET=e"
echo No target specified, defaulting to !TARGET!
echo Available targets: e[mulation], s[imulation], m[svc], c[lean], r[eport], v[sim], q[uartus]
)
echo DBG: target is !TARGET!
:: Any tools installed with HLS can be found relative to the location of i++
for %%I in (i++.exe) do (
set "HLS_INSTALL_DIR=%%~dp$PATH:I"
)
set "HLS_INSTALL_DIR=%HLS_INSTALL_DIR%.."
echo DBG: HLS_INSTALL_DIR is %HLS_INSTALL_DIR%
set "TARGET_INIT=!TARGET!"
:: Set up the compile variables
if "!TARGET!" == "e" (
:: Dont gesitate that FPGA_FAMILY is shown as Arria 10 here.
:: This is just an emulation anyway
call :clean_e_subroutine
set "CXX=i++"
set "CXXFLAGS=%HLS_CXX_FLAGS% -march=x86-64"
set "LFLAGS=-o !TARGET!.exe"
)
if "!TARGET!" == "s" (
call :clean_s_subroutine
set "CXX=i++"
set "CXXFLAGS=%HLS_CXX_FLAGS% --clock %FPGA_CLOCK% -ghdl -march=%FPGA_SERIES%
set "LFLAGS=-o !TARGET!.exe"
)
if "!TARGET!" == "q" (
::Dont make special project folder for Quartus
set "INIT_TARGET=q"
set "TARGET=s"
echo DBG: target is !TARGET!
call :clean_s_subroutine
set "CXX=i++"
set "CXXFLAGS=%HLS_CXX_FLAGS% --clock %FPGA_CLOCK% --quartus-compile -ghdl -march=%FPGA_SERIES%
set "LFLAGS=-o !TARGET!.exe"
)
if "!TARGET!" == "m" (
::Dont make special project folder for VC
set "TARGET=s"
echo DBG: target is !TARGET!
call :clean_s_subroutine
set "CXX=cl"
set "CXXFLAGS=/I ""%HLS_INSTALL_DIR%\include"" /nologo /EHsc /wd4068 /DWIN32 /MD"
set "LFLAGS=/link ""/libpath:%HLS_INSTALL_DIR%\host\windows64\lib"" hls_emul.lib /out:!TARGET!.exe"
)
if "!TARGET!" == "c" (
call :clean_all_subroutine
goto:eof
)
if "!TARGET!" == "r" (
call :open_report_subroutine
goto:eof
)
if "!TARGET!" == "v" (
if exist ".\s.prj\verification\vsim.wlf" (
echo:
echo DBG: vsim.wlf file - open in Mdelsim
modelsim.exe -view ".\s.prj\verification\vsim.wlf" -do "add wave -position insertpoint vsim:/tb/%COMPONENT%_inst/*"
rem @pause
) else (
echo:
echo ERR: =================================
echo ERR: vsim.wlf file - doesn`t exist !
echo ERR: =================================
)
goto:eof
)
::set "OBJ=%SOURCE_FILES:cpp=o%"
:: Replace "" with " in the flags
set "CXXFLAGS=%CXXFLAGS:""="%"
set "LFLAGS=%LFLAGS:""="%"
:: Kick off the compile
echo DBG: executing %CXX% %CXXFLAGS% %SOURCE_FILES% %LFLAGS%
%CXX% %CXXFLAGS% %SOURCE_FILES% %LFLAGS%
if not ERRORLEVEL 0 (
echo:
echo ERR: ======================
echo ERR: COMPILATION FAILED !
echo ERR: ======================
exit /b 1
)
::echo %CXX% %CXXFLAGS% --x86-only %SOURCE_FILES% %LFLAGS%
::%CXX% %CXXFLAGS% --x86-only -c %SOURCE_FILES% %LFLAGS%
::echo %CXX% %CXXFLAGS% --fpga-only -c %SOURCE_FILES% %LFLAGS%
::%CXX% %CXXFLAGS% --fpga-only -c %SOURCE_FILES% %LFLAGS%
:: Execute the test
echo:
echo DBG: Executing the test
call !TARGET!.exe
if not ERRORLEVEL 0 (
echo:
echo ERR: ==============
echo ERR: RUN FAILED !
echo ERR: ==============
exit /b 1
)
if "%TARGET_INIT%" == "q" (
echo:
echo DBG: Quartus timing
findstr /r /c:"Analysis & Synthesis ; 0" %~dp0s.prj\quartus\quartus_compile.flow.rpt
findstr /r /c:"Partition Merge ; 0" %~dp0s.prj\quartus\quartus_compile.flow.rpt
findstr /r /c:"Fitter ; 0" %~dp0s.prj\quartus\quartus_compile.flow.rpt
findstr /r /c:"Fitter ; 0" %~dp0s.prj\quartus\quartus_compile.flow.rpt
findstr /r /c:"Timing Analyzer ; 0" %~dp0s.prj\quartus\quartus_compile.flow.rpt
findstr /r /c:"Total ; 0" %~dp0s.prj\quartus\quartus_compile.flow.rpt
echo:
call :open_report_subroutine
)
:: Make a backup
echo:
echo DBG: Making a backup
:: enabledelayedexpansion turned on. With this mode, ! symbols have special
:: meaning, and to make matters more interesting, there are two parse passes
:: on each line, meaning you'll need to double escape them to have the symbol
:: pass through to the target application
%Z_PATH% a -t7z .\backup\%Z_DATE%_%Z_TIME%.7z *.* -x^^!backup | findstr /I "Add"
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set Z_DATE=%%c-%%a-%%b)
for /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set Z_TIME=%%a-%%b)
echo DBG: end timestamp is %Z_DATE%_%Z_TIME%
echo DBG: Recipe done
goto:eof
:clean_all_subroutine
call :clean_e_subroutine
call :clean_s_subroutine
exit /b
:clean_e_subroutine
del /S /F /Q e.exe > NUL
echo DBG: Cleaning emulation done
exit /b
:clean_s_subroutine
del /S /F /Q m.exe s.exe s.prj > NUL
rmdir /S /Q s.prj > NUL
echo DBG: Cleaning simulation done
exit /b
:open_report_subroutine
echo DBG: Opening the report
start "" .\s.prj\reports\report.html
exit /b