diff --git a/include/build.h b/include/build.h
index 8b6a732..de0c093 100644
--- a/include/build.h
+++ b/include/build.h
@@ -91,10 +91,11 @@ Then you can use another oneliner to query all variables:
#undef XASH_PSVITA
#undef XASH_WASI
#undef XASH_WASM
+#undef XASH_SPARC
//================================================================
//
-// PLATFORM DETECTION CODE
+// PLATFORM DETECTION CODE
//
//================================================================
#if defined _WIN32
@@ -159,7 +160,7 @@ Then you can use another oneliner to query all variables:
//================================================================
//
-// ENDIANNESS DEFINES
+// ENDIANNESS DEFINES
//
//================================================================
@@ -195,7 +196,7 @@ Then you can use another oneliner to query all variables:
//================================================================
//
-// CPU ARCHITECTURE DEFINES
+// CPU ARCHITECTURE DEFINES
//
//================================================================
#if defined __x86_64__ || defined _M_X64
@@ -265,6 +266,11 @@ Then you can use another oneliner to query all variables:
#define XASH_64BIT 1
#endif
#define XASH_WASM 1
+#elif defined __sparc__
+ #define XASH_SPARC 1
+ #if defined __arch64__
+ #define XASH_64BIT 1
+ #endif
#else
#error "Place your architecture name here! If this is a mistake, try to fix conditions above and report a bug"
#endif
diff --git a/include/buildenums.h b/include/buildenums.h
index 494cee8..d1eee95 100644
--- a/include/buildenums.h
+++ b/include/buildenums.h
@@ -38,27 +38,27 @@ For more information, please refer to
//================================================================
//
-// OPERATING SYSTEM DEFINES
+// OPERATING SYSTEM DEFINES
//
//================================================================
-#define PLATFORM_WIN32 1
-#define PLATFORM_LINUX 2
-#define PLATFORM_FREEBSD 3
-#define PLATFORM_ANDROID 4
-#define PLATFORM_APPLE 5
-#define PLATFORM_NETBSD 6
-#define PLATFORM_OPENBSD 7
+#define PLATFORM_WIN32 1
+#define PLATFORM_LINUX 2
+#define PLATFORM_FREEBSD 3
+#define PLATFORM_ANDROID 4
+#define PLATFORM_APPLE 5
+#define PLATFORM_NETBSD 6
+#define PLATFORM_OPENBSD 7
#define PLATFORM_EMSCRIPTEN 8
-#define PLATFORM_DOS4GW 9
-#define PLATFORM_HAIKU 10
-#define PLATFORM_SERENITY 11
-#define PLATFORM_IRIX 12
-#define PLATFORM_NSWITCH 13
-#define PLATFORM_PSVITA 14
-#define PLATFORM_WASI 15
-#define PLATFORM_SUNOS 16
-#define PLATFORM_HURD 17
-#define PLATFORM_PSP 18
+#define PLATFORM_DOS4GW 9
+#define PLATFORM_HAIKU 10
+#define PLATFORM_SERENITY 11
+#define PLATFORM_IRIX 12
+#define PLATFORM_NSWITCH 13
+#define PLATFORM_PSVITA 14
+#define PLATFORM_WASI 15
+#define PLATFORM_SUNOS 16
+#define PLATFORM_HURD 17
+#define PLATFORM_PSP 18
#if XASH_WIN32
#define XASH_PLATFORM PLATFORM_WIN32
@@ -102,18 +102,19 @@ For more information, please refer to
//================================================================
//
-// CPU ARCHITECTURE DEFINES
+// CPU ARCHITECTURE DEFINES
//
//================================================================
-#define ARCHITECTURE_X86 1
-#define ARCHITECTURE_AMD64 2
-#define ARCHITECTURE_ARM 3
-#define ARCHITECTURE_MIPS 4
-#define ARCHITECTURE_JS 6
-#define ARCHITECTURE_E2K 7
-#define ARCHITECTURE_RISCV 8
-#define ARCHITECTURE_PPC 9
-#define ARCHITECTURE_WASM 10
+#define ARCHITECTURE_X86 1
+#define ARCHITECTURE_AMD64 2
+#define ARCHITECTURE_ARM 3
+#define ARCHITECTURE_MIPS 4
+#define ARCHITECTURE_JS 6
+#define ARCHITECTURE_E2K 7
+#define ARCHITECTURE_RISCV 8
+#define ARCHITECTURE_PPC 9
+#define ARCHITECTURE_WASM 10
+#define ARCHITECTURE_SPARC 11
#if XASH_AMD64
#define XASH_ARCHITECTURE ARCHITECTURE_AMD64
@@ -133,17 +134,19 @@ For more information, please refer to
#define XASH_ARCHITECTURE ARCHITECTURE_PPC
#elif XASH_WASM
#define XASH_ARCHITECTURE ARCHITECTURE_WASM
+#elif XASH_SPARC
+ #define XASH_ARCHITECTURE ARCHITECTURE_SPARC
#else
#error
#endif
//================================================================
//
-// ENDIANNESS DEFINES
+// ENDIANNESS DEFINES
//
//================================================================
#define ENDIANNESS_LITTLE 1
-#define ENDIANNESS_BIG 2
+#define ENDIANNESS_BIG 2
#if XASH_LITTLE_ENDIAN
#define XASH_ENDIANNESS ENDIANNESS_LITTLE
@@ -155,17 +158,17 @@ For more information, please refer to
//================================================================
//
-// APPLICATION BINARY INTERFACE
+// APPLICATION BINARY INTERFACE
//
//================================================================
-#define BIT( n ) ( 1U << ( n ))
+#define BIT( n ) ( 1U << ( n ))
#define FBitSet( bit_vector, bits ) (( bit_vector ) & ( bits ))
-#define ARCH_ARM_VER_MASK ( BIT( 5 ) - 1 )
-#define ARCH_ARM_VER_SHIFT 0
-#define ARCH_ARM_HARDFP BIT( 5 )
+#define ARCH_ARM_VER_MASK ( BIT( 5 ) - 1 )
+#define ARCH_ARM_VER_SHIFT 0
+#define ARCH_ARM_HARDFP BIT( 5 )
-#define ARCH_RISCV_FP_SOFT 0
+#define ARCH_RISCV_FP_SOFT 0
#define ARCH_RISCV_FP_SINGLE 1
#define ARCH_RISCV_FP_DOUBLE 2
diff --git a/include/library_suffix.h b/include/library_suffix.h
index 81fb091..a009582 100644
--- a/include/library_suffix.h
+++ b/include/library_suffix.h
@@ -68,10 +68,10 @@ const char *Q_buildarch( void ) RETURNS_NONNULL;
// __.
// where
// - prefix: widely accepted DLL prefix. Currently only adds "lib" on Android
-// - name: DLL name, without Intel suffix (like _i?86). You can strip it with COM_StripIntelSuffix
-// - os: Q_buildos return value, omitted for win32, linux and osx
-// - arch: Q_buildarch return value, omitted for 32-bit x86 on win32, linux and osx
-// - ext: widely accepted DLL extension
+// - name: DLL name, without Intel suffix (like _i?86). You can strip it with COM_StripIntelSuffix
+// - os: Q_buildos return value, omitted for win32, linux and osx
+// - arch: Q_buildarch return value, omitted for 32-bit x86 on win32, linux and osx
+// - ext: widely accepted DLL extension
// return value: number of bytes written, excluding null terminator, or -1 on overflow
int COM_GenerateCommonLibraryName( const char *name, char *out, size_t size );
diff --git a/src/library_suffix.c b/src/library_suffix.c
index 753f801..df832d6 100644
--- a/src/library_suffix.c
+++ b/src/library_suffix.c
@@ -165,6 +165,8 @@ const char *Q_ArchitectureStringByID( int arch, unsigned int abi, int endianness
break;
case ARCHITECTURE_WASM:
return is64 ? "wasm64" : "wasm32";
+ case ARCHITECTURE_SPARC:
+ return is64 ? "sparc64" : "sparc";
}
return is64 ?
diff --git a/tests/test_build.c b/tests/test_build.c
index 7ea630c..fe1ea25 100644
--- a/tests/test_build.c
+++ b/tests/test_build.c
@@ -87,6 +87,10 @@ static struct
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_SINGLE, -1, 0, "riscv32f" },
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_DOUBLE, -1, 1, "riscv64d" },
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_DOUBLE, -1, 0, "riscv32d" },
+
+// SPARC
+{ ARCHITECTURE_SPARC, 0, ENDIANNESS_BIG, 0, "sparc" },
+{ ARCHITECTURE_SPARC, 0, ENDIANNESS_BIG, 1, "sparc64" }
};
static int TestPlatformString( void )