diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4444c1db38bf34b8edf55d5413a374f1ad18969a..8b013445c7c484fabc4aa0fb03048fd6010eedf0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -51,3 +51,15 @@ build_macos_x86_64:
   artifacts:
     paths:
       - build/src/dynare-preprocessor
+
+build_macos_arm64:
+  stage: build
+  tags:
+    - macOS
+  script:
+    - export PATH="/opt/homebrew/bin:$PATH"
+    - arch -arm64 meson setup -D buildtype=release --native-file scripts/homebrew-native-arm64.ini build
+    - arch -arm64 meson compile -C build -v
+  artifacts:
+    paths:
+      - build/src/dynare-preprocessor
diff --git a/scripts/homebrew-native-arm64.ini b/scripts/homebrew-native-arm64.ini
new file mode 100644
index 0000000000000000000000000000000000000000..cc188a106c1afb77cc2640e445e9c398ad4fbda3
--- /dev/null
+++ b/scripts/homebrew-native-arm64.ini
@@ -0,0 +1,10 @@
+# Meson native file for compiling under Homebrew / arm64
+
+[binaries]
+cpp = '/opt/homebrew/bin/g++-13'
+flex = '/opt/homebrew/opt/flex/bin/flex'
+bison = '/opt/homebrew/opt/bison/bin/bison'
+
+[built-in options]
+# XCode 15 (on Ventura and Sonoma) has a linker issue, see https://github.com/mesonbuild/meson/issues/12282, workaround is to use ld_classic
+cpp_link_args = [ '-Wl,-ld_classic' ]
\ No newline at end of file
diff --git a/scripts/homebrew-native-x86_64.ini b/scripts/homebrew-native-x86_64.ini
index d256a0dc425ab54928ee774fde9231aa2562a316..1b56abe3ac400d3ea8bfadc9f05a8d14f41add16 100644
--- a/scripts/homebrew-native-x86_64.ini
+++ b/scripts/homebrew-native-x86_64.ini
@@ -4,3 +4,7 @@
 cpp = '/usr/local/bin/g++-13'
 flex = '/usr/local/opt/flex/bin/flex'
 bison = '/usr/local/opt/bison/bin/bison'
+
+[built-in options]
+# XCode 15 (on Ventura and Sonoma) has a linker issue, see https://github.com/mesonbuild/meson/issues/12282, workaround is to use ld_classic
+cpp_link_args = [ '-Wl,-ld_classic' ]
\ No newline at end of file