diff --git a/.github/workflows/wsl.yml b/.github/workflows/wsl.yml
new file mode 100644
index 0000000..91c8e5b
--- /dev/null
+++ b/.github/workflows/wsl.yml
@@ -0,0 +1,58 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+#
+# https://go.microsoft.com/fwlink/?LinkID=324981
+
+name: 'CMake (WSL)'
+
+on:
+ push:
+ branches: [ "main" ]
+ pull_request:
+ branches: [ "main" ]
+ paths-ignore:
+ - '*.md'
+ - LICENSE
+ - '.nuget/*'
+ - build/*.cmd
+ - build/*.props
+ - build/*.ps1
+ - build/*.targets
+ - build/*.yml
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+
+ matrix:
+ build_type: [x64-Debug-Linux, x64-Release-Linux]
+ gcc: [10, 11, 12]
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: seanmiddleditch/gha-setup-ninja@v5
+
+ - uses: lukka/run-vcpkg@v11
+ with:
+ runVcpkgInstall: true
+ vcpkgJsonGlob: '**/build/vcpkg.json'
+ vcpkgGitCommitId: '7516a02de04e8f8ff4e4beb8f5bac0565f9bf9da'
+
+ - name: 'Configure CMake'
+ working-directory: ${{ github.workspace }}
+ run: >
+ cmake --preset=${{ matrix.build_type }}
+ -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_MANIFEST_DIR="${{ github.workspace }}/build"
+ -DVCPKG_TARGET_TRIPLET="x64-linux"
+
+ env:
+ CC: gcc-${{ matrix.gcc }}
+ CXX: g++-${{ matrix.gcc }}
+
+ - name: 'Build'
+ working-directory: ${{ github.workspace }}
+ run: cmake --build out/build/${{ matrix.build_type }}
diff --git a/.nuget/directxmesh_desktop_2019.nuspec b/.nuget/directxmesh_desktop_2019.nuspec
index 510c9f4..2e6e195 100644
--- a/.nuget/directxmesh_desktop_2019.nuspec
+++ b/.nuget/directxmesh_desktop_2019.nuspec
@@ -10,7 +10,7 @@
This version is for Windows desktop applications using Visual Studio 2019 (16.11) or Visual Studio 2022 and supports Windows 7 / DirectX 11.
DirectXMesh, a shared source library for performing various geometry content processing operations including generating normals and tangent frames, triangle adjacency computations, vertex cache optimization, and meshlet generation.
- Matches the June 4, 2024 release on GitHub.
+ Matches the September 4, 2024 release on GitHub.
http://go.microsoft.com/fwlink/?LinkID=324981
images\icon.jpg
diff --git a/.nuget/directxmesh_desktop_win10.nuspec b/.nuget/directxmesh_desktop_win10.nuspec
index 50ec520..331625a 100644
--- a/.nuget/directxmesh_desktop_win10.nuspec
+++ b/.nuget/directxmesh_desktop_win10.nuspec
@@ -10,7 +10,7 @@
This version is for Windows desktop applications using Visual Studio 2019 (16.11) or Visual Studio 2022 and supports Windows 10 / Windows 11 including both DirectX 11 and DirectX 12.
DirectXMesh, a shared source library for performing various geometry content processing operations including generating normals and tangent frames, triangle adjacency computations, vertex cache optimization, and meshlet generation.
- Matches the June 4, 2024 release on GitHub.
+ Matches the September 4, 2024 release on GitHub.
http://go.microsoft.com/fwlink/?LinkID=324981
images\icon.jpg
diff --git a/.nuget/directxmesh_uwp.nuspec b/.nuget/directxmesh_uwp.nuspec
index 62e0366..e3ef3b6 100644
--- a/.nuget/directxmesh_uwp.nuspec
+++ b/.nuget/directxmesh_uwp.nuspec
@@ -10,7 +10,7 @@
This version is for Universal Windows Platform apps on Windows 10 / Windows 11 using Visual Studio 2022.
DirectXMesh, a shared source library for performing various geometry content processing operations including generating normals and tangent frames, triangle adjacency computations, vertex cache optimization, and meshlet generation.
- Matches the June 4, 2024 release on GitHub.
+ Matches the September 4, 2024 release on GitHub.
http://go.microsoft.com/fwlink/?LinkID=324981
images\icon.jpg
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d3bf9a..f6125fb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,11 @@ Releases available for download on [GitHub](https://github.com/microsoft/DirectX
## Release History
+### September 4, 2024
+* CMake project updates including support for ARM64EC
+* Minor code review
+* Added GitHub Actions YAML files
+
### June 4, 2024
* CMake project updates
* Retired VS 2019 projects for the UWP platform
diff --git a/README.md b/README.md
index d952c4a..9934962 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ http://go.microsoft.com/fwlink/?LinkID=324981
Copyright (c) Microsoft Corporation.
-**June 4, 2024**
+**September 4, 2024**
This package contains DirectXMesh, a shared source library for performing various geometry content processing operations including generating normals and tangent frames, triangle adjacency computations, vertex cache optimization, and meshlet generation.
diff --git a/build/Directory.Build.props b/build/Directory.Build.props
index 4526ecc..ab3bb53 100644
--- a/build/Directory.Build.props
+++ b/build/Directory.Build.props
@@ -1,6 +1,11 @@
+
+
C:\xtracted\
$(ExtractedFolder)\
diff --git a/build/preparerelease.ps1 b/build/preparerelease.ps1
new file mode 100644
index 0000000..86272fa
--- /dev/null
+++ b/build/preparerelease.ps1
@@ -0,0 +1,126 @@
+<#
+
+.NOTES
+Copyright (c) Microsoft Corporation.
+Licensed under the MIT License.
+
+.SYNOPSIS
+Prepares a PR for release
+
+.DESCRIPTION
+This script is used to do the edits required for preparing a release PR.
+
+.PARAMETER BaseBranch
+This the branch to use as the base of the release. Defaults to 'main'.
+
+.PARAMETER TargetBranch
+This is the name of the newly created branch for the release PR. Defaults to 'release'. If set to 'none', then no branch is created.
+
+.PARAMETER UpdateVersion
+This is a $true or $false value that indicates if the library version number should be incremented. Defaults to $true.
+
+.LINK
+https://github.com/microsoft/DirectXMesh/wiki
+
+#>
+
+param(
+ [string]$BaseBranch = "main",
+ [string]$TargetBranch = $null,
+ [bool]$UpdateVersion = $true
+)
+
+$reporoot = Split-Path -Path $PSScriptRoot -Parent
+$cmake = $reporoot + "\CMakeLists.txt"
+$header = $reporoot + "\DirectXMesh\DirectXMesh.h"
+$readme = $reporoot + "\README.md"
+$history = $reporoot + "\CHANGELOG.md"
+
+if ((-Not (Test-Path $cmake)) -Or (-Not (Test-Path $header)) -Or (-Not (Test-Path $readme)) -Or (-Not (Test-Path $history))) {
+ Write-Error "ERROR: Unexpected location of script file!" -ErrorAction Stop
+}
+
+$branch = git branch --show-current
+if ($branch -ne $BaseBranch) {
+ Write-Error "ERROR: Must be in the $BaseBranch branch!" -ErrorAction Stop
+}
+
+git pull -q
+if ($LastExitCode -ne 0) {
+ Write-Error "ERROR: Failed to sync branch!" -ErrorAction Stop
+}
+
+$version = Get-Content ($cmake) | Select-String -Pattern "set\(DIRECTXMESH_VERSION" -CaseSensitive
+if (-Not ($version -match "([0-9]?\.[0-9]?\.[0-9]?)")) {
+ Write-Error "ERROR: Failed to current version!" -ErrorAction Stop
+}
+$version = $Matches.0
+$rawversion = $version.replace('.','')
+
+$newreleasedate = Get-Date -Format "MMMM d, yyyy"
+$newreleasetag = (Get-Date -Format "MMMyyyy").ToLower()
+
+if($UpdateVersion) {
+ [string]$newrawversion = ([int]$rawversion + 1)
+}
+else {
+ $newrawversion = $rawversion
+}
+
+$newversion = $newrawversion[0] + "." + $newrawversion[1] + "." + $newrawversion[2]
+
+$rawreleasedate = $(Get-Content $readme) | Select-String -Pattern "\*\*[A-Z][a-z]+\S.\d+,?\S.\d\d\d\d\*\*"
+if ([string]::IsNullOrEmpty($rawreleasedate)) {
+ Write-Error "ERROR: Failed to current release date!" -ErrorAction Stop
+}
+$releasedate = $rawreleasedate -replace '\*',''
+
+if($releasedate -eq $newreleasedate) {
+ Write-Error ("ERROR: Release "+$releasedate+" already exists!") -ErrorAction Stop
+}
+
+if ($TargetBranch -ne 'none') {
+ if ([string]::IsNullOrEmpty($TargetBranch)) {
+ $TargetBranch = $newreleasetag + "release"
+ }
+
+ git checkout -b $TargetBranch
+ if ($LastExitCode -ne 0) {
+ Write-Error "ERROR: Failed to create new topic branch!" -ErrorAction Stop
+ }
+}
+
+Write-Host " Old Version: " $version
+Write-Host "Old Release Date: " $releasedate
+Write-Host "->"
+Write-Host " Release Date: " $newreleasedate
+Write-Host " Release Tag: " $newreleasetag
+Write-Host " Release Version: " $newversion
+
+if($UpdateVersion) {
+ (Get-Content $cmake).Replace("set(DIRECTXMESH_VERSION $version)","set(DIRECTXMESH_VERSION $newversion)") | Set-Content $cmake
+ (Get-Content $header).Replace("#define DIRECTX_MESH_VERSION $rawversion","#define DIRECTX_MESH_VERSION $newrawversion") | Set-Content $header
+}
+
+(Get-Content $readme).Replace("$rawreleasedate", "**$newreleasedate**") | Set-Content $readme
+
+Get-ChildItem -Path ($reporoot + "\.nuget") -Filter *.nuspec | Foreach-Object {
+ (Get-Content -Path $_.Fullname).Replace("$releasedate", "$newreleasedate") | Set-Content -Path $_.Fullname -Encoding utf8
+ }
+
+[System.Collections.ArrayList]$file = Get-Content $history
+$inserthere = @()
+
+for ($i=0; $i -lt $file.count; $i++) {
+ if ($file[$i] -match "## Release History") {
+ $inserthere += $i + 1
+ }
+}
+
+$file.insert($inserthere[0], "`n### $newreleasedate`n* change history here")
+Set-Content -Path $history -Value $file
+
+code $history $readme
+if ($LastExitCode -ne 0) {
+ Write-Error "ERROR: Failed to launch VS Code!" -ErrorAction Stop
+}
diff --git a/build/versioninfo.ps1 b/build/versioninfo.ps1
index 1ca4155..1583533 100644
--- a/build/versioninfo.ps1
+++ b/build/versioninfo.ps1
@@ -1,3 +1,8 @@
+<#
+Copyright (c) Microsoft Corporation.
+Licensed under the MIT License.
+#>
+
param(
[string]$version
)