Skip to content

Commit 68ea30d

Browse files
committed
Add Windows ARM64 support
Currently we do not have fcontext related ASM files for Windows ARM64. So we can use winfib context-impl only for Windows ARM64. Fixes issue : boostorg/boost#1070 Related to PR: boostorg/boost#1077
1 parent 28722d1 commit 68ea30d

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ jobs:
5454
strategy:
5555
fail-fast: false
5656
matrix:
57-
os: [ windows-2022, windows-2025 ]
57+
os: [ windows-2022, windows-2025, windows-11-arm ]
5858

5959
runs-on: ${{matrix.os}}
6060

build/Jamfile.v2

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import config : requires ;
1818
project
1919
: common-requirements <library>$(boost_dependencies)
2020
: requirements
21+
<target-os>windows,<architecture>arm,<address-model>64:<context-impl>winfib
2122
<target-os>windows:<define>_WIN32_WINNT=0x0601
2223
<target-os>linux,<toolset>gcc,<segmented-stacks>on:<cxxflags>-fsplit-stack
2324
<target-os>linux,<toolset>gcc,<segmented-stacks>on:<cxxflags>-DBOOST_USE_SEGMENTED_STACKS
@@ -189,15 +190,12 @@ alias asm_sources
189190
<toolset>gcc
190191
;
191192

192-
# ARM64/AAPCS/PE — also allow <abi>ms for Windows on ARM64 (MSVC)
193-
# <abi>ms only applies when
194-
# <architecture>arm <address-model>64 <binary-format>pe,
195-
# so x86/x64 MSVC builds are unaffected.
193+
# ARM64/AAPCS/PE
196194
alias asm_sources
197195
: asm/make_arm64_aapcs_pe_armasm.asm
198196
asm/jump_arm64_aapcs_pe_armasm.asm
199197
asm/ontop_arm64_aapcs_pe_armasm.asm
200-
: <abi>aapcs,<abi>ms
198+
: <abi>aapcs
201199
<address-model>64
202200
<architecture>arm
203201
<binary-format>pe

test/Jamfile.v2

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ rule native-impl ( properties * )
4141
{
4242
result = <build>no ;
4343
}
44+
else if ( <target-os>windows in $(properties) && <architecture>arm in $(properties) && <address-model>64 in $(properties) )
45+
{
46+
return <context-impl>winfib ; # for windows arm64 always use winfib and skip ASM
47+
}
4448
else if ( ! ( <target-os>windows in $(properties) ) )
4549
{
4650
result = <context-impl>ucontext ;
@@ -52,6 +56,22 @@ rule native-impl ( properties * )
5256
return $(result) ;
5357
}
5458

59+
rule fcontext-impl ( properties * )
60+
{
61+
# Skip on Windows ARM64
62+
if ( <target-os>windows in $(properties) &&
63+
<architecture>arm in $(properties) &&
64+
<address-model>64 in $(properties) )
65+
{
66+
return <build>no ; # for windows arm64 always use winfib and skip fcontext
67+
}
68+
else
69+
{
70+
return <context-impl>fcontext ;
71+
}
72+
}
73+
74+
5575
obj is_libstdcxx : is_libstdcxx.cpp ;
5676
explicit is_libstdcxx ;
5777

@@ -95,7 +115,7 @@ test-suite minimal :
95115

96116
[ run test_fiber.cpp :
97117
: :
98-
<context-impl>fcontext
118+
<conditional>@fcontext-impl
99119
[ requires cxx11_auto_declarations
100120
cxx11_constexpr
101121
cxx11_defaulted_functions
@@ -150,7 +170,7 @@ test-suite minimal :
150170

151171
[ run test_callcc.cpp :
152172
: :
153-
<context-impl>fcontext
173+
<conditional>@fcontext-impl
154174
[ requires cxx11_auto_declarations
155175
cxx11_constexpr
156176
cxx11_defaulted_functions

0 commit comments

Comments
 (0)