Legacy:UnGnuG.H - Unreal Wiki

# Legacy:UnGnuG.H

### From Unreal Wiki, The Unreal Engine Documentation Site

See Native Coding On Linux for information on how to use this headerfile.

    /*=============================================================================
            UnGnuG.h: Unreal definitions for Gnu G++. Unfinished. Unsupported.
            Copyright 1997-1999 Epic Games, Inc. All Rights Reserved.
    =============================================================================*/

    /*----------------------------------------------------------------------------
            Platform compiler definitions.
    ----------------------------------------------------------------------------*/

    #ifdef __LINUX_X86__
            #define __UNIX__  1
            #define __LINUX__ 1
            #define __INTEL__ 1
            #define __INTEL_BYTE_ORDER__ 1
            #undef ASM
            #undef ASM3DNOW
            #undef ASMKNI
            #define ASMLINUX 1
    #else
            #error Unsupported platform.
    #endif

    // Stack control.
    #include <sys/wait.h>
    #include <signal.h>
    #include <setjmp.h>
    class __Context
    {
    public:
            __Context() { Last = Env; }
            ~__Context() { Env = Last; }
            static void StaticInit();
            static jmp_buf Env;

    protected:
            static void HandleSignal( int Sig );
            static struct sigaction Act_SIGHUP;
            static struct sigaction Act_SIGQUIT;
            static struct sigaction Act_SIGILL;
            static struct sigaction Act_SIGTRAP;
            static struct sigaction Act_SIGIOT;
            static struct sigaction Act_SIGBUS;
            static struct sigaction Act_SIGFPE;
            static struct sigaction Act_SIGSEGV;
            static struct sigaction Act_SIGTERM;
            jmp_buf Last;
    };

    /*----------------------------------------------------------------------------
            Platform specifics types and defines.
    ----------------------------------------------------------------------------*/

    // Undo any Windows defines.
    #undef BYTE
    #undef WORD
    #undef DWORD
    #undef INT
    #undef FLOAT
    #undef MAXBYTE
    #undef MAXWORD
    #undef MAXDWORD
    #undef MAXINT
    #undef VOID
    #undef CDECL

    // Make sure HANDLE is defined.
    #define HANDLE DWORD
    #define HINSTANCE DWORD

    // Sizes.
    enum {DEFAULT_ALIGNMENT = 8 }; // Default boundary to align memory allocations on.
    enum {CACHE_LINE_SIZE   = 32}; // Cache line size.
    #define GCC_PACK(n) __attribute__((packed,aligned(n)))

    // Optimization macros
    #define DISABLE_OPTIMIZATION
    #define ENABLE_OPTIMIZATION

    // Function type macros.
    #define DLL_IMPORT
    #define DLL_EXPORT                     extern "C"
    #define DLL_EXPORT_CLASS
    #define VARARGS
    #define CDECL
    #define STDCALL
    #define FORCEINLINE /* Force code to be inline */
    #define ZEROARRAY 0 /* Zero-length arrays in structs */
    #define __cdecl

    // Variable arguments.
    #define GET_VARARGS(msg,len,fmt)    \
    { \
            va_list ArgPtr; \
            va_start( ArgPtr, fmt );      \
            vsprintf( msg, fmt, ArgPtr ); \
            va_end( ArgPtr );     \
    }

    #define GET_VARARGS_RESULT(msg,len,fmt,result)      \
    { \
            va_list ArgPtr; \
            va_start( ArgPtr, fmt );      \
            result = vsprintf( msg, fmt, ArgPtr );        \
            va_end( ArgPtr );     \
    }

    // Compiler name.
    #define COMPILER "Compiled with GNU g++ ("__VERSION__")"

    // Unsigned base types.
    typedef unsigned char           BYTE;          // 8-bit  unsigned.
    typedef unsigned short          _WORD;          // 16-bit unsigned.
    typedef unsigned int           DWORD;          // 32-bit unsigned.
    typedef unsigned long long      QWORD;          // 64-bit unsigned.

    // Signed base types.
    typedef signed char                     SBYTE;          // 8-bit  signed.
    typedef signed short            SWORD;          // 16-bit signed.
    typedef signed int             INT;           // 32-bit signed.
    typedef signed long long        SQWORD;         // 64-bit signed.

    // Character types.
    typedef char                        ANSICHAR;   // An ANSI character.
    typedef unsigned short      UNICHAR;    // A unicode character.
    typedef unsigned char           ANSICHARU;      // An ANSI character.
    typedef unsigned short      UNICHARU;   // A unicode character.

    // Other base types.
    typedef signed int                     UBOOL;          // Boolean 0 (false) or 1 (true).
    typedef float                          FLOAT;         // 32-bit IEEE floating point.
    typedef double                          DOUBLE;         // 64-bit IEEE double.
    typedef unsigned int        SIZE_T;     // Corresponds to C SIZE_T.

    // Bitfield type.
    typedef unsigned int           BITFIELD;       // For bitfields.

    typedef unsigned int size_t;

    // Make sure characters are unsigned.
    #ifdef __CHAR_UNSIGNED__
            #error "Bad compiler option: Characters must be signed"
    #endif

    // Strings.
    #if __UNIX__
    #define LINE_TERMINATOR TEXT("\n")
    #define PATH_SEPARATOR TEXT("/")
    #define DLLEXT TEXT(".so")
    #else
    #define LINE_TERMINATOR TEXT("\r\n")
    #define PATH_SEPARATOR TEXT("\\")
    #define DLLEXT TEXT(".dll")
    #endif

    // NULL.
    #undef NULL
    #define NULL 0

    // Package implementation.
    #define IMPLEMENT_PACKAGE_PLATFORM(pkgname) \
            extern "C" {HINSTANCE hInstance;} \
            BYTE GLoaded##pkgname;

    // Platform support options.
    #define PLATFORM_NEEDS_ARRAY_NEW 1
    #define FORCE_ANSI_LOG           0

    // OS unicode function calling.
    #define TCHAR_CALL_OS(funcW,funcA) (funcA)
    #define TCHAR_TO_ANSI(str) str
    #define ANSI_TO_TCHAR(str) str

    // !! Fixme: This is a workaround.
    #define GCC_OPT_INLINE

    // Memory
    #define appAlloca(size) alloca((size+7)&~7)

    extern CORE_API UBOOL GTimestamp;
    CORE_API extern FLOAT GSecondsPerCycle;

    //
    // Round a floating point number to an integer.
    // Note that (int+.5) is rounded to (int+1).
    //
    #define DEFINED_appRound 1
    inline INT appRound( FLOAT F )
    {
            return (INT)(F);
    }

    //
    // Converts to integer equal to or less than.
    //
    #define DEFINED_appFloor 1
    inline INT appFloor( FLOAT F )
    {
            static FLOAT Half=0.5;
            return (INT)(F - Half);
    }

    //
    // CPU cycles, related to GSecondsPerCycle.
    //
    #define DEFINED_appCycles 1
    inline DWORD appCycles()
    {
            if( GTimestamp )
            {
                    DWORD r;
                    asm("rdtsc" : "=a" (r) : "d" (r));
                    return r;
            }
    }

    //
    // Memory copy.
    //
    #define DEFINED_appMemcpy 1
    inline void appMemcpy( void* Dest, const void* Src, INT Count )
    {
            asm volatile("
                    pushl %%ebx;
                    pushl %%ecx;
                    pushl %%esi;
                    pushl %%edi;
                    mov %%ecx, %%ebx;
                    shr $2, %%ecx;
                    and $3, %%ebx;
                    rep;
                    movsl;
                    mov %%ebx, %%ecx;
                    rep;
                    movsb;
                    popl %%edi;
                    popl %%esi;
                    popl %%ecx;
                    popl %%ebx;
            "
            :
            : "S" (Src),
              "D" (Dest),
              "c" (Count)
            );
    }

    //
    // Memory zero.
    //
    #define DEFINED_appMemzero 1
    inline void appMemzero( void* Dest, INT Count )
    {
            memset( Dest, 0, Count );
    }

    /*----------------------------------------------------------------------------
            Globals.
    ----------------------------------------------------------------------------*/

    // System identification.
    extern "C"
    {
            extern HINSTANCE      hInstance;
            extern CORE_API UBOOL GIsMMX;
            extern CORE_API UBOOL GIsPentiumPro;
            extern CORE_API UBOOL GIsKatmai;
            extern CORE_API UBOOL GIsK6;
            extern CORE_API UBOOL GIs3DNow;
            extern CORE_API UBOOL GTimestamp;
    }

    // Module name
    extern ANSICHAR GModule[32];

    /*----------------------------------------------------------------------------

            The End.
    ----------------------------------------------------------------------------*/

El Muerte TDS: Intresting header, but why here ?

Mr.Mitchell: It is related to Native Coding On Linux, as far as I understand you need it to compile UT native mods on Linux

##### Views

- Legacy
- Discussion
- Current revision

##### Search