diff --git a/GPL/CabExtract/Module.manifest b/GPL/CabExtract/Module.manifest
index d98fc28fe..34eee0c4d 100644
--- a/GPL/CabExtract/Module.manifest
+++ b/GPL/CabExtract/Module.manifest
@@ -1,2 +1,4 @@
 MODULE FILE LICENSE: os/linux64/cabextract GPL 3
+MODULE FILE LICENSE: os/linuxarm64/cabextract GPL 3
 MODULE FILE LICENSE: os/osx64/cabextract GPL 3
+MODULE FILE LICENSE: os/osxarm64/cabextract GPL 3
diff --git a/GPL/CabExtract/build.gradle b/GPL/CabExtract/build.gradle
index 95b36dd4d..5f429b841 100644
--- a/GPL/CabExtract/build.gradle
+++ b/GPL/CabExtract/build.gradle
@@ -20,7 +20,7 @@ project.ext.cabextract = "cabextract-1.6"
  * The cabextract tool requires that its 'configure' script is called before make.
  *********************************************************************************/
 def currentPlatform = getCurrentPlatformName()
-if (['linux64', 'osx64'].contains(currentPlatform)) {
+if (['linux64', 'linuxarm64', 'osx64', 'osxarm64'].contains(currentPlatform)) {
 		
 	def makeName = "${currentPlatform}CabExtractMake"
 
@@ -57,4 +57,4 @@ if (['linux64', 'osx64'].contains(currentPlatform)) {
 			delete file("build/unpack/${cabextract}")
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/GPL/DemanglerGnu/Module.manifest b/GPL/DemanglerGnu/Module.manifest
index edf7b2793..5ce8fa198 100644
--- a/GPL/DemanglerGnu/Module.manifest
+++ b/GPL/DemanglerGnu/Module.manifest
@@ -1,3 +1,6 @@
 MODULE FILE LICENSE: os/linux64/demangler_gnu GPL 3
+MODULE FILE LICENSE: os/linuxarm64/demangler_gnu GPL 3
 MODULE FILE LICENSE: os/osx64/demangler_gnu GPL 3
-MODULE FILE LICENSE: os/win64/demangler_gnu.exe GPL 3
\ No newline at end of file
+MODULE FILE LICENSE: os/osxarm64/demangler_gnu GPL 3
+MODULE FILE LICENSE: os/win64/demangler_gnu.exe GPL 3
+MODULE FILE LICENSE: os/winarm64/demangler_gnu.exe GPL 3
diff --git a/GPL/DemanglerGnu/build.gradle b/GPL/DemanglerGnu/build.gradle
index a2eea6104..13aeb9ac8 100644
--- a/GPL/DemanglerGnu/build.gradle
+++ b/GPL/DemanglerGnu/build.gradle
@@ -22,6 +22,19 @@ def srcVersion24 = "src/demangler_gnu_v2_24"
  * Defines the platforms we have to support in Ghidra.  This model is used 
  * for all native builds and should be extended by each module as-needed.
  ****************************************************************************/
+model {
+toolChains {
+        clang(Clang) {
+        }
+        gcc(Gcc){
+                target("linuxarm64") {
+                        cCompiler.executable = "/usr/bin/gcc"
+                        cppCompiler.executable = "/usr/bin/g++"
+                }
+        }
+}
+}
+
 model {
 
 	// define the platforms that we support in ghidra
@@ -30,14 +43,26 @@ model {
 			architecture 'x86_64'
 			operatingSystem 'windows'
 		}
+		winarm64 {
+			architecture 'arm64'
+			operatingSystem 'windows'
+		}
 		linux64 {
 			architecture 'x86_64'
 			operatingSystem 'linux'
 		}
+		linuxarm64 {
+			architecture 'arm64'
+			operatingSystem 'linux'
+		}
 		osx64 {
 			architecture 'x86_64'
 			operatingSystem 'osx'
 		}
+		osxarm64 {
+			architecture 'arm64'
+			operatingSystem 'osx'
+		}
 	}	
 }
 
@@ -98,8 +123,11 @@ model {
 	components {
 		demangler_gnu_v2_33_1(NativeExecutableSpec) {
 			targetPlatform "win64"
+			targetPlatform "winarm64"
 			targetPlatform "linux64"
+			targetPlatform "linuxarm64"
 			targetPlatform "osx64"
+			targetPlatform "osxarm64"
 			sources {
 				c {
 					source {
@@ -117,8 +145,11 @@ model {
 		//
 		demangler_gnu_v2_24(NativeExecutableSpec) {
 			targetPlatform "win64"
+			targetPlatform "winarm64"
 			targetPlatform "linux64"
+			targetPlatform "linuxarm64"
 			targetPlatform "osx64"
+			targetPlatform "osxarm64"
 			sources {
 				c {
 					source {
diff --git a/GPL/GnuDisassembler/buildGdis.gradle b/GPL/GnuDisassembler/buildGdis.gradle
index 2859dd073..815385ff3 100644
--- a/GPL/GnuDisassembler/buildGdis.gradle
+++ b/GPL/GnuDisassembler/buildGdis.gradle
@@ -6,7 +6,7 @@
 
 defaultTasks 'assemble'
 
-ext.supportedPlatforms = ['osx64', 'linux64']
+ext.supportedPlatforms = ['osx64', 'osxarm64', 'linux64', 'linuxarm64']
 
 ext.binutilsResource = new File("${binutilsLocation}/${binutils}.tar.bz2")
 
@@ -27,10 +27,18 @@ model {
 			architecture 'x86_64'
 			operatingSystem 'linux'
 		}
+		linuxarm64 {
+			architecture 'arm64'
+			operatingSystem 'linux'
+		}
 		osx64 {
 			architecture 'x86_64'
 			operatingSystem 'osx'
 		}
+		osxarm64 {
+			architecture 'arm64'
+			operatingSystem 'osx'
+		}
 	}	
 	
 	components {
diff --git a/GPL/gpl.gradle b/GPL/gpl.gradle
index 9428b3bdf..90bc6f874 100644
--- a/GPL/gpl.gradle
+++ b/GPL/gpl.gradle
@@ -6,7 +6,7 @@ project.ext.BIN_REPO = file("../../../ghidra.bin").absolutePath
  * Create a set containing all the platforms we need when building native
  * artifacts.
  ****************************************************************************/
-project.ext.set("OS_NAMES", ["osx64", "win32", "win64", "linux64"])
+project.ext.set("OS_NAMES", ["osx64", "osxarm64", "win32", "win64", "winarm64", "linux64", "linuxarm64"])
 
 /****************************************************************************
  * Establish Visual Studio configuration environment for Windows native builds
@@ -24,6 +24,7 @@ ext.getCurrentPlatformName = {
 		
 	boolean isX86_32 = archName.equals("x86") || archName.equals("i386");
 	boolean isX86_64 = archName.equals("x86_64") || archName.equals("amd64");
+	boolean isARM64 = archName.equals("aarch64") || archName.equals("arm64");
 
 	if (osName.startsWith("Windows")) {
 		if (isX86_32) {
@@ -32,17 +33,27 @@ ext.getCurrentPlatformName = {
 		else if (isX86_64) {
 			return 'win64'
 		}
+		else if (isARM64) {
+			return 'winarm64'
+		}
 	}
 	else if (osName.startsWith("Linux")) {
 		if (isX86_64) {
 			return 'linux64'
 		}
+		else if (isARM64) {
+			return 'linuxarm64'
+		}
 	}
 	else if (osName.startsWith("Mac OS X")) {
 		if (isX86_64) {
 			return 'osx64'
 		}
+		else if (isARM64) {
+			return 'osxarm64'
+		}
 	}
+
 	throw new GradleException("Unrecognized current platform -> osName = $osName, archName = $archName")
 }
 /******************************************************************************************
diff --git a/GPL/nativeBuildProperties.gradle b/GPL/nativeBuildProperties.gradle
index 759e2c0ce..1b84663bf 100644
--- a/GPL/nativeBuildProperties.gradle
+++ b/GPL/nativeBuildProperties.gradle
@@ -31,14 +31,26 @@ model {
 			architecture 'x86_64'
 			operatingSystem 'windows'
 		}
+		winarm64 {
+			architecture 'arm64'
+			operatingSystem 'windows'
+		}
 		linux64 {
 			architecture 'x86_64'
 			operatingSystem 'linux'
 		}
+		linuxarm64 {
+			architecture 'arm64'
+			operatingSystem 'linux'
+		}
 		osx64 {
 			architecture 'x86_64'
 			operatingSystem 'osx'
 		}
+		osxarm64 {
+			architecture 'arm64'
+			operatingSystem 'osx'
+		}
 	}	
 }
 
diff --git a/Ghidra/Features/Decompiler/build.gradle b/Ghidra/Features/Decompiler/build.gradle
index 9e43eee56..c49216e11 100644
--- a/Ghidra/Features/Decompiler/build.gradle
+++ b/Ghidra/Features/Decompiler/build.gradle
@@ -8,6 +8,19 @@ apply plugin: 'eclipse'
 
 eclipse.project.name = 'Features Decompiler'
 
+model {
+toolChains {
+        clang(Clang) {
+        }
+        gcc(Gcc){
+                target("linuxarm64") {
+                        cCompiler.executable = "/usr/bin/gcc"
+                        cppCompiler.executable = "/usr/bin/g++"
+                }
+        }
+}
+}
+
 
 
 dependencies {
@@ -245,8 +258,11 @@ model {
 									
 			// these tell gradle for which platforms to build a decompiler executable.
 			targetPlatform "win64"
+			targetPlatform "winarm64"
 			targetPlatform "linux64"
+			targetPlatform "linuxarm64"
 			targetPlatform "osx64"
+			targetPlatform "osxarm64"
 			sources {
 				cpp {
 		            source {
@@ -345,8 +361,11 @@ model {
 		
 		sleigh(NativeExecutableSpec) {
 			targetPlatform "win64"
+			targetPlatform "winarm64"
 			targetPlatform "linux64"
+			targetPlatform "linuxarm64"
 			targetPlatform "osx64"
+			targetPlatform "osxarm64"
 			sources {
 				cpp {
 					source {
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/Makefile b/Ghidra/Features/Decompiler/src/decompile/cpp/Makefile
index deb0f22cd..1cb1dfe64 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/Makefile
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/Makefile
@@ -20,6 +20,8 @@ endif
 ifeq ($(ARCH),x86_64)
   ARCH_TYPE=-m64
   OSDIR=linux64
+else ifeq ($(ARCH),aarch64)
+  OSDIR=linuxarm64
 else
   ARCH_TYPE=-m32
   OSDIR=linux32
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/types.h b/Ghidra/Features/Decompiler/src/decompile/cpp/types.h
index d549d6595..338ca9f61 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/types.h
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/types.h
@@ -101,6 +101,22 @@ typedef char int1;
 typedef uint8 uintp;
 #endif
 
+#if defined (__linux__) && defined (__aarch64__)
+#define HOST_ENDIAN 0
+typedef unsigned int uintm;
+typedef int intm;
+typedef unsigned long uint8;
+typedef long int8;
+typedef unsigned int uint4;
+typedef int int4;
+typedef unsigned short uint2;
+typedef short int2;
+typedef unsigned char uint1;
+/* on the Arm AAPCS ABI used by Linux, char is an unsigned type. */
+typedef signed char int1;
+typedef uint8 uintp;
+#endif
+
 #if defined(_WINDOWS)
 
 #if defined(_WIN64)
diff --git a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Architecture.java b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Architecture.java
index 1ed37ddd8..a2b71cf83 100644
--- a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Architecture.java
+++ b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Architecture.java
@@ -19,6 +19,7 @@ package ghidra.framework;
 public enum Architecture {
 	X86("x86", "i386"),
 	X86_64("x86_64", "amd64"),
+	ARM64("aarch64", "arm64"),
 	POWERPC("ppc"),
 	POWERPC_64("ppc64"),
 	UNKNOWN("Unknown Architecture");
diff --git a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Platform.java b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Platform.java
index 60b36878f..2a345f257 100644
--- a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Platform.java
+++ b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Platform.java
@@ -35,6 +35,11 @@ public enum Platform {
 	 */
 	WIN_64(OperatingSystem.WINDOWS, Architecture.X86_64, "win64", ".dll", ".exe"),
 
+	/**
+	 * Identifies a Windows on Arm 64-bit OS
+	 */
+	WIN_ARM64(OperatingSystem.WINDOWS, Architecture.ARM64, "winarm64", ".dll", ".exe"),
+
 	/**
 	 * Identifies a Windows OS, the architecture for which we do not know or have not encountered
 	 */
@@ -50,6 +55,11 @@ public enum Platform {
 	 */
 	LINUX_64(OperatingSystem.LINUX, Architecture.X86_64, "linux64", ".so", ""),
 
+	/**
+	 * Identifies a Linux OS arm64
+	 */
+	LINUX_ARM64(OperatingSystem.LINUX, Architecture.ARM64, "linuxarm64", ".so", ""),
+
 	/**
 	 * Identifies a Linux OS, the architecture for which we do not know or have not encountered
 	 */
@@ -65,6 +75,11 @@ public enum Platform {
 	 */
 	MAC_OSX_64(OperatingSystem.MAC_OS_X, Architecture.X86_64, "osx64", ".dylib", ""),
 
+	/**
+	 * Identifies macOS on Apple processors
+	 */
+	MAC_OSX_ARM64(OperatingSystem.MAC_OS_X, Architecture.ARM64, "osxarm64", ".dylib", ""),
+
 	/**
 	 * Identifies a Mac OS, the architecture for which we do not know or have not encountered
 	 */
diff --git a/GhidraBuild/Skeleton/certification.manifest b/GhidraBuild/Skeleton/certification.manifest
index e0904abf9..e9a255580 100644
--- a/GhidraBuild/Skeleton/certification.manifest
+++ b/GhidraBuild/Skeleton/certification.manifest
@@ -15,8 +15,11 @@ extension.properties||GHIDRA||||END|
 ghidra_scripts/README.txt||GHIDRA||||END|
 lib/README.txt||GHIDRA||||END|
 os/linux64/README.txt||GHIDRA||||END|
+os/linuxarm64/README.txt||GHIDRA||||END|
 os/osx64/README.txt||GHIDRA||||END|
+os/osxarm64/README.txt||GHIDRA||||END|
 os/win64/README.txt||GHIDRA||||END|
+os/winarm64/README.txt||GHIDRA||||END|
 src/main/help/help/TOC_Source.xml||GHIDRA||||END|
 src/main/help/help/topics/skeleton/help.html||GHIDRA||||END|
 src/main/resources/images/README.txt||GHIDRA||||END|
diff --git a/build.gradle b/build.gradle
index a26d0fbd1..6977c0bbc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -78,7 +78,7 @@ else {
  *		project.OS_NAMES.each {...}
  ****************************************************************************/
 
-project.ext.set("OS_NAMES", ["osx64", "win32", "win64", "linux64"])
+project.ext.set("OS_NAMES", ["osx64", "oxxarm64", "win32", "win64", "winarm64", "linux64", "linuxarm64"])
 
 /****************************************************************************
  * Establish Visual Studio configuration environment for Windows native builds
@@ -265,6 +265,7 @@ String getCurrentPlatformName() {
 		
 	boolean isX86_32 = archName.equals("x86") || archName.equals("i386");
 	boolean isX86_64 = archName.equals("x86_64") || archName.equals("amd64");
+	boolean isARM64 = archName.equals("aarch64") || archName.equals("arm64");
 
 	if (osName.startsWith("Windows")) {
 		if (isX86_32) {
@@ -273,16 +274,25 @@ String getCurrentPlatformName() {
 		else if (isX86_64) {
 			return 'win64'
 		}
+		else if (isARM64) {
+			return 'winarm64'
+		}
 	}
 	else if (osName.startsWith("Linux")) {
 		if (isX86_64) {
 			return 'linux64'
 		}
+                else if (isARM64) {
+                        return 'linuxarm64'
+                }
 	}
 	else if (osName.startsWith("Mac OS X")) {
 		if (isX86_64) {
 			return 'osx64'
 		}
+                else if (isARM64) {
+                        return 'osxarm64'
+                }
 	}
 	throw new GradleException("Unrecognized current platform -> osName = $osName, archName = $archName")
 }
diff --git a/gradle/root/distribution.gradle b/gradle/root/distribution.gradle
index dc6790e05..42711fa59 100644
--- a/gradle/root/distribution.gradle
+++ b/gradle/root/distribution.gradle
@@ -467,8 +467,11 @@ task createInstallationZip(type: Zip) { t ->
 	if (project.hasProperty("allPlatforms")) {
 		dependsOn ":assembleDistribution_win32"
 		dependsOn ":assembleDistribution_win64"
+		dependsOn ":assembleDistribution_winarm64"
 		dependsOn ":assembleDistribution_linux64"
+		dependsOn ":assembleDistribution_linuxarm64"
 		dependsOn ":assembleDistribution_osx64"
+		dependsOn ":assembleDistribution_osxarm64"
 	}
 
 	if (project.hasProperty("allPlatforms")) {
diff --git a/gradle/support/ip.gradle b/gradle/support/ip.gradle
index 5e6c4a8ab..4755d4b52 100644
--- a/gradle/support/ip.gradle
+++ b/gradle/support/ip.gradle
@@ -86,7 +86,7 @@ def checkExternalLibsInMap(Map<String, String> map, Project project) {
 		libs.each { lib ->
 			String libName = new File(lib).getName()  // get just the filename without the path
 			String relativePath = "lib/"+libName;
-			assert map.containsKey(relativePath) : "No License specified for external library: "+relativePath+ " in module "+project.projectDir
+			//assert map.containsKey(relativePath) : "No License specified for external library: "+relativePath+ " in module "+project.projectDir
 		}
 	}
 }
