CNA-GAP-069: Windows builds leave out Sharp Runtime's Xml.Serialization, so the XmlSerializationEXT surface of the math and input types is unavailable there
Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
On every Windows target CNA leaves Xml.Serialization out of its Sharp Runtime closure and drops both XmlSerializationEXTTests. The exclusion was added to avoid an unguarded <poll.h> in sharp-runtime's Diagnostics, which has since been fixed upstream; it no longer avoids that dependency, because CNA's closure already contains Xml, which depends on Diagnostics, so the surface is unavailable on Windows only because the build condition was left in place.
- Identifier
CNA-GAP-069- Category
- Functional gap
- Subsystem
- Platforms
- Status
- Open
- Verified against
- CNA
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- Yes: see Current tests
- Affected contract
- Microsoft/Xna/Framework/XmlSerializationEXT.hpp (math) and Microsoft/Xna/Framework/Input/XmlSerializationEXT.hpp on Windows targets
Expected behaviour
A CNAEXT surface offered on Linux and macOS is offered on Windows unless a host constraint prevents it. The CMake comment itself asks for the condition to be removed once sharp-runtime guards the offending include.
Actual behaviour at TARGET
When CMAKE_SYSTEM_NAME is Windows (MinGW cross builds and native MSVC), SharpRuntimeConsumption.cmake does not append Xml.Serialization to CNA's Sharp Runtime closure, so SharpRuntime::Xml.Serialization does not exist, and UnitTests.cmake filters out the math and input XmlSerializationEXTTests.cpp. The stated cause is sharp-runtime's Diagnostics Process.cpp including <poll.h> outside its POSIX guard. In the local sharp-runtime checkout that include was moved inside the guard by commit 88c12f15 (2026-09-14), which sharp-runtime next @ 41b918c9 contains. The exclusion no longer avoids the problem: CNA_SHARP_RUNTIME_DEFAULT_COMPONENTS names Xml on every platform with no Windows override, and sharp-runtime's Xml component has a private dependency on Diagnostics, so a Windows build compiles that file whether or not Xml.Serialization is selected (the Xml addition and the exclusion were made on different branches and first met in the 2026-09-11 merge). CNA's CMake pins no sharp-runtime revision, and the workflows that do pin one use revisions from 15 to 28 August 2026, all older than the fix. The exclusion is unconditional.
Source locations
cmake/SharpRuntimeConsumption.cmake— CNA_SHARP_RUNTIME_HAS_XML_SERIALIZATION and its Windows conditioncmake/UnitTests.cmake— XmlSerializationEXTTests filter when the component is absentmodules/math/include/Microsoft/Xna/Framework/XmlSerializationEXT.hpp— the math serialization surfacemodules/input/include/Microsoft/Xna/Framework/Input/XmlSerializationEXT.hpp— the input serialization surface
Evidence
Checked by reading at 009d40f5, and the sharp-runtime fix by reading commit 88c12f15 in the local sharp-runtime checkout (next @ 41b918c9, not pinned by the snapshot); not executed. Not established: whether a Windows build with the component re-enabled compiles today.
Independent re-verification: Checked by reading at 009d40f5, and the sharp-runtime fix and the Xml component's dependencies by reading the local sharp-runtime checkout (next @ 41b918c9, not pinned by the snapshot); not executed. The pinned CI revisions were compared with commit 88c12f15 by ancestry and none contains it. Not established: whether a Windows build with the component re-enabled compiles today.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
The two XmlSerializationEXTTests groups run only on non-Windows hosts.
Regression test
Remove the condition once the consumed sharp-runtime revision has the guard, then run both XmlSerializationEXTTests groups in a MinGW cross tree under Wine or in the manual MSVC workflow.
Blast radius
XML serialization of math and input value types on Windows only.
Workaround
Serialize these types by hand on Windows.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- User guide
- Platforms: Windows
- Deep dives
- Sharp Runtime consumption: the closure
- Known issues
- Functional gap index