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(
  CMakeNuGetPackage
  GIT_REPOSITORY https://github.com/mschofie/NuGetCMakePackage
  GIT_TAG 208b05d3482e19c81a970b4191af8cd92b0dd5d4
)

FetchContent_MakeAvailable(CMakeNuGetPackage)

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.

Copy link
Member

Choose a reason for hiding this comment

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

Does this repo support git-lfs?

Copy link
Member Author

Choose a reason for hiding this comment

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

It hasn't opt'd in yet for anything. I should probably have an orthogonal PR to see if that's an OK dependency to take.

Copy link
Member Author

Choose a reason for hiding this comment

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

I filed #538. I won't complete this 'til that's in. I'll take a look at sending a PR shortly.

@@ -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 3 times, most recently from a286ec1 to a6d064e Compare September 26, 2025 20:20
@mschofie mschofie force-pushed the mschofie/cmake-samples branch from a6d064e to 52ce69a Compare September 30, 2025 18:23
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