Files
jeanlemotan 8297b0b45f First
2024-07-02 18:06:33 +02:00

97 lines
2.7 KiB
C

#pragma once
#include "platform.h"
// Compiler/Linker detection
// Possible values:
// TOOLCHAIN:
// - TL_TOOLCHAIN_CLANG (LLVM/CLANG)
// - TL_TOOLCHAIN_GNU (GCC TOOLS)
// - TL_TOOLCHAIN_MSC (Microsoft Visual Studio)
// VERSION:
// - TL_TOOLCHAIN_MAJOR
// - TL_TOOLCHAIN_MINOR
// - TL_TOOLCHAIN_REVISION
#if defined(__clang__)
// CLANG needs to be detected first because CLANG also defined GNUC or GNUG
# define TL_TOOLCHAIN_CLANG
# define TL_TOOLCHAIN_MAJOR __clang_major__
# define TL_TOOLCHAIN_MINOR __clang_minor__
# define TL_TOOLCHAIN_REVISION __clang_patchlevel__
// Check for a valid toolchain version
# if TL_TOOLCHAIN_MAJOR < 3 && TL_TOOLCHAIN_MINOR < 6
# error "Not supported toolchain"
# endif
#elif defined(__GNUC__)
# define TL_TOOLCHAIN_GNU
# define TL_TOOLCHAIN_MAJOR __GNUC__
# define TL_TOOLCHAIN_MINOR __GNUC_MINOR__
# define TL_TOOLCHAIN_REVISION __GNUC_PATCHLEVEL__
// Check for a valid toolchain version
# if TL_TOOLCHAIN_MAJOR < 4 && TL_TOOLCHAIN_MINOR < 9
# error "Not supported toolchain"
# elif TL_TOOLCHAIN_MAJOR == 4 && TL_TOOLCHAIN_MINOR == 9
# if defined(TL_PLATFORM_LINUX_FAMILY) && (TL_TOOLCHAIN_REVISION < 2)
# error "Not supported toolchain"
# endif
# endif
#elif defined(_MSC_VER)
# define TL_TOOLCHAIN_MSC
# if _MSC_VER <= 1912 // VISUAL STUDIO 2017 15.5
# define TL_TOOLCHAIN_MAJOR 14
# define TL_TOOLCHAIN_MINOR 12
# elif _MSC_VER <= 1913 // VISUAL STUDIO 2017 15.6
# define TL_TOOLCHAIN_MAJOR 14
# define TL_TOOLCHAIN_MINOR 13
# elif _MSC_VER <= 1914 // VISUAL STUDIO 2017 15.7
# define TL_TOOLCHAIN_MAJOR 14
# define TL_TOOLCHAIN_MINOR 14
# else //_MSC_VER is 1915 or higher // VISUAL STUDIO 2017 15.8
# define TL_TOOLCHAIN_MAJOR 14
# define TL_TOOLCHAIN_MINOR 15
# endif
# define TL_TOOLCHAIN_REVISION (_MSC_FULL_VER - _MSC_VER * 100000) // Extract revision (build number)
# define TL_TOOLCHAIN_BUILD_NUMBER _MSC_BUILD // Real MSC Revision
//////////////////////////////////////////////////////////////////////////
// Disabled warnings for VS2013:
//
// C4503: 'identifier' : decorated name length exceeded, name was truncated
// From: https://msdn.microsoft.com/en-us/library/074af4b6.aspx
// "The correctness of the program, however, is unaffected by the truncated name."
// C4250: 'class1' : inherits 'class2::member' via dominance
# if TL_TOOLCHAIN_MAJOR >= 12 && TL_TOOLCHAIN_MAJOR < 15
# pragma warning( disable : 4503)
# pragma warning( disable : 4250)
# endif
# if TL_TOOLCHAIN_MAJOR == 14
# pragma warning( disable : 4577)
# endif
//////////////////////////////////////////////////////////////////////////
// Check for a valid toolchain version
# if TL_TOOLCHAIN_MAJOR < 12
# error "Not supported toolchain"
# endif
#else
# error Unknown Toolchain please provide BAR team more info.
#endif