Skip to content

Commit 9f5e8c7

Browse files
committed
ci: add windows arm64 build to ci
1 parent e593ab3 commit 9f5e8c7

File tree

4 files changed

+325
-1
lines changed

4 files changed

+325
-1
lines changed

.github/workflows/ci.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ jobs:
169169
[
170170
{ project: windows_64, arch: x64 },
171171
{ project: windows_32, arch: x86 },
172+
{ project: windows_arm64, arch: amd64_arm64 },
172173
]
173174
steps:
174175
- uses: actions/checkout@v4
@@ -182,8 +183,12 @@ jobs:
182183
arch: ${{ matrix.config.arch }}
183184
- name: Build dependencies
184185
run: ceedling project:${{ matrix.config.project }} verbosity[4] clobber dependencies:make
185-
- name: Run build and test
186+
- if: ${{ matrix.config.project != 'windows_arm64' }}
187+
name: Run build and test
186188
run: ceedling project:${{ matrix.config.project }} verbosity[4] test:all
189+
- if: ${{ matrix.config.project == 'windows_arm64' }}
190+
name: Run build
191+
run: ceedling project:${{ matrix.config.project }} verbosity[4] release
187192
ios:
188193
runs-on: macos-latest
189194
steps:

windows/ceedlingarm64.bat

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
echo off
2+
for /f "usebackq tokens=*" %%a in (`"\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath`) do set BASE=%%a
3+
call "%BASE%"/VC\Auxiliary\Build\vcvarsamd64_arm64.bat
4+
echo on
5+
echo Running: ceedling %*
6+
ceedling %*
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
#ifndef _WIN_USER_SETTINGS_H_
2+
#define _WIN_USER_SETTINGS_H_
3+
4+
/* Verify this is Windows */
5+
#ifndef _WIN32
6+
#error This user_settings.h header is only designed for Windows
7+
#endif
8+
9+
/* Check HAVE_SECURE_RENEGOTIATION */
10+
#ifndef HAVE_SECURE_RENEGOTIATION
11+
#error HAVE_SECURE_RENEGOTIATION is not defined
12+
#endif
13+
14+
/* Configurations */
15+
#undef USE_WINDOWS_API
16+
#define USE_WINDOWS_API
17+
18+
#undef WOLFSSL_TLS13
19+
#define WOLFSSL_TLS13
20+
21+
#undef HAVE_TLS_EXTENSIONS
22+
#define HAVE_TLS_EXTENSIONS
23+
24+
#undef HAVE_SUPPORTED_CURVES
25+
#define HAVE_SUPPORTED_CURVES
26+
27+
#undef WOLFSSL_DTLS_MTU
28+
#define WOLFSSL_DTLS_MTU
29+
30+
#undef WOLFSSL_DTLS
31+
#define WOLFSSL_DTLS
32+
33+
#undef WOLFSSL_DTLS13
34+
#define WOLFSSL_DTLS13
35+
36+
#undef WOLFSSL_SEND_HRR_COOKIE
37+
#define WOLFSSL_SEND_HRR_COOKIE
38+
39+
#undef SINGLE_THREADED
40+
#define SINGLE_THREADED
41+
42+
#undef HAVE_THREAD_LS
43+
#define HAVE_THREAD_LS
44+
45+
#undef TFM_TIMING_RESISTANT
46+
#define TFM_TIMING_RESISTANT
47+
48+
#undef ECC_TIMING_RESISTANT
49+
#define ECC_TIMING_RESISTANT
50+
51+
#undef WC_RSA_BLINDING
52+
#define WC_RSA_BLINDING
53+
54+
#undef HAVE_AESGCM
55+
#define HAVE_AESGCM
56+
57+
#undef WOLFSSL_AESNI
58+
//#define WOLFSSL_AESNI // Only for x86_64
59+
60+
#undef HAVE_INTEL_RDSEED
61+
//#define HAVE_INTEL_RDSEED // Only on x86_64
62+
63+
#undef USE_INTEL_SPEEDUP
64+
//#define USE_INTEL_SPEEDUP // Only on x86_64
65+
66+
#undef WOLFSSL_SHA512
67+
#define WOLFSSL_SHA512
68+
69+
#undef WOLFSSL_SHA384
70+
#define WOLFSSL_SHA384
71+
72+
#undef HAVE_HKDF
73+
#define HAVE_HKDF
74+
75+
#undef NO_DSA
76+
#define NO_DSA
77+
78+
#undef HAVE_ECC
79+
#define HAVE_ECC
80+
81+
#undef TFM_ECC256
82+
#define TFM_ECC256
83+
84+
#undef ECC_SHAMIR
85+
#define ECC_SHAMIR
86+
87+
#undef HAVE_CURVE25519
88+
#define HAVE_CURVE25519
89+
90+
#undef NO_OLD_TLS
91+
#define NO_OLD_TLS
92+
93+
#undef WC_RSA_PSS
94+
#define WC_RSA_PSS
95+
96+
#undef NO_DH
97+
#define NO_DH
98+
99+
#undef WOLFSSL_BASE64_ENCODE
100+
#define WOLFSSL_BASE64_ENCODE
101+
102+
#undef NO_RC4
103+
#define NO_RC4
104+
105+
#undef NO_HC128
106+
#define NO_HC128
107+
108+
#undef NO_RABBIT
109+
#define NO_RABBIT
110+
111+
#undef WOLFSSL_SHA224
112+
#define WOLFSSL_SHA224
113+
114+
#undef HAVE_POLY1305
115+
#define HAVE_POLY1305
116+
117+
#undef HAVE_ONE_TIME_AUTH
118+
#define HAVE_ONE_TIME_AUTH
119+
120+
#undef HAVE_CHACHA
121+
#define HAVE_CHACHA
122+
123+
#undef HAVE_HASHDRBG
124+
#define HAVE_HASHDRBG
125+
126+
#undef HAVE_SNI
127+
#define HAVE_SNI
128+
129+
#undef HAVE_SUPPORTED_CURVES
130+
#define HAVE_SUPPORTED_CURVES
131+
132+
#undef HAVE_EXTENDED_MASTER
133+
#define HAVE_EXTENDED_MASTER
134+
135+
#undef WOLFCRYPT_HAVE_SRP
136+
#define WOLFCRYPT_HAVE_SRP
137+
138+
#undef NO_RC4
139+
#define NO_RC4
140+
141+
#undef HAVE_ENCRYPT_THEN_MAC
142+
#define HAVE_ENCRYPT_THEN_MAC
143+
144+
#undef NO_PSK
145+
#define NO_PSK
146+
147+
#undef NO_MD4
148+
#define NO_MD4
149+
150+
#undef NO_PWDBASED
151+
#define NO_PWDBASED
152+
153+
#undef USE_FAST_MATH
154+
#define USE_FAST_MATH
155+
156+
#undef WOLFSSL_AARCH64_BUILD
157+
#define WOLFSSL_AARCH64_BUILD
158+
159+
#undef WOLFSSL_HAVE_SP_RSA
160+
#define WOLFSSL_HAVE_SP_RSA
161+
162+
#undef WOLFSSL_SP_4096
163+
#define WOLFSSL_SP_4096
164+
165+
#undef WOLFSSL_HAVE_SP_ECC
166+
#define WOLFSSL_HAVE_SP_ECC
167+
168+
#undef HAVE_ECC384
169+
#define HAVE_ECC384
170+
171+
#undef WOLFSSL_SP_384
172+
#define WOLFSSL_SP_384
173+
174+
#undef WOLFSSL_SP_ASM
175+
//#define WOLFSSL_SP_ASM
176+
177+
#undef WOLFSSL_SP_X86_64_ASM
178+
//#define WOLFSSL_SP_X86_64_ASM
179+
180+
#undef WC_NO_ASYNC_THREADING
181+
#define WC_NO_ASYNC_THREADING
182+
183+
#undef HAVE_DH_DEFAULT_PARAMS
184+
#define HAVE_DH_DEFAULT_PARAMS
185+
186+
#undef NO_DES3
187+
#define NO_DES3
188+
189+
#undef WOLFSSL_SYS_CA_CERTS
190+
//#define WOLFSSL_SYS_CA_CERTS
191+
192+
#undef HAVE_LIBOQS
193+
#define HAVE_LIBOQS
194+
195+
#undef WOLFSSL_NO_SPHINCS
196+
#define WOLFSSL_NO_SPHINCS
197+
198+
#endif /* _WIN_USER_SETTINGS_H_ */

windows_arm64.yml

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
--- # ceedling project file for Windows
2+
:import:
3+
- 3rd_party_deps.yml
4+
- windows.yml
5+
6+
:dependencies:
7+
:libraries:
8+
- :name: liboqs
9+
:source_path: third_party/liboqs
10+
:artifact_path: third_party/liboqs/build
11+
:fetch:
12+
:method: :git
13+
:source: "%HE_LIBOQS_SOURCE%"
14+
:tag: "%HE_LIBOQS_TAG%"
15+
:build:
16+
- "cmake -B build -DCMAKE_TOOLCHAIN_FILE=.CMake/toolchain_windows_arm64.cmake %HE_LIBOQS_BUILD_FLAGS% ."
17+
- "cmake --build build --config Release --target oqs --"
18+
:artifacts:
19+
:includes:
20+
- include
21+
:static_libraries:
22+
- lib/Release/oqs.lib
23+
- :name: WolfSSL
24+
:source_path: third_party/wolfssl
25+
:fetch:
26+
:method: :git
27+
:source: "%HE_WOLFSSL_SOURCE%"
28+
:tag: "%HE_WOLFSSL_TAG%"
29+
:build:
30+
- "cp ../../windows/wolfssl-user_settings-arm-64.h wolfssl/user_settings.h"
31+
- "cp -f ../../windows/wolfssl-user_settings-arm-64.h IDE/WIN/user_settings.h"
32+
- "cp -f ../../windows/wolfssl.vcxproj ./wolfssl.vcxproj"
33+
- "MSBuild.exe wolfssl.vcxproj -verbosity:detailed -t:Build -p:Configuration=Release -p:Platform=ARM64 -p:PlatformToolset=v143"
34+
:artifacts:
35+
:includes:
36+
- /
37+
- /wolfssl # needed e.g. for mock_ssl.h to find wolfssl/ssl.h
38+
:static_libraries:
39+
- Release/x64/wolfssl.lib
40+
41+
# https://github.com/ThrowTheSwitch/Ceedling/issues/210 -> https://github.com/ThrowTheSwitch/Ceedling/files/1360977/project.txt
42+
:tools:
43+
# Ceedling defaults to using gcc for compiling, linking, etc.
44+
# As [:tools] is blank, gcc will be used (so long as it's in your system path)
45+
# See documentation to configure a given toolchain for use
46+
:test_compiler:
47+
:executable: cl
48+
:name: 'msvc'
49+
:arguments:
50+
- /c
51+
- /nologo
52+
- /MT
53+
- /GL
54+
- /I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR
55+
- /I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE
56+
- /D"$": COLLECTION_DEFINES_TEST_AND_VENDOR
57+
- /Fo"${2}"
58+
- "${1}"
59+
:test_linker:
60+
:executable: link
61+
:name: 'msvc'
62+
:arguments:
63+
- /MACHINE:ARM64
64+
- "${1}"
65+
- /FORCE:MULTIPLE # /IGNORE:LNK4006 # mocks deliberately duplicate symbols
66+
- /LTCG
67+
- "${5}"
68+
- "${4}"
69+
- /OUT:"${2}"
70+
:test_file_preprocessor:
71+
:executable: cl
72+
:name: 'msvc'
73+
:arguments:
74+
- /P
75+
- /C
76+
- /I test_file_preprocessor
77+
- /I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR
78+
- /I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE
79+
- /D"$": COLLECTION_DEFINES_TEST_AND_VENDOR
80+
- /D"$": DEFINES_TEST_PREPROCESS
81+
- /Fi"${2}"
82+
- "${1}"
83+
# This is `gcc -E -MM -MG` which outputs a make dependency rule.
84+
# Unsure how to coax cl.exe into doing this, so just stick with gcc.
85+
#:test_includes_preprocessor:
86+
# :executable: cl
87+
# :name: 'msvc'
88+
# :arguments:
89+
# - /P
90+
# - /I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR
91+
# - /I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE
92+
# - /D"$": COLLECTION_DEFINES_TEST_AND_VENDOR
93+
# - /D"$": DEFINES_TEST_PREPROCESS
94+
# - "${1}"
95+
:release_compiler:
96+
:executable: cl
97+
:name: 'msvc'
98+
:arguments:
99+
- /c
100+
- /MT
101+
- /I"$": COLLECTION_PATHS_SOURCE_INCLUDE_VENDOR
102+
- /I"$": COLLECTION_PATHS_RELEASE_TOOLCHAIN_INCLUDE
103+
- /D"$": COLLECTION_DEFINES_RELEASE_AND_VENDOR
104+
- /Fo"${2}"
105+
- "${1}"
106+
:release_linker:
107+
#:executable: link
108+
:executable: lib
109+
:name: 'msvc'
110+
:arguments:
111+
- /MACHINE:ARM64
112+
- "${1}"
113+
- /OUT:"${2}"
114+
115+
...

0 commit comments

Comments
 (0)