Skip to content

Commit 00ff554

Browse files
authored
General aarch64 improvements & Apple Silicon support (#1255)
1 parent c8ffff8 commit 00ff554

File tree

18 files changed

+405
-32
lines changed

18 files changed

+405
-32
lines changed

.github/workflows/build.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ jobs:
177177

178178
build-macos:
179179
runs-on: macos-14
180+
strategy:
181+
matrix:
182+
arch: [x86_64, arm64]
180183
steps:
181184
- name: "Checkout repo"
182185
uses: actions/checkout@v4
@@ -236,7 +239,7 @@ jobs:
236239
cd build
237240
cmake .. ${{ env.BUILD_FLAGS }} \
238241
-DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} \
239-
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
242+
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \
240243
-DMACOS_BUNDLE=ON \
241244
-G Ninja
242245
@@ -259,5 +262,5 @@ jobs:
259262
- name: Upload artifact
260263
uses: actions/upload-artifact@v4
261264
with:
262-
name: cemu-bin-macos-x64
265+
name: cemu-bin-macos-${{ matrix.arch }}
263266
path: ./bin/Cemu.dmg

CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,12 @@ endif()
222222

223223
add_subdirectory("dependencies/ih264d" EXCLUDE_FROM_ALL)
224224

225-
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(aarch64)|(AARCH64)")
225+
if (CMAKE_OSX_ARCHITECTURES)
226+
set(CEMU_ARCHITECTURE ${CMAKE_OSX_ARCHITECTURES})
227+
else()
228+
set(CEMU_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
229+
endif()
230+
if(CEMU_ARCHITECTURE MATCHES "(aarch64)|(AARCH64)|(arm64)|(ARM64)")
226231
add_subdirectory("dependencies/xbyak_aarch64" EXCLUDE_FROM_ALL)
227232
endif()
228233

@@ -231,4 +236,4 @@ if (NOT ZArchive_FOUND)
231236
add_subdirectory("dependencies/ZArchive" EXCLUDE_FROM_ALL)
232237
endif()
233238

234-
add_subdirectory(src)
239+
add_subdirectory(src)

dependencies/ih264d/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ target_sources(ih264d PRIVATE
183183
"decoder/arm/ih264d_function_selector.c"
184184
)
185185
target_compile_options(ih264d PRIVATE -DARMV8)
186+
if(APPLE)
187+
target_sources(ih264d PRIVATE "common/armv8/macos_arm_symbol_aliases.s")
188+
endif()
186189
else()
187190
message(FATAL_ERROR "ih264d unknown architecture: ${IH264D_ARCHITECTURE}")
188191
endif()

dependencies/ih264d/common/armv8/ih264_intra_pred_chroma_av8.s

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,13 @@ ih264_intra_pred_chroma_8x8_mode_plane_av8:
429429
rev64 v7.4h, v2.4h
430430
ld1 {v3.2s}, [x10]
431431
sub x5, x3, #8
432+
#ifdef __APPLE__
433+
adrp x12, _ih264_gai1_intrapred_chroma_plane_coeffs1@GOTPAGE
434+
ldr x12, [x12, _ih264_gai1_intrapred_chroma_plane_coeffs1@GOTPAGEOFF]
435+
#else
432436
adrp x12, :got:ih264_gai1_intrapred_chroma_plane_coeffs1
433437
ldr x12, [x12, #:got_lo12:ih264_gai1_intrapred_chroma_plane_coeffs1]
438+
#endif
434439
usubl v10.8h, v5.8b, v1.8b
435440
ld1 {v8.8b, v9.8b}, [x12] // Load multiplication factors 1 to 8 into D3
436441
mov v8.d[1], v9.d[0]
@@ -484,10 +489,13 @@ ih264_intra_pred_chroma_8x8_mode_plane_av8:
484489
zip1 v1.8h, v0.8h, v2.8h
485490
zip2 v2.8h, v0.8h, v2.8h
486491
mov v0.16b, v1.16b
487-
492+
#ifdef __APPLE__
493+
adrp x12, _ih264_gai1_intrapred_chroma_plane_coeffs2@GOTPAGE
494+
ldr x12, [x12, _ih264_gai1_intrapred_chroma_plane_coeffs2@GOTPAGEOFF]
495+
#else
488496
adrp x12, :got:ih264_gai1_intrapred_chroma_plane_coeffs2
489497
ldr x12, [x12, #:got_lo12:ih264_gai1_intrapred_chroma_plane_coeffs2]
490-
498+
#endif
491499
ld1 {v8.2s, v9.2s}, [x12]
492500
mov v8.d[1], v9.d[0]
493501
mov v10.16b, v8.16b

dependencies/ih264d/common/armv8/ih264_intra_pred_luma_16x16_av8.s

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,10 +431,13 @@ ih264_intra_pred_luma_16x16_mode_plane_av8:
431431
mov x10, x1 //top_left
432432
mov x4, #-1
433433
ld1 {v2.2s}, [x1], x8
434-
434+
#ifdef __APPLE__
435+
adrp x7, _ih264_gai1_intrapred_luma_plane_coeffs@GOTPAGE
436+
ldr x7, [x7, _ih264_gai1_intrapred_luma_plane_coeffs@GOTPAGEOFF]
437+
#else
435438
adrp x7, :got:ih264_gai1_intrapred_luma_plane_coeffs
436439
ldr x7, [x7, #:got_lo12:ih264_gai1_intrapred_luma_plane_coeffs]
437-
440+
#endif
438441
ld1 {v0.2s}, [x1]
439442
rev64 v2.8b, v2.8b
440443
ld1 {v6.2s, v7.2s}, [x7]

dependencies/ih264d/common/armv8/ih264_intra_pred_luma_8x8_av8.s

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1029,9 +1029,13 @@ ih264_intra_pred_luma_8x8_mode_horz_u_av8:
10291029
mov v3.d[0], v2.d[1]
10301030
ext v4.16b, v2.16b , v2.16b , #1
10311031
mov v5.d[0], v4.d[1]
1032-
1032+
#ifdef __APPLE__
1033+
adrp x12, _ih264_gai1_intrapred_luma_8x8_horz_u@GOTPAGE
1034+
ldr x12, [x12, _ih264_gai1_intrapred_luma_8x8_horz_u@GOTPAGEOFF]
1035+
#else
10331036
adrp x12, :got:ih264_gai1_intrapred_luma_8x8_horz_u
10341037
ldr x12, [x12, #:got_lo12:ih264_gai1_intrapred_luma_8x8_horz_u]
1038+
#endif
10351039
uaddl v20.8h, v0.8b, v2.8b
10361040
uaddl v22.8h, v1.8b, v3.8b
10371041
uaddl v24.8h, v2.8b, v4.8b

dependencies/ih264d/common/armv8/ih264_weighted_bi_pred_av8.s

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,22 @@ ih264_weighted_bi_pred_luma_av8:
142142
sxtw x4, w4
143143
sxtw x5, w5
144144
stp x19, x20, [sp, #-16]!
145+
#ifndef __APPLE__
145146
ldr w8, [sp, #80] //Load wt2 in w8
146147
ldr w9, [sp, #88] //Load ofst1 in w9
147-
add w6, w6, #1 //w6 = log_WD + 1
148-
neg w10, w6 //w10 = -(log_WD + 1)
149-
dup v0.8h, w10 //Q0 = -(log_WD + 1) (32-bit)
150148
ldr w10, [sp, #96] //Load ofst2 in w10
151149
ldr w11, [sp, #104] //Load ht in w11
152150
ldr w12, [sp, #112] //Load wd in w12
151+
#else
152+
ldr w8, [sp, #80] //Load wt2 in w8
153+
ldr w9, [sp, #84] //Load ofst1 in w9
154+
ldr w10, [sp, #88] //Load ofst2 in w10
155+
ldr w11, [sp, #92] //Load ht in w11
156+
ldr w12, [sp, #96] //Load wd in w12
157+
#endif
158+
add w6, w6, #1 //w6 = log_WD + 1
159+
neg w10, w6 //w10 = -(log_WD + 1)
160+
dup v0.8h, w10 //Q0 = -(log_WD + 1) (32-bit)
153161
add w9, w9, #1 //w9 = ofst1 + 1
154162
add w9, w9, w10 //w9 = ofst1 + ofst2 + 1
155163
mov v2.s[0], w7
@@ -424,17 +432,24 @@ ih264_weighted_bi_pred_chroma_av8:
424432
sxtw x5, w5
425433
stp x19, x20, [sp, #-16]!
426434

427-
435+
#ifndef __APPLE__
428436
ldr w8, [sp, #80] //Load wt2 in w8
437+
ldr w9, [sp, #88] //Load ofst1 in w9
438+
ldr w10, [sp, #96] //Load ofst2 in w10
439+
ldr w11, [sp, #104] //Load ht in w11
440+
ldr w12, [sp, #112] //Load wd in w12
441+
#else
442+
ldr w8, [sp, #80] //Load wt2 in w8
443+
ldr w9, [sp, #84] //Load ofst1 in w9
444+
ldr w10, [sp, #88] //Load ofst2 in w10
445+
ldr w11, [sp, #92] //Load ht in w11
446+
ldr w12, [sp, #96] //Load wd in w12
447+
#endif
429448
dup v4.4s, w8 //Q2 = (wt2_u, wt2_v) (32-bit)
430449
dup v2.4s, w7 //Q1 = (wt1_u, wt1_v) (32-bit)
431450
add w6, w6, #1 //w6 = log_WD + 1
432-
ldr w9, [sp, #88] //Load ofst1 in w9
433-
ldr w10, [sp, #96] //Load ofst2 in w10
434451
neg w20, w6 //w20 = -(log_WD + 1)
435452
dup v0.8h, w20 //Q0 = -(log_WD + 1) (16-bit)
436-
ldr w11, [sp, #104] //Load ht in x11
437-
ldr w12, [sp, #112] //Load wd in x12
438453
dup v20.8h, w9 //0ffset1
439454
dup v21.8h, w10 //0ffset2
440455
srhadd v6.8b, v20.8b, v21.8b
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
// macOS clang compilers append preceding underscores to function names, this is to prevent
2+
// mismatches with the assembly function names and the C functions as defined in the header.
3+
4+
.global _ih264_deblk_chroma_horz_bs4_av8
5+
_ih264_deblk_chroma_horz_bs4_av8 = ih264_deblk_chroma_horz_bs4_av8
6+
7+
.global _ih264_deblk_chroma_horz_bslt4_av8
8+
_ih264_deblk_chroma_horz_bslt4_av8 = ih264_deblk_chroma_horz_bslt4_av8
9+
10+
.global _ih264_deblk_chroma_vert_bs4_av8
11+
_ih264_deblk_chroma_vert_bs4_av8 = ih264_deblk_chroma_vert_bs4_av8
12+
13+
.global _ih264_deblk_chroma_vert_bslt4_av8
14+
_ih264_deblk_chroma_vert_bslt4_av8 = ih264_deblk_chroma_vert_bslt4_av8
15+
16+
.global _ih264_deblk_luma_horz_bs4_av8
17+
_ih264_deblk_luma_horz_bs4_av8 = ih264_deblk_luma_horz_bs4_av8
18+
19+
.global _ih264_deblk_luma_horz_bslt4_av8
20+
_ih264_deblk_luma_horz_bslt4_av8 = ih264_deblk_luma_horz_bslt4_av8
21+
22+
.global _ih264_deblk_luma_vert_bs4_av8
23+
_ih264_deblk_luma_vert_bs4_av8 = ih264_deblk_luma_vert_bs4_av8
24+
25+
.global _ih264_deblk_luma_vert_bslt4_av8
26+
_ih264_deblk_luma_vert_bslt4_av8 = ih264_deblk_luma_vert_bslt4_av8
27+
28+
.global _ih264_default_weighted_pred_chroma_av8
29+
_ih264_default_weighted_pred_chroma_av8 = ih264_default_weighted_pred_chroma_av8
30+
31+
.global _ih264_default_weighted_pred_luma_av8
32+
_ih264_default_weighted_pred_luma_av8 = ih264_default_weighted_pred_luma_av8
33+
34+
.global _ih264_ihadamard_scaling_4x4_av8
35+
_ih264_ihadamard_scaling_4x4_av8 = ih264_ihadamard_scaling_4x4_av8
36+
37+
.global _ih264_inter_pred_chroma_av8
38+
_ih264_inter_pred_chroma_av8 = ih264_inter_pred_chroma_av8
39+
40+
.global _ih264_inter_pred_luma_copy_av8
41+
_ih264_inter_pred_luma_copy_av8 = ih264_inter_pred_luma_copy_av8
42+
43+
.global _ih264_inter_pred_luma_horz_av8
44+
_ih264_inter_pred_luma_horz_av8 = ih264_inter_pred_luma_horz_av8
45+
46+
.global _ih264_inter_pred_luma_horz_hpel_vert_hpel_av8
47+
_ih264_inter_pred_luma_horz_hpel_vert_hpel_av8 = ih264_inter_pred_luma_horz_hpel_vert_hpel_av8
48+
49+
.global _ih264_inter_pred_luma_horz_hpel_vert_qpel_av8
50+
_ih264_inter_pred_luma_horz_hpel_vert_qpel_av8 = ih264_inter_pred_luma_horz_hpel_vert_qpel_av8
51+
52+
.global _ih264_inter_pred_luma_horz_qpel_av8
53+
_ih264_inter_pred_luma_horz_qpel_av8 = ih264_inter_pred_luma_horz_qpel_av8
54+
55+
.global _ih264_inter_pred_luma_horz_qpel_vert_hpel_av8
56+
_ih264_inter_pred_luma_horz_qpel_vert_hpel_av8 = ih264_inter_pred_luma_horz_qpel_vert_hpel_av8
57+
58+
.global _ih264_inter_pred_luma_horz_qpel_vert_qpel_av8
59+
_ih264_inter_pred_luma_horz_qpel_vert_qpel_av8 = ih264_inter_pred_luma_horz_qpel_vert_qpel_av8
60+
61+
.global _ih264_inter_pred_luma_vert_av8
62+
_ih264_inter_pred_luma_vert_av8 = ih264_inter_pred_luma_vert_av8
63+
64+
.global _ih264_inter_pred_luma_vert_qpel_av8
65+
_ih264_inter_pred_luma_vert_qpel_av8 = ih264_inter_pred_luma_vert_qpel_av8
66+
67+
.global _ih264_intra_pred_chroma_8x8_mode_horz_av8
68+
_ih264_intra_pred_chroma_8x8_mode_horz_av8 = ih264_intra_pred_chroma_8x8_mode_horz_av8
69+
70+
.global _ih264_intra_pred_chroma_8x8_mode_plane_av8
71+
_ih264_intra_pred_chroma_8x8_mode_plane_av8 = ih264_intra_pred_chroma_8x8_mode_plane_av8
72+
73+
.global _ih264_intra_pred_chroma_8x8_mode_vert_av8
74+
_ih264_intra_pred_chroma_8x8_mode_vert_av8 = ih264_intra_pred_chroma_8x8_mode_vert_av8
75+
76+
.global _ih264_intra_pred_luma_16x16_mode_dc_av8
77+
_ih264_intra_pred_luma_16x16_mode_dc_av8 = ih264_intra_pred_luma_16x16_mode_dc_av8
78+
79+
.global _ih264_intra_pred_luma_16x16_mode_horz_av8
80+
_ih264_intra_pred_luma_16x16_mode_horz_av8 = ih264_intra_pred_luma_16x16_mode_horz_av8
81+
82+
.global _ih264_intra_pred_luma_16x16_mode_plane_av8
83+
_ih264_intra_pred_luma_16x16_mode_plane_av8 = ih264_intra_pred_luma_16x16_mode_plane_av8
84+
85+
.global _ih264_intra_pred_luma_16x16_mode_vert_av8
86+
_ih264_intra_pred_luma_16x16_mode_vert_av8 = ih264_intra_pred_luma_16x16_mode_vert_av8
87+
88+
.global _ih264_intra_pred_luma_4x4_mode_dc_av8
89+
_ih264_intra_pred_luma_4x4_mode_dc_av8 = ih264_intra_pred_luma_4x4_mode_dc_av8
90+
91+
.global _ih264_intra_pred_luma_4x4_mode_diag_dl_av8
92+
_ih264_intra_pred_luma_4x4_mode_diag_dl_av8 = ih264_intra_pred_luma_4x4_mode_diag_dl_av8
93+
94+
.global _ih264_intra_pred_luma_4x4_mode_diag_dr_av8
95+
_ih264_intra_pred_luma_4x4_mode_diag_dr_av8 = ih264_intra_pred_luma_4x4_mode_diag_dr_av8
96+
97+
.global _ih264_intra_pred_luma_4x4_mode_horz_av8
98+
_ih264_intra_pred_luma_4x4_mode_horz_av8 = ih264_intra_pred_luma_4x4_mode_horz_av8
99+
100+
.global _ih264_intra_pred_luma_4x4_mode_horz_d_av8
101+
_ih264_intra_pred_luma_4x4_mode_horz_d_av8 = ih264_intra_pred_luma_4x4_mode_horz_d_av8
102+
103+
.global _ih264_intra_pred_luma_4x4_mode_horz_u_av8
104+
_ih264_intra_pred_luma_4x4_mode_horz_u_av8 = ih264_intra_pred_luma_4x4_mode_horz_u_av8
105+
106+
.global _ih264_intra_pred_luma_4x4_mode_vert_av8
107+
_ih264_intra_pred_luma_4x4_mode_vert_av8 = ih264_intra_pred_luma_4x4_mode_vert_av8
108+
109+
.global _ih264_intra_pred_luma_4x4_mode_vert_l_av8
110+
_ih264_intra_pred_luma_4x4_mode_vert_l_av8 = ih264_intra_pred_luma_4x4_mode_vert_l_av8
111+
112+
.global _ih264_intra_pred_luma_4x4_mode_vert_r_av8
113+
_ih264_intra_pred_luma_4x4_mode_vert_r_av8 = ih264_intra_pred_luma_4x4_mode_vert_r_av8
114+
115+
.global _ih264_intra_pred_luma_8x8_mode_dc_av8
116+
_ih264_intra_pred_luma_8x8_mode_dc_av8 = ih264_intra_pred_luma_8x8_mode_dc_av8
117+
118+
.global _ih264_intra_pred_luma_8x8_mode_diag_dl_av8
119+
_ih264_intra_pred_luma_8x8_mode_diag_dl_av8 = ih264_intra_pred_luma_8x8_mode_diag_dl_av8
120+
121+
.global _ih264_intra_pred_luma_8x8_mode_diag_dr_av8
122+
_ih264_intra_pred_luma_8x8_mode_diag_dr_av8 = ih264_intra_pred_luma_8x8_mode_diag_dr_av8
123+
124+
.global _ih264_intra_pred_luma_8x8_mode_horz_av8
125+
_ih264_intra_pred_luma_8x8_mode_horz_av8 = ih264_intra_pred_luma_8x8_mode_horz_av8
126+
127+
.global _ih264_intra_pred_luma_8x8_mode_horz_d_av8
128+
_ih264_intra_pred_luma_8x8_mode_horz_d_av8 = ih264_intra_pred_luma_8x8_mode_horz_d_av8
129+
130+
.global _ih264_intra_pred_luma_8x8_mode_horz_u_av8
131+
_ih264_intra_pred_luma_8x8_mode_horz_u_av8 = ih264_intra_pred_luma_8x8_mode_horz_u_av8
132+
133+
.global _ih264_intra_pred_luma_8x8_mode_vert_av8
134+
_ih264_intra_pred_luma_8x8_mode_vert_av8 = ih264_intra_pred_luma_8x8_mode_vert_av8
135+
136+
.global _ih264_intra_pred_luma_8x8_mode_vert_l_av8
137+
_ih264_intra_pred_luma_8x8_mode_vert_l_av8 = ih264_intra_pred_luma_8x8_mode_vert_l_av8
138+
139+
.global _ih264_intra_pred_luma_8x8_mode_vert_r_av8
140+
_ih264_intra_pred_luma_8x8_mode_vert_r_av8 = ih264_intra_pred_luma_8x8_mode_vert_r_av8
141+
142+
.global _ih264_iquant_itrans_recon_4x4_av8
143+
_ih264_iquant_itrans_recon_4x4_av8 = ih264_iquant_itrans_recon_4x4_av8
144+
145+
.global _ih264_iquant_itrans_recon_4x4_dc_av8
146+
_ih264_iquant_itrans_recon_4x4_dc_av8 = ih264_iquant_itrans_recon_4x4_dc_av8
147+
148+
.global _ih264_iquant_itrans_recon_8x8_av8
149+
_ih264_iquant_itrans_recon_8x8_av8 = ih264_iquant_itrans_recon_8x8_av8
150+
151+
.global _ih264_iquant_itrans_recon_8x8_dc_av8
152+
_ih264_iquant_itrans_recon_8x8_dc_av8 = ih264_iquant_itrans_recon_8x8_dc_av8
153+
154+
.global _ih264_iquant_itrans_recon_chroma_4x4_av8
155+
_ih264_iquant_itrans_recon_chroma_4x4_av8 = ih264_iquant_itrans_recon_chroma_4x4_av8
156+
157+
.global _ih264_iquant_itrans_recon_chroma_4x4_dc_av8
158+
_ih264_iquant_itrans_recon_chroma_4x4_dc_av8 = ih264_iquant_itrans_recon_chroma_4x4_dc_av8
159+
160+
.global _ih264_pad_left_chroma_av8
161+
_ih264_pad_left_chroma_av8 = ih264_pad_left_chroma_av8
162+
163+
.global _ih264_pad_left_luma_av8
164+
_ih264_pad_left_luma_av8 = ih264_pad_left_luma_av8
165+
166+
.global _ih264_pad_right_chroma_av8
167+
_ih264_pad_right_chroma_av8 = ih264_pad_right_chroma_av8
168+
169+
.global _ih264_pad_right_luma_av8
170+
_ih264_pad_right_luma_av8 = ih264_pad_right_luma_av8
171+
172+
.global _ih264_pad_top_av8
173+
_ih264_pad_top_av8 = ih264_pad_top_av8
174+
175+
.global _ih264_weighted_bi_pred_chroma_av8
176+
_ih264_weighted_bi_pred_chroma_av8 = ih264_weighted_bi_pred_chroma_av8
177+
178+
.global _ih264_weighted_bi_pred_luma_av8
179+
_ih264_weighted_bi_pred_luma_av8 = ih264_weighted_bi_pred_luma_av8
180+
181+
.global _ih264_weighted_pred_chroma_av8
182+
_ih264_weighted_pred_chroma_av8 = ih264_weighted_pred_chroma_av8
183+
184+
.global _ih264_weighted_pred_luma_av8
185+
_ih264_weighted_pred_luma_av8 = ih264_weighted_pred_luma_av8

src/CMakeLists.txt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,21 @@ if (MACOS_BUNDLE)
101101
endforeach(folder)
102102

103103
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
104-
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/debug/lib/libusb-1.0.0.dylib")
104+
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/${VCPKG_TARGET_TRIPLET}/debug/lib/libusb-1.0.0.dylib")
105105
else()
106-
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/lib/libusb-1.0.0.dylib")
106+
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/${VCPKG_TARGET_TRIPLET}/lib/libusb-1.0.0.dylib")
107107
endif()
108108

109+
if (EXISTS "/usr/local/lib/libMoltenVK.dylib")
110+
set(MOLTENVK_PATH "/usr/local/lib/libMoltenVK.dylib")
111+
elseif (EXISTS "/opt/homebrew/lib/libMoltenVK.dylib")
112+
set(MOLTENVK_PATH "/opt/homebrew/lib/libMoltenVK.dylib")
113+
else()
114+
message(FATAL_ERROR "failed to find libMoltenVK.dylib")
115+
endif ()
116+
109117
add_custom_command (TARGET CemuBin POST_BUILD
110-
COMMAND ${CMAKE_COMMAND} ARGS -E copy "/usr/local/lib/libMoltenVK.dylib" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libMoltenVK.dylib"
118+
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${MOLTENVK_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libMoltenVK.dylib"
111119
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${LIBUSB_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib"
112120
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_SOURCE_DIR}/src/resource/update.sh" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/update.sh"
113121
COMMAND bash -c "install_name_tool -add_rpath @executable_path/../Frameworks ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}"

src/Cafe/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ if(APPLE)
537537
target_sources(CemuCafe PRIVATE "HW/Latte/Renderer/Vulkan/CocoaSurface.mm")
538538
endif()
539539

540-
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(aarch64)|(AARCH64)")
540+
if(CEMU_ARCHITECTURE MATCHES "(aarch64)|(AARCH64)|(arm64)|(ARM64)")
541541
target_sources(CemuCafe PRIVATE
542542
HW/Espresso/Recompiler/BackendAArch64/BackendAArch64.cpp
543543
HW/Espresso/Recompiler/BackendAArch64/BackendAArch64.h

0 commit comments

Comments
 (0)