// (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED #define BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED #include #include #if defined(BOOST_MSVC) # if BOOST_MSVC < 1310 # error "unsupported compiler version" # endif # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS // enable clrcall calling covention (call to .NET managed code) when // compiling with /clr # if BOOST_MSVC >= 1400 && defined(__cplusplus_cli) # ifndef BOOST_FT_CC_CLRCALL # define BOOST_FT_CC_CLRCALL callable_builtin # endif # endif // Intel x86 architecture specific calling conventions # ifdef _M_IX86 # define BOOST_FT_COMMON_X86_CCs callable_builtin # if BOOST_MSVC < 1400 // version 7.1 is missing a keyword to specify the thiscall cc ... # ifndef BOOST_FT_CC_IMPLICIT_THISCALL # define BOOST_FT_CC_IMPLICIT_THISCALL non_variadic|member|callable_builtin # ifndef BOOST_FT_CONFIG_OK # pragma message("INFO| /Gd /Gr /Gz will compiler options will cause") # pragma message("INFO| a compile error.") # pragma message("INFO| Reconfigure Boost.FunctionTypes in this case.") # pragma message("INFO| This message can be suppressed by defining") # pragma message("INFO| BOOST_FT_CONFIG_OK.") # endif # endif # else // ...introduced in version 8 # ifndef BOOST_FT_CC_THISCALL # define BOOST_FT_CC_THISCALL non_variadic|member|callable_builtin # endif # endif # endif # endif #elif defined(__GNUC__) && !defined(BOOST_INTEL_LINUX) # if __GNUC__ < 3 # error "unsupported compiler version" # endif # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS # if defined(__i386__) # // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20439 # // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29328 # if BOOST_WORKAROUND(__GNUC__,BOOST_TESTED_AT(4)) # ifndef BOOST_FT_CC_IMPLICIT # define BOOST_FT_CC_IMPLICIT member|callable_builtin # endif # define BOOST_FT_COMMON_X86_CCs non_member|callable_builtin # else # define BOOST_FT_COMMON_X86_CCs callable_builtin # endif # else # ifndef BOOST_FT_CC_IMPLICIT # define BOOST_FT_CC_IMPLICIT callable_builtin # endif # endif # endif # if (defined(BOOST_FT_CC_CDECL) || defined(BOOST_FT_COMMON_X86_CCs)) \ && !defined(__cdecl) # define __cdecl __attribute__((__cdecl__)) # endif # if (defined(BOOST_FT_CC_STDCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \ && !defined(__stdcall) # define __stdcall __attribute__((__stdcall__)) # endif # if (defined(BOOST_FT_CC_FASTCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \ && !defined(__fastcall) # define __fastcall __attribute__((__fastcall__)) # endif #elif defined(__BORLANDC__) # if __BORLANDC__ < 0x550 # error "unsupported compiler version" # elif __BORLANDC__ > 0x565 # pragma message("WARNING: library untested with this compiler version") # endif # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS # define BOOST_FT_COMMON_X86_CCs callable_builtin # endif // syntactic specialities of cc specifier # define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \ result() cc_spec() lparen() type_mod() name() rparen() #else // only enable default calling convention # define BOOST_FT_CC_IMPLICIT callable_builtin #endif #endif