Hi Slawomir,
Thank you for reporting the issue and for your analysis.
Let us review the problem and your proposed fix (revert), and we will get back to you with our assessment.
Thanks and best regards,
Anton
From: Sławomir Piotrowski via TF-M <tf-m@lists.trustedfirmware.org>
Sent: Monday, June 22, 2026 7:38 AM
To: tf-m@lists.trustedfirmware.org
Subject: [TF-M] [BUG] Windows build broken: Architectural conflict between CMake object hashing (commit 8df5c30) and hardcoded .o paths
Hi TF-M Maintainers,
I've encountered a systemic build issue when compiling TF-M on Windows using new CMake version (4.2.1+). The build currently fails on Windows, whereas it compiles perfectly fine on Linux (or via Docker or using older CMake
vsrsion).
After investigating, the root cause appears to be an architectural conflict introduced by commit 8df5c30845fba7e63253c64407d009b40a37ff95. This commit attempts to solve Windows MAX_PATH limitations by forcing CMake to use
short object names (hashing and flattening the output paths for .o files).
However, multiple parts of the TF-M build system fundamentally rely on predictable, unhashed intermediate object file names.
The conflict manifests in at least two critical areas:
The Problem: We cannot simultaneously use CMake object path hashing and rely on predictable intermediate file paths. Relying on .o names in linker scripts is inherently fragile.
Proposal: Given that this issue breaks the core Windows build and likely hides more bugs in other target-specific linker scripts or CMake configurations, I suggest
reverting commit 8df5c30845fba7e63253c64407d009b40a37ff95 for now.
Before re-enabling short object names on Windows, a deeper architectural audit is needed. For example, moving away from file-based section placement in linker scripts and instead using compiler attributes (e.g., __attribute__((section("..."))))
directly in the C source code, making the build agnostic to object file names.
As I am consuming TF-M primarily through the Zephyr ecosystem, I am not intimately familiar enough with pure TF-M's complex CMake structure to patch all these instances safely myself. Could someone with deeper knowledge
of the TF-M build system look into this and decide on the best path forward?
Best regards,
Sławomir Piotrowski