Skip to content

Commit 30c56cd

Browse files
committed
builds: Add macOS CI
1 parent 942f678 commit 30c56cd

2 files changed

Lines changed: 209 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: build
2+
on: [push]
3+
jobs:
4+
build:
5+
strategy:
6+
matrix:
7+
os: [macos-15-intel, macos-26-intel]
8+
# TODO: fix macos-latest (aarch64 assembly issue?)
9+
#include:
10+
#- os: macos-latest
11+
# config: --host=aarch64-apple-darwin
12+
runs-on: ${{ matrix.os }}
13+
steps:
14+
- uses: actions/checkout@v6
15+
- name: qbe
16+
run: |
17+
git clone -b dev git://c9x.me/qbe.git
18+
make -C qbe install
19+
- name: setup
20+
run: sudo patch -d "$(xcrun --show-sdk-path)" -i "$PWD/.github/workflows/macos.diff"
21+
- name: build
22+
run: ./configure ${{ matrix.config }} && make
23+
- name: test
24+
run: make check
25+
- name: bootstrap
26+
run: make bootstrap

.github/workflows/macos.diff

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
--- usr/include/i386/_types.h.orig 2026-04-25 12:55:44
2+
+++ usr/include/i386/_types.h 2026-04-25 12:59:28
3+
@@ -115,10 +115,8 @@
4+
5+
#if USE_CLANG_TYPES
6+
typedef va_list __darwin_va_list; /* va_list */
7+
-#elif (__GNUC__ > 2)
8+
-typedef __builtin_va_list __darwin_va_list; /* va_list */
9+
#else
10+
-typedef void * __darwin_va_list; /* va_list */
11+
+typedef __builtin_va_list __darwin_va_list; /* va_list */
12+
#endif
13+
14+
#if USE_CLANG_TYPES
15+
--- usr/include/arm/_types.h.orig 2026-04-27 16:47:16
16+
+++ usr/include/arm/_types.h 2026-04-27 16:47:32
17+
@@ -91,10 +91,8 @@
18+
19+
#if USE_CLANG_TYPES
20+
typedef va_list __darwin_va_list; /* va_list */
21+
-#elif (__GNUC__ > 2)
22+
-typedef __builtin_va_list __darwin_va_list; /* va_list */
23+
#else
24+
-typedef void * __darwin_va_list; /* va_list */
25+
+typedef __builtin_va_list __darwin_va_list; /* va_list */
26+
#endif
27+
28+
#if USE_CLANG_TYPES
29+
--- usr/include/mach/arm/_structs.h.orig 2026-04-27 16:59:34
30+
+++ usr/include/mach/arm/_structs.h 2026-04-27 17:13:49
31+
@@ -36,6 +36,14 @@
32+
#include <sys/cdefs.h> /* __DARWIN_UNIX03 */
33+
#include <machine/types.h> /* __uint32_t */
34+
35+
+#if __STDC_VERSION__ >= 202311L
36+
+#define __aligned(x) alignas(x)
37+
+#elif __STDC_VERSION__ >= 201112L
38+
+#define __aligned(x) _Alignas(x)
39+
+#else
40+
+#define __aligned(x) __attribute__((__aligned__(x)))
41+
+#endif
42+
+
43+
#if __DARWIN_UNIX03
44+
#define _STRUCT_ARM_EXCEPTION_STATE struct __darwin_arm_exception_state
45+
_STRUCT_ARM_EXCEPTION_STATE
46+
@@ -537,14 +545,22 @@
47+
#if defined(__arm64__)
48+
_STRUCT_ARM_NEON_STATE64
49+
{
50+
+#ifdef __SIZEOF_INT128__
51+
__uint128_t __v[32];
52+
+#else
53+
+ __aligned(16) char __opaque[512];
54+
+#endif
55+
__uint32_t __fpsr;
56+
__uint32_t __fpcr;
57+
};
58+
59+
_STRUCT_ARM_NEON_STATE
60+
{
61+
+#ifdef __SIZEOF_INT128__
62+
__uint128_t __v[16];
63+
+#else
64+
+ __aligned(16) char __opaque[256];
65+
+#endif
66+
__uint32_t __fpsr;
67+
__uint32_t __fpcr;
68+
};
69+
@@ -554,13 +570,15 @@
70+
*/
71+
_STRUCT_ARM_NEON_STATE64
72+
{
73+
+ __aligned(16)
74+
char opaque[(32 * 16) + (2 * sizeof(__uint32_t))];
75+
-} __attribute__((aligned(16)));
76+
+};
77+
78+
_STRUCT_ARM_NEON_STATE
79+
{
80+
+ __aligned(16)
81+
char opaque[(16 * 16) + (2 * sizeof(__uint32_t))];
82+
-} __attribute__((aligned(16)));
83+
+};
84+
85+
#else
86+
#error Unknown architecture.
87+
@@ -590,13 +608,15 @@
88+
*/
89+
_STRUCT_ARM_NEON_STATE64
90+
{
91+
+ __aligned(16)
92+
char opaque[(32 * 16) + (2 * sizeof(__uint32_t))];
93+
-} __attribute__((aligned(16)));
94+
+};
95+
96+
_STRUCT_ARM_NEON_STATE
97+
{
98+
+ __aligned(16)
99+
char opaque[(16 * 16) + (2 * sizeof(__uint32_t))];
100+
-} __attribute__((aligned(16)));
101+
+};
102+
103+
#else
104+
#error Unknown architecture.
105+
@@ -623,26 +643,30 @@
106+
#define _STRUCT_ARM_SVE_Z_STATE struct __darwin_arm_sve_z_state
107+
_STRUCT_ARM_SVE_Z_STATE
108+
{
109+
+ __aligned(4)
110+
char __z[16][256];
111+
-} __attribute__((aligned(4)));
112+
+};
113+
114+
#define _STRUCT_ARM_SVE_P_STATE struct __darwin_arm_sve_p_state
115+
_STRUCT_ARM_SVE_P_STATE
116+
{
117+
+ __aligned(4)
118+
char __p[16][256 / 8];
119+
-} __attribute__((aligned(4)));
120+
+};
121+
122+
#define _STRUCT_ARM_SME_ZA_STATE struct __darwin_arm_sme_za_state
123+
_STRUCT_ARM_SME_ZA_STATE
124+
{
125+
+ __aligned(4)
126+
char __za[4096];
127+
-} __attribute__((aligned(4)));
128+
+};
129+
130+
#define _STRUCT_ARM_SME2_STATE struct __darwin_arm_sme2_state
131+
_STRUCT_ARM_SME2_STATE
132+
{
133+
+ __aligned(4)
134+
char __zt0[64];
135+
-} __attribute__((aligned(4)));
136+
+};
137+
#else /* !__DARWIN_UNIX03 */
138+
#define _STRUCT_ARM_SME_STATE struct arm_sme_state
139+
_STRUCT_ARM_SME_STATE
140+
@@ -655,26 +679,30 @@
141+
#define _STRUCT_ARM_SVE_Z_STATE struct arm_sve_z_state
142+
_STRUCT_ARM_SVE_Z_STATE
143+
{
144+
+ __aligned(4)
145+
char z[16][256];
146+
-} __attribute__((aligned(4)));
147+
+};
148+
149+
#define _STRUCT_ARM_SVE_P_STATE struct arm_sve_p_state
150+
_STRUCT_ARM_SVE_P_STATE
151+
{
152+
+ __aligned(4)
153+
char p[16][256 / 8];
154+
-} __attribute__((aligned(4)));
155+
+};
156+
157+
#define _STRUCT_ARM_SME_ZA_STATE struct arm_sme_za_state
158+
_STRUCT_ARM_SME_ZA_STATE
159+
{
160+
+ __aligned(4)
161+
char za[4096];
162+
-} __attribute__((aligned(4)));
163+
+};
164+
165+
#define _STRUCT_ARM_SME2_STATE struct arm_sme2_state
166+
_STRUCT_ARM_SME2_STATE
167+
{
168+
+ __aligned(4)
169+
char zt0[64];
170+
-} __attribute__((aligned(4)));
171+
+};
172+
#endif /* __DARWIN_UNIX03 */
173+
174+
/*
175+
@@ -786,6 +814,8 @@
176+
};
177+
#endif /* !__DARWIN_UNIX03 */
178+
179+
+#undef __aligned
180+
+
181+
#endif /* defined (__arm__) || defined (__arm64__) */
182+
183+
#endif /* _MACH_ARM__STRUCTS_H_ */

0 commit comments

Comments
 (0)