Skip to content

Commit 9943cdf

Browse files
garyoclaude
andcommitted
Align Windows Arm64 packaging with committee consensus (#160)
Per the consensus reached in issue #160: - Define a single new normative folder, Win-arm64ec; Arm64EC plug-ins must install there, and Arm64X plug-ins may install there too. - Require x64 hosts to detect Arm64 emulation and check Win-arm64ec (preferring native Arm64EC over emulated x64), so unmodified Intel hosts can still find Arm64EC plug-ins. - Defer the Win-arm64 and Win-arm64x folders to Future Architecture Compatibility until a native Arm64/Arm64X host needs them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Gary Oberbrunner <garyo@darkstarsystems.com>
1 parent db958ac commit 9943cdf

1 file changed

Lines changed: 32 additions & 21 deletions

File tree

Documentation/sources/Reference/ofxPackaging.rst

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,6 @@ Where...
8383
- ``Win32`` - for Microsoft Windows (Intel x86, 32 bit)
8484
- ``Win64`` - for Microsoft Windows (Intel x64, 64 bit)
8585
- ``Win-arm64ec`` - for Microsoft Windows (ARM64EC)
86-
- ``Win-arm64`` - for Microsoft Windows (ARM64)
87-
- ``Win-arm64x`` - for Microsoft Windows (ARM64X)
8886
- ``IRIX`` - for SGI IRIX plug-ins (compiled 32 bit) (*DEPRECATED*)
8987
- ``IRIX64`` - for SGI IRIX plug-ins (compiled 64 bit) (*DEPRECATED*)
9088
- ``Linux-x86`` - for Linux on x86 CPUs (compiled 32 bit)
@@ -113,29 +111,35 @@ to merge multiple architectures into a single binary on MacOS.
113111
Windows Architectures
114112
^^^^^^^^^^^^^^^^^^^^^
115113

116-
As of 2024, Windows supports Arm64 CPUs. It uses two distinct ABIs,
114+
As of 2024, Windows supports Arm64 CPUs. It uses two distinct ABIs:
117115
*Arm64* for native code, and *Arm64EC* for x64/Arm64 compatibility, in
118116
which x64 apps running in emulation on Arm64 hardware can interoperate
119117
with x64 DLLs (also in emulation) or Arm64EC DLLs (which are native
120118
Arm64 code with x64-compatible calling conventions). Arm64EC apps
121-
cannot load native Arm64 DLLs, only Intel or Arm64EC.
122-
123-
Windows also supports an Arm64X "fat" binary PE format which
124-
contains both Intel/Arm64EC and Arm64 binaries.
125-
126-
**Search Order**: Since apps built natively for Arm64 ("Arm64" abi)
127-
can only load Arm64 DLLs, those apps should attempt to load plugins
128-
from the "Win-arm64" folder first, then "Win-arm64x". Arm64EC hosts
129-
(running on an Arm64 system) should try the "Win-arm64ec" folder
130-
first, then "Win-arm64x". Arm64EC hosts can also use x64 DLLs, so they
131-
may try "Win64" as well, but should prefer the other folders to avoid
132-
running the plugin in emulation. An Arm64X host will be running either
133-
its Arm64EC branch or its Arm64 branch depending on how it's launched,
134-
so it should load plugins according to the above depending on the
135-
current mode.
136-
137-
Note that there is no "fat binary" format on Windows that contains
138-
Intel x64 *and* arm64 code.
119+
cannot load native Arm64 DLLs, only Intel or Arm64EC. Windows also
120+
supports an Arm64X "fat" binary PE format which contains both
121+
Intel/Arm64EC and Arm64 binaries. Note that there is no "fat binary"
122+
format on Windows that contains plain Intel x64 *and* Arm64 code.
123+
124+
In practice, the Windows hosts that run on Arm64 hardware today (such
125+
as DaVinci Resolve and Vegas Pro) are Arm64EC; there are not yet any
126+
native Arm64 or Arm64X OpenFX hosts. This standard therefore defines a
127+
single new folder, ``Win-arm64ec``, and defers naming ``Win-arm64``
128+
and ``Win-arm64x`` folders until a host needs them (see *Future
129+
Architecture Compatibility* below).
130+
131+
**Plug-ins**: Arm64EC plug-ins must be installed in the
132+
``Win-arm64ec`` folder. An Arm64X plug-in (which includes an Arm64EC
133+
branch) may also be installed there so that Arm64EC hosts will find
134+
it.
135+
136+
**Hosts**: An Arm64EC host should load plug-ins from the
137+
``Win-arm64ec`` folder. Because an unmodified x64 host runs in
138+
emulation on Arm64 hardware and would otherwise look only in
139+
``Win64``, an x64 host should detect when it is running under Arm64
140+
emulation and, if so, also check the ``Win-arm64ec`` folder when it
141+
exists, preferring a native Arm64EC plug-in there over the emulated
142+
x64 plug-in in ``Win64``.
139143

140144
Future Architecture Compatibility
141145
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -153,6 +157,13 @@ named by ``Linux-${uname -m}`` which for arm64 should be
153157
``Linux-aarch64``. Using ``uname -m`` rather than a hard-coded list
154158
allows for transparently supporting any future architectures.
155159

160+
On Windows, when native Arm64 or Arm64X OpenFX hosts appear, the
161+
standard expects to add ``Win-arm64`` and ``Win-arm64x`` folders
162+
following the same naming pattern. A native Arm64 host (which can load
163+
only Arm64 DLLs) would then prefer ``Win-arm64``, falling back to
164+
``Win-arm64x``. These folder names are reserved but not yet
165+
normative, pending a host that needs them.
166+
156167

157168
Structure
158169
^^^^^^^^^

0 commit comments

Comments
 (0)