#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