diff --git a/Build-Engines.ps1 b/Build-Engines.ps1 new file mode 100644 index 0000000..b3c3fa3 --- /dev/null +++ b/Build-Engines.ps1 @@ -0,0 +1,40 @@ +<# +.SYNOPSIS + Builds every plugin engine under Engines/ and deploys it to the benchmark. + +.DESCRIPTION + OpenNest.Benchmark loads plugin engines from an Engines/ folder next to its own + build output. This builds the benchmark plus each Engines/OpenNest.Engine.*/ project + (test subprojects are skipped) and copies each engine DLL into that folder. + +.EXAMPLE + ./Engines/Build-Engines.ps1 + ./Engines/Build-Engines.ps1 -Engines Opus55,Terra -Configuration Debug +#> +param( + [string]$Configuration = 'Release', + # Engine names without the OpenNest.Engine. prefix; default is all of them. + [string[]]$Engines +) + +$ErrorActionPreference = 'Stop' +$repoRoot = Split-Path $PSScriptRoot -Parent + +dotnet build (Join-Path $repoRoot 'OpenNest.Benchmark/OpenNest.Benchmark.csproj') -c $Configuration +if ($LASTEXITCODE -ne 0) { throw 'OpenNest.Benchmark build failed.' } + +$deployDir = Join-Path $repoRoot "OpenNest.Benchmark/bin/$Configuration/net8.0/Engines" +New-Item -ItemType Directory -Force $deployDir | Out-Null + +$projects = Get-ChildItem $PSScriptRoot -Directory -Filter 'OpenNest.Engine.*' | + Where-Object { -not $Engines -or $Engines -contains $_.Name.Substring('OpenNest.Engine.'.Length) } + +foreach ($dir in $projects) { + $csproj = Join-Path $dir.FullName "$($dir.Name).csproj" + dotnet build $csproj -c $Configuration + if ($LASTEXITCODE -ne 0) { throw "$($dir.Name) build failed." } + + $dll = Join-Path $dir.FullName "bin/$Configuration/net8.0/$($dir.Name).dll" + Copy-Item $dll $deployDir -Force + Write-Host "Deployed $($dir.Name) -> $deployDir" +} diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..eb217da --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,15 @@ + + + + net8.0 + enable + enable + + + + + diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 0000000..8c753ea --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,10 @@ + + + + + + diff --git a/OpenNest.Engine.Opus55/OpenNest.Engine.Opus55.csproj b/OpenNest.Engine.Opus55/OpenNest.Engine.Opus55.csproj index b8cab81..c9a747c 100644 --- a/OpenNest.Engine.Opus55/OpenNest.Engine.Opus55.csproj +++ b/OpenNest.Engine.Opus55/OpenNest.Engine.Opus55.csproj @@ -1,14 +1,6 @@ - - net8.0 - OpenNest.Engine.Opus55 - OpenNest.Engine.Opus55 - enable - enable - + - - diff --git a/OpenNest.Engine.Opus55/README.md b/OpenNest.Engine.Opus55/README.md index d648b37..b0f3cdb 100644 --- a/OpenNest.Engine.Opus55/README.md +++ b/OpenNest.Engine.Opus55/README.md @@ -61,8 +61,8 @@ Every placement decision (which part, which rotation, where, on which sheet) com ## Build / test ```bash -dotnet build OpenNest.Engine.Opus55/OpenNest.Engine.Opus55.csproj -c Release -dotnet test OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj +dotnet build Engines/OpenNest.Engine.Opus55/OpenNest.Engine.Opus55.csproj -c Release +dotnet test Engines/OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj ``` This project is intentionally **outside** `OpenNest.sln`, the same pattern as the @@ -73,10 +73,12 @@ This project is intentionally **outside** `OpenNest.sln`, the same pattern as th ```bash dotnet build OpenNest.Benchmark/OpenNest.Benchmark.csproj -c Release mkdir -p OpenNest.Benchmark/bin/Release/net8.0/Engines -cp OpenNest.Engine.Opus55/bin/Release/net8.0/OpenNest.Engine.Opus55.dll OpenNest.Benchmark/bin/Release/net8.0/Engines/ +cp Engines/OpenNest.Engine.Opus55/bin/Release/net8.0/OpenNest.Engine.Opus55.dll OpenNest.Benchmark/bin/Release/net8.0/Engines/ dotnet OpenNest.Benchmark/bin/Release/net8.0/OpenNest.Benchmark.dll ``` +Or build and deploy in one step with `./Engines/Build-Engines.ps1 -Engines Opus55`. + The engine reports as `Opus55NestingEngine`. ## Known limitations diff --git a/OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj b/OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj index c89db0e..74d976a 100644 --- a/OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj +++ b/OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj @@ -1,8 +1,5 @@ - net8.0 - enable - enable false true @@ -14,8 +11,7 @@ - - + diff --git a/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj b/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj index bb15a22..1c0be6e 100644 --- a/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj +++ b/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj @@ -1,13 +1,3 @@ - - net8.0 - OpenNest.Engine.Qwen - OpenNest.Engine.Qwen - enable - enable - - - - - + diff --git a/OpenNest.Engine.Qwen/README.md b/OpenNest.Engine.Qwen/README.md index 9c401d5..c394df1 100644 --- a/OpenNest.Engine.Qwen/README.md +++ b/OpenNest.Engine.Qwen/README.md @@ -31,7 +31,7 @@ engines to start; it must not be the same algorithm re-derived through indirecti ## Build ```bash -dotnet build OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj +dotnet build Engines/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj ``` This project is intentionally **outside** `OpenNest.sln` (same pattern as the @@ -44,14 +44,16 @@ as part of the main solution. own build output: ```bash -dotnet build OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj -c Release +dotnet build Engines/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj -c Release dotnet build OpenNest.Benchmark/OpenNest.Benchmark.csproj -c Release mkdir -p OpenNest.Benchmark/bin/Release/net8.0/Engines -cp OpenNest.Engine.Qwen/bin/Release/net8.0/OpenNest.Engine.Qwen.dll OpenNest.Benchmark/bin/Release/net8.0/Engines/ +cp Engines/OpenNest.Engine.Qwen/bin/Release/net8.0/OpenNest.Engine.Qwen.dll OpenNest.Benchmark/bin/Release/net8.0/Engines/ dotnet OpenNest.Benchmark/bin/Release/net8.0/OpenNest.Benchmark.dll ``` +Or build and deploy in one step with `./Engines/Build-Engines.ps1 -Engines Qwen`. + Your engine will show up in the report under its CLR type name (`QwenNestingEngine`), competing on equal footing against the built-in engines. diff --git a/OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj b/OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj index e3f0be9..1deae75 100644 --- a/OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj +++ b/OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj @@ -1,8 +1,5 @@ - net8.0 - enable - enable false true @@ -14,6 +11,5 @@ - diff --git a/OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj b/OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj index 0f958a2..1c0be6e 100644 --- a/OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj +++ b/OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj @@ -1,13 +1,3 @@ - - net8.0 - OpenNest.Engine.Terra - OpenNest.Engine.Terra - enable - enable - - - - - + diff --git a/OpenNest.Engine.Terra/README.md b/OpenNest.Engine.Terra/README.md index b8551ab..2911596 100644 --- a/OpenNest.Engine.Terra/README.md +++ b/OpenNest.Engine.Terra/README.md @@ -31,7 +31,7 @@ engines to start; it must not be the same algorithm re-derived through indirecti ## Build ```bash -dotnet build OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj +dotnet build Engines/OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj ``` This project is intentionally **outside** `OpenNest.sln` (same pattern as the @@ -44,14 +44,16 @@ as part of the main solution. own build output: ```bash -dotnet build OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj -c Release +dotnet build Engines/OpenNest.Engine.Terra/OpenNest.Engine.Terra.csproj -c Release dotnet build OpenNest.Benchmark/OpenNest.Benchmark.csproj -c Release mkdir -p OpenNest.Benchmark/bin/Release/net8.0/Engines -cp OpenNest.Engine.Terra/bin/Release/net8.0/OpenNest.Engine.Terra.dll OpenNest.Benchmark/bin/Release/net8.0/Engines/ +cp Engines/OpenNest.Engine.Terra/bin/Release/net8.0/OpenNest.Engine.Terra.dll OpenNest.Benchmark/bin/Release/net8.0/Engines/ dotnet OpenNest.Benchmark/bin/Release/net8.0/OpenNest.Benchmark.dll ``` +Or build and deploy in one step with `./Engines/Build-Engines.ps1 -Engines Terra`. + Your engine will show up in the report under its CLR type name (`TerraNestingEngine`), competing on equal footing against the built-in engines. diff --git a/OpenNest.Engine.Terra/tests/OpenNest.Engine.Terra.Tests.csproj b/OpenNest.Engine.Terra/tests/OpenNest.Engine.Terra.Tests.csproj index 6f9ab72..c9776ea 100644 --- a/OpenNest.Engine.Terra/tests/OpenNest.Engine.Terra.Tests.csproj +++ b/OpenNest.Engine.Terra/tests/OpenNest.Engine.Terra.Tests.csproj @@ -1,8 +1,5 @@ - net8.0 - enable - enable false true @@ -14,6 +11,5 @@ -