Files
funnygame/fpc/public/target.h
2026-01-10 01:38:06 +02:00

92 lines
2.0 KiB
C

//================= Copyright kotofyt, All rights reserved ==================//
// Purpose: Target manager for compilers.
//===========================================================================//
#ifndef TARGET_T
#define TARGET_T
#include "tier0/commandline.h"
#include "tier1/utlstring.h"
enum ETargetKernel
{
TARGET_KERNEL_UNDEFINED,
TARGET_KERNEL_UNKNOWN = 1,
TARGET_KERNEL_WINDOWS_DEVICES = 0x100,
TARGET_KERNEL_WINDOWS,
TARGET_KERNEL_POSIX = 0x10000,
TARGET_KERNEL_LINUX_DEVICES = TARGET_KERNEL_POSIX | 0x1000,
TARGET_KERNEL_UNKNOWN_LINUX,
TARGET_KERNEL_LINUX = TARGET_KERNEL_UNKNOWN_LINUX,
TARGET_KERNEL_ALPINE_LINUX,
TARGET_KERNEL_PC_LINUX,
TARGET_KERNEL_ANDROID,
TARGET_KERNEL_APPLE_DEVICES = TARGET_KERNEL_POSIX | 0x2000,
TARGET_KERNEL_DARWIN,
TARGET_KERNEL_IOS,
TARGET_KERNEL_WEB_DEVICES = 0x400,
TARGET_KERNEL_WASI,
TARGET_KERNEL_EMSCRIPTEN,
};
enum ETargetCPU
{
TARGET_CPU_UNDEFINED,
TARGET_CPU_80386,
TARGET_CPU_80486,
TARGET_CPU_80586,
TARGET_CPU_80686,
TARGET_CPU_AMD64,
TARGET_CPU_AARCH64,
TARGET_CPU_WASM32,
};
enum ETargetABI
{
TARGET_ABI_UNDEFINED,
TARGET_ABI_DEFAULT,
TARGET_ABI_GNU,
TARGET_ABI_MUSL,
TARGET_ABI_MSVC,
};
enum ETargetOptimization
{
TARGET_DEBUG,
TARGET_RELEASE_SPEED,
TARGET_RELEASE_SIZE
};
struct Target_t
{
ETargetKernel kernel;
ETargetCPU cpu;
ETargetABI abi;
ETargetOptimization optimization;
const char *szSysroot = CommandLine()->ParamValue("-sysroot");
CUtlString GetTriplet();
const char *GetExecutableFileFormat();
const char *GetStaticLibraryFileFormat();
const char *GetDynamicLibraryFileFormat();
static Target_t HostTarget();
static Target_t DefaultTarget();
static ETargetCPU CPUFromString( const char *szName );
static ETargetKernel KernelFromString( const char *szName );
static ETargetABI ABIFromString( const char *szName );
};
enum EShaderTarget
{
SHADER_TARGET_VULKAN_SPIRV,
SHADER_TARGET_OPENGL_SPIRV,
SHADER_TARGET_GLSL,
SHADER_TARGET_HLSL,
SHADER_TARGET_MSL,
};
#endif