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 )