diff --git a/configure.ac b/configure.ac
index f55b6d3f4cefae206434e2c93307a6ba027987e6..1d46bd98c3e7a41c9c5c07eb649e743bf8f85cee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -145,6 +145,11 @@ AM_CONDITIONAL(HAVE_WIN64,   test "${HAVE_WIN64}" = "1")
 AM_CONDITIONAL(HAVE_OSX,     test "${HAVE_OSX}" = "1")
 AM_CONDITIONAL(HAVE_IOS,     test "${HAVE_IOS}" = "1")
 
+AS_IF([test "${HAVE_OSX}" = "1"],
+  [DAEMONCFLAGS+=" -arch $ARCH"
+   DAEMONCXXFLAGS+=" -arch $ARCH"]
+  [])
+
 AC_DEFINE([MSGPACK_DISABLE_LEGACY_NIL], [1], [msgpack])
 
 dnl FIXME this should be deduced automatically
@@ -664,6 +669,9 @@ AC_CONFIG_FILES([Makefile \
 
 dnl Transfer the Automake variables set here to Makefile.in.
 echo DAEMONCPPFLAGS=$DAEMONCPPFLAGS
+CXXFLAGS="$DAEMONCXXFLAGS"
+OBJCXX="$CXX $DAEMONCXXFLAGS"
+OBJCXXFLAG="$CXX $DAEMONCXXFLAGS"
 AC_SUBST([AM_CPPFLAGS], [$DAEMONCPPFLAGS])
 AC_SUBST([AM_CFLAGS],   [$DAEMONCFLAGS])
 AC_SUBST([AM_CXXFLAGS], [$DAEMONCXXFLAGS])
diff --git a/contrib/src/ffmpeg/rules.mak b/contrib/src/ffmpeg/rules.mak
index f15e82e8b6f27a9d56652752466a81f13b4c0afc..7fbab1491e23e1490d94bf6548fb0f2540721b23 100644
--- a/contrib/src/ffmpeg/rules.mak
+++ b/contrib/src/ffmpeg/rules.mak
@@ -281,6 +281,9 @@ FFMPEGCONF += \
 	--enable-encoder=h264_videotoolbox \
 	--enable-encoder=hevc_videotoolbox \
 	--disable-securetransport
+ifdef HAVE_CROSS_COMPILE
+FFMPEGCONF += --enable-cross-compile
+endif
 endif
 
 ifdef HAVE_IOS
@@ -299,11 +302,13 @@ endif
 
 ifndef HAVE_IOS
 ifndef HAVE_ANDROID
+ifndef HAVE_MACOSX
 ifdef HAVE_CROSS_COMPILE
 FFMPEGCONF += --cross-prefix=$(HOST)-
 endif
 endif
 endif
+endif
 
 # x86 stuff
 ifeq ($(ARCH),i386)
diff --git a/contrib/src/main.mak b/contrib/src/main.mak
index 70261aaf217927cf71c6e4114f6e8974a66f1e98..a5ef36e898543354d66758c33f45cc64aa0c51c0 100644
--- a/contrib/src/main.mak
+++ b/contrib/src/main.mak
@@ -141,9 +141,9 @@ AR=xcrun ar
 LD=xcrun ld
 STRIP=xcrun strip
 RANLIB=xcrun ranlib
-EXTRA_COMMON := -isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MIN_OSX_VERSION) -DMACOSX_DEPLOYMENT_TARGET=$(MIN_OSX_VERSION)
-EXTRA_CXXFLAGS += -stdlib=libc++
-EXTRA_LDFLAGS += -Wl,-syslibroot,$(MACOSX_SDK)
+EXTRA_COMMON := -arch $(ARCH) -isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MIN_OSX_VERSION) -DMACOSX_DEPLOYMENT_TARGET=$(MIN_OSX_VERSION)
+EXTRA_CXXFLAGS += -arch $(ARCH) -stdlib=libc++
+EXTRA_LDFLAGS += -arch $(ARCH) -Wl,-syslibroot,$(MACOSX_SDK)
 EXTRA_COMMON += -m64
 XCODE_FLAGS = -sdk macosx$(OSX_VERSION) -arch $(ARCH)
 endif
@@ -308,6 +308,10 @@ ifdef HAVE_IOS
 HOSTCONF += --enable-static --disable-shared
 endif
 
+ifdef HAVE_MACOSX
+HOSTCONF += --enable-static --disable-shared
+endif
+
 ifdef HAVE_WIN32
 HOSTCONF += --enable-static --disable-shared --without-pic
 PIC :=
diff --git a/contrib/src/pjproject/rules.mak b/contrib/src/pjproject/rules.mak
index 88e718ea814c6203a0b1d283a7013605a9926ce6..4806a7b5a2c58a44d5a939de9799da16a773ac78 100644
--- a/contrib/src/pjproject/rules.mak
+++ b/contrib/src/pjproject/rules.mak
@@ -59,6 +59,8 @@ endif
 .pjproject: pjproject
 ifdef HAVE_IOS
 	cd $< && ARCH="-arch $(ARCH)" IPHONESDK=$(IOS_SDK) $(HOSTVARS) EXCLUDE_APP=1 ./configure-iphone $(HOSTCONF) $(PJPROJECT_OPTIONS)
+else ifdef HAVE_MACOSX
+	cd $< && ARCH="-arch $(ARCH)" $(HOSTVARS) EXCLUDE_APP=1 ./aconfigure $(HOSTCONF) $(PJPROJECT_OPTIONS)
 else
 	cd $< && $(HOSTVARS) EXCLUDE_APP=1 ./aconfigure $(HOSTCONF) $(PJPROJECT_OPTIONS)
 endif
diff --git a/contrib/src/secp256k1/rules.mak b/contrib/src/secp256k1/rules.mak
index 115afb78a65841211967150f38cb6975f83fb871..2b16ced7324798c6c3184b9f06dbd1f4c588d994 100644
--- a/contrib/src/secp256k1/rules.mak
+++ b/contrib/src/secp256k1/rules.mak
@@ -21,8 +21,16 @@ secp256k1: secp256k1-$(SECP256K1_VERSION).tar.gz
 ifdef HAVE_IOS
 SECP256K1_CFLAGS := -USECP256K1_BUILD $(CFLAGS)
 else
+ifdef HAVE_MACOSX
+ifeq ($(ARCH),arm64)
+SECP256K1_CFLAGS := -USECP256K1_BUILD $(CFLAGS)
+else
+SECP256K1_CFLAGS := -USECP256K1_BUILD
+endif
+else
 SECP256K1_CFLAGS := -USECP256K1_BUILD
 endif
+endif
 
 .secp256k1: secp256k1 .sum-secp256k1
 	$(RECONF)
diff --git a/contrib/src/x264/rules.mak b/contrib/src/x264/rules.mak
index 3d8f80edd1c142e055892827a332f01779a53416..e207a000325fc6484111aa49c8399b3448239926 100644
--- a/contrib/src/x264/rules.mak
+++ b/contrib/src/x264/rules.mak
@@ -22,11 +22,13 @@ X264CONF += --enable-win32thread
 endif
 ifndef HAVE_IOS
 ifndef HAVE_ANDROID
+ifndef HAVE_MACOSX
 ifdef HAVE_CROSS_COMPILE
 X264CONF += --cross-prefix="$(CROSS_COMPILE)"
 endif
 endif
 endif
+endif
 
 # android x86_64 has reloc errors related to assembly optimizations
 ifdef HAVE_ANDROID
diff --git a/src/Makefile.am b/src/Makefile.am
index 8d322d8443e2c660a88c52b88df015943b7e2439..ada230cc7ebfc6bc89e8e6617d761f8618243478 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,9 +1,5 @@
 include $(top_srcdir)/globals.mk
 
-if HAVE_OSX
-AM_OBJCXXFLAGS=-std=c++17
-endif
-
 noinst_LTLIBRARIES=
 noinst_HEADERS=
 nobase_include_HEADERS=
@@ -47,6 +43,7 @@ libjami_la_LIBADD += \
 	$(LIBSSL_LIBS) \
 	$(LIBCRYPTO_LIBS) \
 	$(ARCHIVE_LIBS) \
+        $(ARCHIVE_LIBS) \
 	$(ZLIB_LIBS)
 
 if ENABLE_PLUGIN
diff --git a/src/media/audio/coreaudio/Makefile.am b/src/media/audio/coreaudio/Makefile.am
index e959e903ef6b437f1888421704337d711c2d4b7b..b8cd92cfd2efc5a3bba7b76a8db161fa0b644ce4 100644
--- a/src/media/audio/coreaudio/Makefile.am
+++ b/src/media/audio/coreaudio/Makefile.am
@@ -20,6 +20,4 @@ libcoreaudiolayer_la_CXXFLAGS = \
 	-I$(top_srcdir)/src \
 	$(AM_CXXFLAGS)
 
-libcoreaudiolayer_la_OBJCXXFLAGS = -std=c++17
-
 libaudio_la_LIBADD += libcoreaudiolayer.la