@echo off
setlocal
rem Run from a Visual Studio Developer Command Prompt.
if "%~1"=="" (
  echo Usage: build-windows.cmd "C:\path\to\SharkSSL"
  exit /b 1
)
for %%I in ("%~1") do set "DEMO_SHARKSSL_ROOT=%%~fI"
if not exist "%DEMO_SHARKSSL_ROOT%\inc\SharkSSL.h" (
  echo Cannot find inc\SharkSSL.h under the supplied directory.
  exit /b 1
)
where cl >nul 2>&1
if errorlevel 1 (
  echo Open a Visual Studio Developer Command Prompt first.
  exit /b 1
)
pushd "%~dp0" || exit /b 1
if not exist build mkdir build
pushd build || exit /b 1
rem The original tree can build its crypto sources alone.
rem Keep the amalgamated SDK default feature set when building its single source.
set "DEMO_FLAGS=/DECDSA_DEMO_MAIN /DSHARKSSL_SSL_CLIENT_CODE=0 /DSHARKSSL_SSL_SERVER_CODE=0 /DSHARKSSL_ENABLE_RSA=0 /DSHARKSSL_ENABLE_PEM_API=0 /DSHARKSSL_ENABLE_CERTSTORE_API=0 /DSHARKSSL_ENABLE_CA_LIST=0 /DSHARKSSL_ENABLE_X25519_API=0 /DSHARKSSL_ECDSA_ONLY_VERIFY=0 /DSHARKSSL_USE_RNG_FORTUNA=1 /DSHARKSSL_ENABLE_CLIENT_AUTH=0 /DSHARKSSL_ENABLE_ECDHE_ECDSA=0 /DSHARKSSL_ENABLE_ECDHE_RSA=0"
if exist "%DEMO_SHARKSSL_ROOT%\src\SharkSslCert.c" (
  cl /nologo /O2 /Gy /W3 /D_CRT_SECURE_NO_WARNINGS %DEMO_FLAGS% /I"%DEMO_SHARKSSL_ROOT%\inc" /I"%DEMO_SHARKSSL_ROOT%\inc\arch\Windows" ..\ecdsa-demo.c "%DEMO_SHARKSSL_ROOT%\src\SharkSslASN1.c" "%DEMO_SHARKSSL_ROOT%\src\SharkSslBigInt.c" "%DEMO_SHARKSSL_ROOT%\src\SharkSslCert.c" "%DEMO_SHARKSSL_ROOT%\src\SharkSslCrypto.c" "%DEMO_SHARKSSL_ROOT%\src\SharkSslECC.c" "%DEMO_SHARKSSL_ROOT%\src\SharkSslPublic.c" /Fe:ecdsa-demo.exe /link /OPT:REF
) else (
  cl /nologo /O2 /Gy /W3 /D_CRT_SECURE_NO_WARNINGS /DECDSA_DEMO_MAIN /DSHARKSSL_USE_RNG_FORTUNA=1 /I"%DEMO_SHARKSSL_ROOT%\inc" /I"%DEMO_SHARKSSL_ROOT%\inc\arch\Windows" ..\ecdsa-demo.c "%DEMO_SHARKSSL_ROOT%\src\SharkSSL.c" /Fe:ecdsa-demo.exe /link /OPT:REF
)
if errorlevel 1 goto failed
ecdsa-demo.exe
if errorlevel 1 goto failed
popd
popd
exit /b 0
:failed
popd
popd
exit /b 1
