Skip to content

Conversation

mschofie
Copy link
Member

@mschofie mschofie commented Sep 17, 2025

Description

This PR adds some CMake samples for WindowsML. There's a few moving parts, so there's things to be discussed. Having a PR for folks to try out and get a "stake in the ground" should make things easier.

The samples need to add NuGet support to CMake, so I'm proposing that infrastructure, too. At the minute, that content is hosted in a personal repo - https://github.com/mschofie/NuGetCMakePackage - that would need to be moved somewhere more appropriate before this PR could be completed. That repo teaches CMake how to restore NuGet packages, and look for CMake scripts within those packages, allowing a NuGet package to have functional parity with MSBuild builds. Since the NuGet packages that I need to consume don't have CMake scripts within, the 'NuGetCMakePackage' infrastructure allows for 'overlay' files that are present as a stop-gap until I can migrate the content appropriately. I've created a PR for the NuGet infrastructure here if folks want to ask questions, or comment on the implementation.

Beyond the NuGet changes, the samples build two C++ console applications with CMake, using 'Visual Studio 17 2022' and 'Ninja Multi-Config' generators. The NuGet support is added through:

include(FetchContent)

FetchContent_Declare(
  NuGetCMakePackage
  GIT_REPOSITORY https://github.com/mschofie/NuGetCMakePackage
  GIT_TAG b13e013481605d134f498fd9fc3a123c416da197
)

FetchContent_MakeAvailable(NuGetCMakePackage)

Then NuGet dependencies are created with - for example:

add_nuget_packages(
    PACKAGES
        Microsoft.Windows.ImplementationLibrary 1.0.250325.1
        Microsoft.Windows.CppWinRT 2.0.250303.1
        Microsoft.WindowsAppSDK.Runtime 1.8.250907001
        Microsoft.WindowsAppSDK.ML 1.8.2084
)

Having called add_nuget_packages, the NuGet packages are findable through find_package:

find_package(Microsoft.Windows.ImplementationLibrary CONFIG REQUIRED)
find_package(Microsoft.WindowsAppSDK.ML CONFIG REQUIRED)

After which a CMake target is introduced with the same name that can be consumed by the CMake build, for example:

target_link_libraries(ResNetConsoleDesktop
    PRIVATE
        ResNetCommon
        Microsoft.WindowsAppSDK.ML_Framework # Use 'framework' mode.
        Microsoft.Windows.ImplementationLibrary
)

Feedback on any aspect - sample, naming conventions, approach, etc.. - is really appreciated.

Checklist

Note that /azp run currently isn't working for this repo.

@@ -0,0 +1 @@
__* No newline at end of file
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm doing something wrong because this has no effect on a local clone & build. I'm seeing all the build/* content as well as the __* dirs still listed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I'm not sure what could be going on... it's all good on my end. The file was missing it's final new-line... Perhaps that was it? Added it just in case.

@mschofie mschofie force-pushed the mschofie/cmake-samples branch 4 times, most recently from a6d064e to 52ce69a Compare September 30, 2025 18:23
@mschofie mschofie force-pushed the mschofie/cmake-samples branch 3 times, most recently from 45f0b58 to 1323083 Compare October 13, 2025 21:35
@mschofie mschofie changed the base branch from feature/winml-stable to release/experimental October 13, 2025 21:35
jonwis
jonwis previously approved these changes Oct 13, 2025
@mschofie mschofie force-pushed the mschofie/cmake-samples branch from 1323083 to 6dd413a Compare October 15, 2025 23:37
@mschofie mschofie changed the base branch from release/experimental to main October 16, 2025 00:13
@mschofie mschofie dismissed jonwis’s stale review October 16, 2025 00:13

The base branch was changed.

@mschofie mschofie force-pushed the mschofie/cmake-samples branch from 6dd413a to e752323 Compare October 16, 2025 15:49
@mschofie
Copy link
Member Author

I've completed the PR in https://github.com/mschofie/NuGetCMakePackage, and updated this PR with the commit hash from that repo's main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants