diff --git a/devel/dub/Portfile b/devel/dub/Portfile
index 92a82d98721..5a880b8ab51 100644
--- a/devel/dub/Portfile
+++ b/devel/dub/Portfile
@@ -46,12 +46,13 @@ post-patch {
     reinplace "s|__MACPORTS_PREFIX__|${prefix}|g" source/dub/dub.d
 }
 if {!${universal_possible} || ![variant_isset universal]} {
-    if { ${build_arch} eq "x86_64" || ${build_arch} eq "ppc64" } {
+    if {${build_arch} in [list arm64 ppc64 x86_64]} {
         build.env-append "DMD=${prefix}/bin/dmd -m64"
     } else {
         build.env-append "DMD=${prefix}/bin/dmd -m32"
     }
 } else {
+    lappend merger_build_env(arm64)  "DMD=${prefix}/bin/dmd -m64"
     lappend merger_build_env(x86_64) "DMD=${prefix}/bin/dmd -m64"
     lappend merger_build_env(i386)   "DMD=${prefix}/bin/dmd -m32"
     lappend merger_build_env(ppc64)  "DMD=${prefix}/bin/dmd -m64"
diff --git a/lang/dmd-doc/Portfile b/lang/dmd-doc/Portfile
index 8388406b314..a38cc151ed0 100644
--- a/lang/dmd-doc/Portfile
+++ b/lang/dmd-doc/Portfile
@@ -28,7 +28,7 @@ depends_build       port:phobos
 
 use_configure       no
 
-if {${build_arch} eq "x86_64"} {
+if {${build_arch} in [list arm64 ppc64 x86_64]} {
     set model 64
 } else {
     set model 32
diff --git a/lang/dmd-tools/Portfile b/lang/dmd-tools/Portfile
index 5a10691e7d4..08230717dd8 100644
--- a/lang/dmd-tools/Portfile
+++ b/lang/dmd-tools/Portfile
@@ -44,7 +44,7 @@ if {![info exists universal_possible]} {
     set universal_possible [expr {${os.universal_supported} && [llength ${configure.universal_archs}] >= 2}]
 }
 if {!${universal_possible} || ![variant_isset universal]} {
-    if { ${build_arch} eq "x86_64" || ${build_arch} eq "ppc64" } {
+    if {${build_arch} in [list arm64 ppc64 x86_64]} {
         build.args-append    MODEL=64
         destroot.args-append MODEL=64
     } else {
@@ -52,11 +52,13 @@ if {!${universal_possible} || ![variant_isset universal]} {
         destroot.args-append MODEL=32
     }
 } else {
+    lappend merger_build_args(arm64)     MODEL=64
     lappend merger_build_args(x86_64)    MODEL=64
     lappend merger_build_args(i386)      MODEL=32
     lappend merger_build_args(ppc64)     MODEL=64
     lappend merger_build_args(ppc)       MODEL=32
 
+    lappend merger_destroot_args(arm64)  MODEL=64
     lappend merger_destroot_args(x86_64) MODEL=64
     lappend merger_destroot_args(i386)   MODEL=32
     lappend merger_destroot_args(ppc64)  MODEL=64
diff --git a/lang/dmd/Portfile b/lang/dmd/Portfile
index 665c829ddd6..2eac0a12919 100644
--- a/lang/dmd/Portfile
+++ b/lang/dmd/Portfile
@@ -51,7 +51,7 @@ if {![info exists universal_possible]} {
     set universal_possible [expr {${os.universal_supported} && [llength ${configure.universal_archs}] >= 2}]
 }
 if {!${universal_possible} || ![variant_isset universal]} {
-    if { ${build_arch} eq "x86_64" || ${build_arch} eq "ppc64" } {
+    if {${build_arch} in [list arm64 ppc64 x86_64]} {
         build.args-append MODEL=64
         destroot.args-append MODEL=64
     } else {
@@ -59,10 +59,12 @@ if {!${universal_possible} || ![variant_isset universal]} {
         destroot.args-append MODEL=32
     }
 } else {
+    lappend merger_build_args(arm64)  MODEL=64
     lappend merger_build_args(x86_64) MODEL=64
     lappend merger_build_args(i386)   MODEL=32
     lappend merger_build_args(ppc64)  MODEL=64
     lappend merger_build_args(ppc)    MODEL=32
+    lappend merger_destroot_args(arm64)  MODEL=64
     lappend merger_destroot_args(x86_64) MODEL=64
     lappend merger_destroot_args(i386)   MODEL=32
     lappend merger_destroot_args(ppc64)  MODEL=64
diff --git a/lang/druntime/Portfile b/lang/druntime/Portfile
index 964b64d1198..a62c2af1802 100644
--- a/lang/druntime/Portfile
+++ b/lang/druntime/Portfile
@@ -39,12 +39,13 @@ if {![info exists universal_possible]} {
     set universal_possible [expr {${os.universal_supported} && [llength ${configure.universal_archs}] >= 2}]
 }
 if {!${universal_possible} || ![variant_isset universal]} {
-    if { ${build_arch} eq "x86_64" || ${build_arch} eq "ppc64" } {
+    if {${build_arch} in [list arm64 ppc64 x86_64]} {
         build.args-append MODEL=64
     } else {
         build.args-append MODEL=32
     }
 } else {
+    lappend merger_build_args(arm64)  MODEL=64
     lappend merger_build_args(x86_64) MODEL=64
     lappend merger_build_args(i386)   MODEL=32
     lappend merger_build_args(ppc64)  MODEL=64
@@ -62,5 +63,4 @@ destroot {
     file copy ${worksrcpath}/benchmark ${destroot}${prefix}/share/${name}
 }
 
-
 github.livecheck.regex  {([^"-]+)}
diff --git a/lang/phobos/Portfile b/lang/phobos/Portfile
index c9a1c5f5432..c632870cad2 100644
--- a/lang/phobos/Portfile
+++ b/lang/phobos/Portfile
@@ -59,12 +59,13 @@ if {![info exists universal_possible]} {
     set universal_possible [expr {${os.universal_supported} && [llength ${configure.universal_archs}] >= 2}]
 }
 if {!(${universal_possible} && [variant_isset universal])} {
-    if { ${build_arch} eq "x86_64" || ${build_arch} eq "ppc64" } {
+    if {${build_arch} in [list arm64 ppc64 x86_64]} {
         build.args-append MODEL=64 DRUNTIME=${workpath}/druntime/${build_arch}/libdruntime.a
     } else {
         build.args-append MODEL=32 DRUNTIME=${workpath}/druntime/${build_arch}/libdruntime.a
     }
 } else {
+    lappend merger_build_args(arm64)  MODEL=64 DRUNTIME=${workpath}/druntime/arm64/libdruntime.a
     lappend merger_build_args(x86_64) MODEL=64 DRUNTIME=${workpath}/druntime/x86_64/libdruntime.a
     lappend merger_build_args(i386)   MODEL=32 DRUNTIME=${workpath}/druntime/i386/libdruntime.a
     lappend merger_build_args(ppc64)  MODEL=64 DRUNTIME=${workpath}/druntime/ppc64/libdruntime.a
