Program Listing for File platform.hpp

Return to documentation for file (/home/runner/work/Legion-Engine/Legion-Engine/legion/engine/core/platform/platform.hpp)

#pragma once

#if !defined(PROJECT_NAME)
#define PROJECT_NAME user_project
#endif

#define CONCAT(A, B) A ## B

#define CONCAT_DEFINE(A, B) CONCAT(A, B)

#define LEGION_CPP17V 201703L

#define LEGION_DEBUG_VALUE 1
#define LEGION_RELEASE_VALUE 2

#if defined(DOXY_EXCLUDE)
#define NDOXY(...)
#define CNDOXY(...)
#else
#define NDOXY(args...) args
#define CNDOXY(args...) , args
#endif

#if defined(_DEBUG) || defined(DEBUG)

    #define LEGION_DEBUG
    #define LEGION_CONFIGURATION LEGION_DEBUG_VALUE
#else

    #define LEGION_RELEASE
    #define LEGION_CONFIGURATION LEGION_RELEASE_VALUE
#endif

#if (!defined(LEGION_LOW_POWER) && !defined(LEGION_HIGH_PERFORMANCE))

    #define LEGION_HIGH_PERFORMANCE
#endif


#if defined(_WIN64)

    #define LEGION_WINDOWS

    #define WIN32_LEAN_AND_MEAN
    #define VC_EXTRALEAN
    #define NOMINMAX
    #include <Windows.h>
    #include <shellapi.h>
    #include <shlobj.h>
    #include <shlwapi.h>
    #include <objbase.h>
#elif defined(__linux__)

    #define LEGION_LINUX

    #include <sys/prctl.h>
    #include <sys/resource.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <sched.h>
    #include <errno.h>
#endif

#ifndef __FUNC__
    #define __FUNC__ __func__
#endif

#ifndef __FULL_FUNC__
    #if defined(LEGION_WINDOWS)
        #define __FULL_FUNC__ __FUNCSIG__
    #elif defined(__linux__)
        #define __FULL_FUNC__ __PRETTY_FUNCTION__
    #else
        #define __FULL_FUNC__ __func__
    #endif
#endif

#if defined(__clang__)
    // clang
#define LEGION_CLANG

#if defined(__GNUG__) || (defined(__GNUC__) && defined(__cplusplus))
#define LEGION_CLANG_GCC
#elif defined(_MSC_VER)
#define LEGION_CLANG_MSVC
#endif

#define L_PAUSE_INSTRUCTION __builtin_ia32_pause
#elif defined(__GNUG__) || (defined(__GNUC__) && defined(__cplusplus))
    // gcc
#define LEGION_GCC
#define L_PAUSE_INSTRUCTION __builtin_ia32_pause
#elif defined(_MSC_VER)
    // msvc
#define LEGION_MSVC
#define L_PAUSE_INSTRUCTION _mm_pause
#endif

#if (defined(LEGION_WINDOWS) && !defined(LEGION_WINDOWS_USE_CDECL)) || defined (DOXY_INCLUDE)

    #define LEGION_CCONV __fastcall
#else
    #define LEGION_CCONV __cdecl
#endif

#define NO_MANGLING extern "C"

#define LEGION_FUNC LEGION_CCONV

#define LEGION_INTERFACE NO_MANGLING LEGION_CCONV

#if defined(__has_cpp_attribute)|| defined(DOXY_INCLUDE)

#  define L_HASCPPATTRIB(x) __has_cpp_attribute(x)
#else
#  define L_HASCPPATTRIB(x) 0
#endif

#if L_HASCPPATTRIB(fallthrough)
#define L_FALLTHROUGH [[fallthrough]]
#else
#define L_FALLTHROUGH
#endif

#if __cplusplus >= LEGION_CPP17V || L_HASCPPATTRIB(nodiscard) || defined(DOXY_INCLUDE)

#define L_NODISCARD [[nodiscard]]
#else
#define L_NODISCARD
#endif

#if __cplusplus >= LEGION_CPP17V || L_HASCPPATTRIB(maybe_unused) || defined(DOXY_INCLUDE)

#define L_MAYBEUNUSED [[maybe_unused]]
#else
#define L_MAYBEUNUSED
#endif



#if __cplusplus > LEGION_CPP17V || L_HASCPPATTRIB(noreturn) || defined(DOXY_INCLUDE)

#define L_NORETURN [[noreturn]]
#else
#define L_NORETURN
#endif

#define LEGION_PURE =0

#define LEGION_IMPURE {}

#define LEGION_IMPURE_RETURN(x) { return (x); }

#if !defined(LEGION_MIN_THREADS)
#define LEGION_MIN_THREADS 5
#endif