117 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
// (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 <boost/config.hpp>
 | 
						|
#include <boost/detail/workaround.hpp>
 | 
						|
 | 
						|
#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
 | 
						|
 |