so more like...
--- share/mk/bsd.own.mk.orig
+++ share/mk/
bsd.own.mk@@ -786,6 +786,12 @@
CC_WNO_STRINGOP_TRUNCATION=${${ACTIVE_CC} == "gcc" && ${HAVE_GCC:U0} >= 8:? -Wno-stringop-truncation :}
+CC_WNO_DEPRECATED_NON_PROTOTYPE=${${ACTIVE_CC} == "clang" :? -Wno-error=deprecated-non-prototype :}
+CC_WNO_STRICT_PROTOTYPES=${${ACTIVE_CC} == "clang" :? -Wno-error=strict-prototypes :}
+CC_WNO_UNUSED_BUT_SET_VARIABLE=${${ACTIVE_CC} == "clang" :? -Wno-error=unused-but-set-variable :}
+CC_WNO_CAST_FUNCTION_TYPE_MISMATCH=${${ACTIVE_CC} == "clang" :? -Wno-error=cast-function-type-mismatch :}
+CC_WNO_UNTERMINATED_STRING_INITIALIZATION=${${ACTIVE_CC} == "clang" :? -Wno-error=unterminated-string-initialization :}
+
# relative relocs are only supported in gnu ld for ppc64 and x86
--- share/mk/bsd.sys.mk.orig
+++ share/mk/
bsd.sys.mk@@ -171,6 +171,19 @@
CWARNFLAGS+=${CWARNFLAGS.${ACTIVE_CC}}
+# Clang warning suppressions for -Werror compatibility.
+# Silently ignore flags unknown to older Clang versions (the in-tree
+# Clang 13 does not know warnings added in Clang 14-23).
+.if ${ACTIVE_CC} == "clang"
+CWARNFLAGS.clang+=-Wno-unknown-warning-option
+CWARNFLAGS.clang+=${CC_WNO_DEPRECATED_NON_PROTOTYPE}
+CWARNFLAGS.clang+=${CC_WNO_STRICT_PROTOTYPES}
+CWARNFLAGS.clang+=${CC_WNO_UNUSED_BUT_SET_VARIABLE}
+CWARNFLAGS.clang+=${CC_WNO_CAST_FUNCTION_TYPE_MISMATCH}
+CWARNFLAGS.clang+=${CC_WNO_UNTERMINATED_STRING_INITIALIZATION}
+.endif
+
CPPFLAGS+=${AUDIT:D-D__AUDIT__}
Tested: kernel + userland build clean with HAVE_LLVM=yes, Clang 23.