163 lines
4.5 KiB
163 lines
4.5 KiB
/* |
|
build.h - compile-time build information |
|
Copyright (C) 2023 Alibek Omarov |
|
|
|
This program is free software: you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation, either version 3 of the License, or |
|
(at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
*/ |
|
#pragma once |
|
#ifndef BUILDENUMS_H |
|
#define BUILDENUMS_H |
|
|
|
#include "build.h" |
|
|
|
// This header defines the enumeration values that can be passed to Q_build* |
|
// functions and get current value through XASH_PLATFORM, XASH_ARCHITECTURE and |
|
// XASH_ARCHITECTURE_ABI defines |
|
|
|
//================================================================ |
|
// |
|
// OPERATING SYSTEM DEFINES |
|
// |
|
//================================================================ |
|
#define PLATFORM_WIN32 1 |
|
#define PLATFORM_ANDROID 2 |
|
#define PLATFORM_LINUX 3 |
|
#define PLATFORM_APPLE 4 |
|
#define PLATFORM_FREEBSD 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_LINUX_UNKNOWN 15 |
|
|
|
#if XASH_WIN32 |
|
#define XASH_PLATFORM PLATFORM_WIN32 |
|
#elif XASH_ANDROID |
|
#define XASH_PLATFORM PLATFORM_ANDROID |
|
#elif XASH_LINUX_UNKNOWN |
|
#define XASH_PLATFORM PLATFORM_LINUX_UNKNOWN |
|
#elif XASH_LINUX |
|
#define XASH_PLATFORM PLATFORM_LINUX |
|
#elif XASH_APPLE |
|
#define XASH_PLATFORM PLATFORM_APPLE |
|
#elif XASH_FREEBSD |
|
#define XASH_PLATFORM PLATFORM_FREEBSD |
|
#elif XASH_NETBSD |
|
#define XASH_PLATFORM PLATFORM_NETBSD |
|
#elif XASH_OPENBSD |
|
#define XASH_PLATFORM PLATFORM_OPENBSD |
|
#elif XASH_EMSCRIPTEN |
|
#define XASH_PLATFORM PLATFORM_EMSCRIPTEN |
|
#elif XASH_DOS4GW |
|
#define XASH_PLATFORM PLATFORM_DOS4GW |
|
#elif XASH_HAIKU |
|
#define XASH_PLATFORM PLATFORM_HAIKU |
|
#elif XASH_SERENITY |
|
#define XASH_PLATFORM PLATFORM_SERENITY |
|
#elif XASH_IRIX |
|
#define XASH_PLATFORM PLATFORM_IRIX |
|
#elif XASH_NSWITCH |
|
#define XASH_PLATFORM PLATFORM_NSWITCH |
|
#elif XASH_PSVITA |
|
#define XASH_PLATFORM PLATFORM_PSVITA |
|
#else |
|
#error |
|
#endif |
|
|
|
//================================================================ |
|
// |
|
// CPU ARCHITECTURE DEFINES |
|
// |
|
//================================================================ |
|
#define ARCHITECTURE_AMD64 1 |
|
#define ARCHITECTURE_X86 2 |
|
#define ARCHITECTURE_ARM 3 |
|
#define ARCHITECTURE_MIPS 4 |
|
#define ARCHITECTURE_JS 6 |
|
#define ARCHITECTURE_E2K 7 |
|
#define ARCHITECTURE_RISCV 8 |
|
|
|
#if XASH_AMD64 |
|
#define XASH_ARCHITECTURE ARCHITECTURE_AMD64 |
|
#elif XASH_X86 |
|
#define XASH_ARCHITECTURE ARCHITECTURE_X86 |
|
#elif XASH_ARM |
|
#define XASH_ARCHITECTURE ARCHITECTURE_ARM |
|
#elif XASH_MIPS |
|
#define XASH_ARCHITECTURE ARCHITECTURE_MIPS |
|
#elif XASH_JS |
|
#define XASH_ARCHITECTURE ARCHITECTURE_JS |
|
#elif XASH_E2K |
|
#define XASH_ARCHITECTURE ARCHITECTURE_E2K |
|
#elif XASH_RISCV |
|
#define XASH_ARCHITECTURE ARCHITECTURE_RISCV |
|
#else |
|
#error |
|
#endif |
|
|
|
//================================================================ |
|
// |
|
// ENDIANNESS DEFINES |
|
// |
|
//================================================================ |
|
#define ENDIANNESS_LITTLE 1 |
|
#define ENDIANNESS_BIG 2 |
|
|
|
#if XASH_LITTLE_ENDIAN |
|
#define XASH_ENDIANNESS ENDIANNESS_LITTLE |
|
#elif XASH_BIG_ENDIAN |
|
#define XASH_ENDIANNESS ENDIANNESS_BIG |
|
#else |
|
#error |
|
#endif |
|
|
|
//================================================================ |
|
// |
|
// APPLICATION BINARY INTERFACE |
|
// |
|
//================================================================ |
|
#define BIT( n ) ( 1U << ( n )) |
|
|
|
#define ARCHITECTURE_ARM_VER_MASK ( BIT( 5 ) - 1 ) |
|
#define ARCHITECTURE_ARM_VER_SHIFT 0 |
|
#define ARCHITECTURE_ARM_HARDFP BIT( 5 ) |
|
|
|
#define ARCHITECTURE_RISCV_FP_SOFT 0 |
|
#define ARCHITECTURE_RISCV_FP_SINGLE 1 |
|
#define ARCHITECTURE_RISCV_FP_DOUBLE 2 |
|
|
|
#if XASH_ARCHITECTURE == ARCHITECTURE_ARM |
|
#if XASH_ARM_HARDFP |
|
#define XASH_ARCHITECTURE_ABI ( ARCHITECTURE_ARM_HARDFP | XASH_ARM ) |
|
#else |
|
#define XASH_ARCHITECTURE_ABI ( XASH_ARM ) |
|
#endif |
|
#elif XASH_ARCHITECTURE == ARCHITECTURE_RISCV |
|
#if XASH_RISCV_SOFTFP |
|
#define XASH_ARCHITECTURE_ABI ARCHITECTURE_RISCV_FP_SOFT |
|
#elif XASH_RISCV_SINGLEFP |
|
#define XASH_ARCHITECTURE_ABI ARCHITECTURE_RISCV_FP_SINGLE |
|
#elif XASH_RISCV_DOUBLEFP |
|
#define XASH_ARCHITECTURE_ABI ARCHITECTURE_RISCV_FP_DOUBLE |
|
#else |
|
#error |
|
#endif |
|
#else |
|
#define XASH_ARCHITECTURE_ABI 0 // unused |
|
#endif |
|
|
|
|
|
#endif // BUILDENUMS_H
|
|
|