Param( [switch]$Release ) $Compiler = "cl.exe" $GeneralFlags = "/Wall /WX /wd4996" $LibraryFlags = "/LD" $IncludeDirs = Get-ChildItem -Path src -Recurse -Directory -ErrorAction SilentlyContinue -Force | %{$("/I " + '"' + $_.FullName + '"')} $SrcFiles = Get-ChildItem -Path src -Recurse -Filter *.c -ErrorAction SilentlyContinue -Force | %{$('"' + $_.FullName + '"')} $TestIncludeDirs = Get-ChildItem -Path tests -Recurse -Directory -ErrorAction SilentlyContinue -Force | %{$("/I " + '"' + $_.FullName + '"')} $TestSrcFiles = Get-ChildItem -Path tests -Recurse -Filter *.c -ErrorAction SilentlyContinue -Force | %{$('"' + $_.FullName + '"')} If ($Release -eq $True) { $GeneralFlags += " /O2 /Og" $BuildType = "release" } Else { $GeneralFlags += " /Zi /Od /fsanitize=address" $BuildType = "debug" } $BuildDir = "./libwapp-build/windows-$BuildType" $ObjDir = "$BuildDir/objects" $OutDir = "$BuildDir/output" $TestsDir = "$BuildDir/tests" $OutBasename = "libwapp" $Objects = "/Fo:$ObjDir/" $Outputs = "/Fd:$OutDir/$OutBasename /Fe:$OutDir/$OutBasename" $TestOutBasename = "wapptest" $TestOutputs = "/Fo:$TestsDir/ /Fe:$TestsDir/$TestOutBasename" If (Test-Path $BuildDir) { Remove-Item $BuildDir -Recurse -Force } mkdir -p $ObjDir > $null mkdir -p $OutDir > $null mkdir -p $TestsDir > $null # Build and run tests Invoke-Expression "$Compiler $GeneralFlags $IncludeDirs $TestIncludeDirs $SrcFiles $TestSrcFiles $TestOutputs" # Build library Invoke-Expression "$Compiler $GeneralFlags $LibraryFlags $IncludeDirs $SrcFiles $Objects $Outputs"