Skip to content

Commit 6433b53

Browse files
authored
CMake updated to build ARM64EC (#195)
1 parent 8bda2a0 commit 6433b53

10 files changed

+196
-8
lines changed

CMakePresets.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,15 @@
4747
"cacheVariables": { "DXMATH_ARCHITECTURE": "arm64" },
4848
"hidden": true
4949
},
50+
{
51+
"name": "ARM64EC",
52+
"architecture": {
53+
"value": "arm64ec",
54+
"strategy": "external"
55+
},
56+
"cacheVariables": { "DXMATH_ARCHITECTURE": "arm64ec" },
57+
"hidden": true
58+
},
5059

5160
{
5261
"name": "Debug",
@@ -149,6 +158,8 @@
149158
{ "name": "arm-Release" , "description": "MSVC for ARM (Release) - ARM-NEON", "inherits": [ "base", "ARM", "Release", "MSVC" ] },
150159
{ "name": "arm64-Debug" , "description": "MSVC for ARM64 (Debug) - ARM-NEON", "inherits": [ "base", "ARM64", "Debug", "MSVC" ] },
151160
{ "name": "arm64-Release", "description": "MSVC for ARM64 (Release) - ARM-NEON", "inherits": [ "base", "ARM64", "Release", "MSVC" ] },
161+
{ "name": "arm64ec-Debug" , "description": "MSVC for ARM64EC (Debug) - ARM-NEON", "inherits": [ "base", "ARM64EC", "Debug", "MSVC" ], "environment": { "CXXFLAGS": "/arm64EC" } },
162+
{ "name": "arm64ec-Release", "description": "MSVC for ARM64EC (Release) - ARM-NEON", "inherits": [ "base", "ARM64EC", "Release", "MSVC" ], "environment": { "CXXFLAGS": "/arm64EC" } },
152163

153164
{ "name": "x64-Debug-Clang" , "description": "Clang/LLVM for x64 (Debug) - SSE/SSE2", "inherits": [ "base", "x64", "Debug", "Clang" ] },
154165
{ "name": "x64-Release-Clang" , "description": "Clang/LLVM for x64 (Release) - SSE/SSE2", "inherits": [ "base", "x64", "Release", "Clang" ] },

Extensions/DirectXMathAVX.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || __arm__ || __aarch64__
12+
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__
1313
#error AVX not supported on ARM platform
1414
#endif
1515

Extensions/DirectXMathAVX2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || __arm__ || __aarch64__
12+
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__
1313
#error AVX2 not supported on ARM platform
1414
#endif
1515

Extensions/DirectXMathBE.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if (defined(_M_IX86) || defined(_M_X64) || __i386__ || __x86_64__) && !defined(_M_HYBRID_X86_ARM64)
12+
#if (defined(_M_IX86) || defined(_M_X64) || __i386__ || __x86_64__) && !defined(_M_HYBRID_X86_ARM64) && !defined(_M_ARM64EC)
1313
#include <tmmintrin.h>
1414
#endif
1515

Extensions/DirectXMathF16C.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || __arm__ || __aarch64__
12+
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__
1313
#error F16C not supported on ARM platform
1414
#endif
1515

Extensions/DirectXMathFMA3.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || __arm__ || __aarch64__
12+
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__
1313
#error FMA3 not supported on ARM platform
1414
#endif
1515

Extensions/DirectXMathFMA4.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || __arm__ || __aarch64__
12+
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__
1313
#error FMA4 not supported on ARM platform
1414
#endif
1515

Extensions/DirectXMathSSE3.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || __arm__ || __aarch64__
12+
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__
1313
#error SSE3 not supported on ARM platform
1414
#endif
1515

Extensions/DirectXMathSSE4.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#pragma once
1111

12-
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || __arm__ || __aarch64__
12+
#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__
1313
#error SSE4 not supported on ARM platform
1414
#endif
1515

build/DirectXMath-GitHub-Dev17.yml

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ pool:
5252

5353
variables:
5454
Codeql.Enabled: false
55+
VC_PATH: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
5556
GITHUB_PAT: $(GITHUBPUBLICTOKEN)
5657

5758
jobs:
@@ -345,3 +346,179 @@ jobs:
345346
platform: x64
346347
configuration: Release
347348
msbuildArchitecture: x64
349+
350+
- job: CMAKE_BUILD_X64
351+
displayName: 'CMake for X64 BUILD_TESTING=ON'
352+
timeoutInMinutes: 60
353+
workspace:
354+
clean: all
355+
steps:
356+
- checkout: self
357+
clean: true
358+
fetchTags: false
359+
- task: DeleteFiles@1
360+
displayName: Delete files from Tests
361+
inputs:
362+
SourceFolder: Tests
363+
Contents: '**'
364+
RemoveSourceFolder: true
365+
RemoveDotFiles: true
366+
- task: CmdLine@2
367+
displayName: Fetch Tests
368+
inputs:
369+
script: git clone --quiet --no-tags https://%GITHUB_PAT%@github.com/walbourn/directxmathtest.git Tests
370+
workingDirectory: $(Build.SourcesDirectory)
371+
failOnStderr: true
372+
- task: CmdLine@2
373+
displayName: Setup environment for CMake to use VS
374+
inputs:
375+
script: |
376+
call "$(VC_PATH)\Auxiliary\Build\vcvars64.bat"
377+
echo ##vso[task.setvariable variable=WindowsSdkVerBinPath;]%WindowsSdkVerBinPath%
378+
echo ##vso[task.prependpath]%VSINSTALLDIR%Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja
379+
echo ##vso[task.prependpath]%VCINSTALLDIR%Tools\Llvm\x64\bin
380+
echo ##vso[task.prependpath]%WindowsSdkBinPath%x64
381+
echo ##vso[task.prependpath]%WindowsSdkVerBinPath%x64
382+
echo ##vso[task.prependpath]%VCToolsInstallDir%bin\Hostx64\x64
383+
echo ##vso[task.setvariable variable=EXTERNAL_INCLUDE;]%EXTERNAL_INCLUDE%
384+
echo ##vso[task.setvariable variable=INCLUDE;]%INCLUDE%
385+
echo ##vso[task.setvariable variable=LIB;]%LIB%
386+
387+
- task: CMake@1
388+
displayName: CMake (MSVC; x64-Debug) Config
389+
inputs:
390+
cwd: '$(Build.SourcesDirectory)'
391+
cmakeArgs: --preset=x64-Debug
392+
- task: CMake@1
393+
displayName: CMake (MSVC; x64-Debug) Build
394+
inputs:
395+
cwd: '$(Build.SourcesDirectory)'
396+
cmakeArgs: --build out/build/x64-Debug -v
397+
- task: CMake@1
398+
displayName: CMake (MSVC; x64-Release) Config
399+
inputs:
400+
cwd: '$(Build.SourcesDirectory)'
401+
cmakeArgs: --preset=x64-Release
402+
- task: CMake@1
403+
displayName: CMake (MSVC; x64-Release) Build
404+
inputs:
405+
cwd: '$(Build.SourcesDirectory)'
406+
cmakeArgs: --build out/build/x64-Release -v
407+
- task: CMake@1
408+
displayName: CMake (clang/LLVM; x64-Debug) Config
409+
inputs:
410+
cwd: '$(Build.SourcesDirectory)'
411+
cmakeArgs: --preset=x64-Debug-Clang
412+
- task: CMake@1
413+
displayName: CMake (clang/LLVM; x64-Debug) Build
414+
inputs:
415+
cwd: '$(Build.SourcesDirectory)'
416+
cmakeArgs: --build out/build/x64-Debug-Clang -v
417+
- task: CMake@1
418+
displayName: CMake (clang/LLVM; x64-Release) Config
419+
inputs:
420+
cwd: '$(Build.SourcesDirectory)'
421+
cmakeArgs: --preset=x64-Release-Clang
422+
- task: CMake@1
423+
displayName: CMake (clang/LLVM; x64-Release) Build
424+
inputs:
425+
cwd: '$(Build.SourcesDirectory)'
426+
cmakeArgs: --build out/build/x64-Release-Clang -v
427+
428+
- job: CMAKE_BUILD_ARM64
429+
displayName: 'CMake for ARM64 BUILD_TESTING=ON'
430+
timeoutInMinutes: 60
431+
workspace:
432+
clean: all
433+
steps:
434+
- checkout: self
435+
clean: true
436+
fetchTags: false
437+
- task: DeleteFiles@1
438+
displayName: Delete files from Tests
439+
inputs:
440+
SourceFolder: Tests
441+
Contents: '**'
442+
RemoveSourceFolder: true
443+
RemoveDotFiles: true
444+
- task: CmdLine@2
445+
displayName: Fetch Tests
446+
inputs:
447+
script: git clone --quiet --no-tags https://%GITHUB_PAT%@github.com/walbourn/directxmathtest.git Tests
448+
workingDirectory: $(Build.SourcesDirectory)
449+
failOnStderr: true
450+
- task: CmdLine@2
451+
displayName: Setup environment for CMake to use VS
452+
inputs:
453+
script: |
454+
call "$(VC_PATH)\Auxiliary\Build\vcvarsamd64_arm64.bat"
455+
echo ##vso[task.setvariable variable=WindowsSdkVerBinPath;]%WindowsSdkVerBinPath%
456+
echo ##vso[task.prependpath]%VSINSTALLDIR%Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja
457+
echo ##vso[task.prependpath]%VCINSTALLDIR%Tools\Llvm\x64\bin
458+
echo ##vso[task.prependpath]%WindowsSdkBinPath%x64
459+
echo ##vso[task.prependpath]%WindowsSdkVerBinPath%x64
460+
echo ##vso[task.prependpath]%VCToolsInstallDir%bin\Hostx64\arm64
461+
echo ##vso[task.setvariable variable=EXTERNAL_INCLUDE;]%EXTERNAL_INCLUDE%
462+
echo ##vso[task.setvariable variable=INCLUDE;]%INCLUDE%
463+
echo ##vso[task.setvariable variable=LIB;]%LIB%
464+
465+
- task: CMake@1
466+
displayName: CMake (MSVC; arm64-Debug) Config
467+
inputs:
468+
cwd: '$(Build.SourcesDirectory)'
469+
cmakeArgs: --preset=arm64-Debug
470+
- task: CMake@1
471+
displayName: CMake (MSVC; arm64-Debug) Build
472+
inputs:
473+
cwd: '$(Build.SourcesDirectory)'
474+
cmakeArgs: --build out/build/arm64-Debug -v
475+
- task: CMake@1
476+
displayName: CMake (MSVC; arm64-Release) Config
477+
inputs:
478+
cwd: '$(Build.SourcesDirectory)'
479+
cmakeArgs: --preset=arm64-Release
480+
- task: CMake@1
481+
displayName: CMake (MSVC; arm64-Release) Build
482+
inputs:
483+
cwd: '$(Build.SourcesDirectory)'
484+
cmakeArgs: --build out/build/arm64-Release -v
485+
- task: CMake@1
486+
displayName: CMake (clang/LLVM; arm64-Debug) Config
487+
inputs:
488+
cwd: '$(Build.SourcesDirectory)'
489+
cmakeArgs: --preset=arm64-Debug-Clang
490+
- task: CMake@1
491+
displayName: CMake (clang/LLVM; arm64-Debug) Build
492+
inputs:
493+
cwd: '$(Build.SourcesDirectory)'
494+
cmakeArgs: --build out/build/arm64-Debug-Clang -v
495+
- task: CMake@1
496+
displayName: CMake (clang/LLVM; arm64-Release) Config
497+
inputs:
498+
cwd: '$(Build.SourcesDirectory)'
499+
cmakeArgs: --preset=arm64-Release-Clang
500+
- task: CMake@1
501+
displayName: CMake (clang/LLVM; arm64-Release) Build
502+
inputs:
503+
cwd: '$(Build.SourcesDirectory)'
504+
cmakeArgs: --build out/build/arm64-Release-Clang -v
505+
- task: CMake@1
506+
displayName: CMake (MSVC; arm64ec-Debug) Config
507+
inputs:
508+
cwd: '$(Build.SourcesDirectory)'
509+
cmakeArgs: --preset=arm64ec-Debug
510+
- task: CMake@1
511+
displayName: CMake (MSVC; arm64ec-Debug) Build
512+
inputs:
513+
cwd: '$(Build.SourcesDirectory)'
514+
cmakeArgs: --build out/build/arm64ec-Debug -v
515+
- task: CMake@1
516+
displayName: CMake (MSVC; arm64ec-Release) Config
517+
inputs:
518+
cwd: '$(Build.SourcesDirectory)'
519+
cmakeArgs: --preset=arm64ec-Release
520+
- task: CMake@1
521+
displayName: CMake (MSVC; arm64ec-Release) Build
522+
inputs:
523+
cwd: '$(Build.SourcesDirectory)'
524+
cmakeArgs: --build out/build/arm64ec-Release -v

0 commit comments

Comments
 (0)