1 | |
2 | // (C) Copyright Tobias Schwinger |
3 | // |
4 | // Use modification and distribution are subject to the boost Software License, |
5 | // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). |
6 | |
7 | //------------------------------------------------------------------------------ |
8 | |
9 | #ifndef BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED |
10 | #define BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED |
11 | |
12 | #include <boost/config.hpp> |
13 | #include <boost/detail/workaround.hpp> |
14 | |
15 | #if defined(BOOST_MSVC) |
16 | |
17 | # if BOOST_MSVC < 1310 |
18 | # error "unsupported compiler version" |
19 | # endif |
20 | |
21 | # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS |
22 | |
23 | // enable clrcall calling covention (call to .NET managed code) when |
24 | // compiling with /clr |
25 | # if BOOST_MSVC >= 1400 && defined(__cplusplus_cli) |
26 | # ifndef BOOST_FT_CC_CLRCALL |
27 | # define BOOST_FT_CC_CLRCALL callable_builtin |
28 | # endif |
29 | # endif |
30 | |
31 | // Intel x86 architecture specific calling conventions |
32 | # ifdef _M_IX86 |
33 | # define BOOST_FT_COMMON_X86_CCs callable_builtin |
34 | # if BOOST_MSVC < 1400 |
35 | // version 7.1 is missing a keyword to specify the thiscall cc ... |
36 | # ifndef BOOST_FT_CC_IMPLICIT_THISCALL |
37 | # define BOOST_FT_CC_IMPLICIT_THISCALL non_variadic|member|callable_builtin |
38 | # ifndef BOOST_FT_CONFIG_OK |
39 | # pragma message("INFO| /Gd /Gr /Gz will compiler options will cause") |
40 | # pragma message("INFO| a compile error.") |
41 | # pragma message("INFO| Reconfigure Boost.FunctionTypes in this case.") |
42 | # pragma message("INFO| This message can be suppressed by defining") |
43 | # pragma message("INFO| BOOST_FT_CONFIG_OK.") |
44 | # endif |
45 | # endif |
46 | # else |
47 | // ...introduced in version 8 |
48 | # ifndef BOOST_FT_CC_THISCALL |
49 | # define BOOST_FT_CC_THISCALL non_variadic|member|callable_builtin |
50 | # endif |
51 | # endif |
52 | # endif |
53 | # endif |
54 | |
55 | #elif defined(__GNUC__) && !defined(BOOST_INTEL_LINUX) |
56 | |
57 | # if __GNUC__ < 3 |
58 | # error "unsupported compiler version" |
59 | # endif |
60 | |
61 | # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS |
62 | |
63 | # if defined(__i386__) |
64 | # // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20439 |
65 | # // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29328 |
66 | # if BOOST_WORKAROUND(__GNUC__,BOOST_TESTED_AT(4)) |
67 | # ifndef BOOST_FT_CC_IMPLICIT |
68 | # define BOOST_FT_CC_IMPLICIT member|callable_builtin |
69 | # endif |
70 | # define BOOST_FT_COMMON_X86_CCs non_member|callable_builtin |
71 | # else |
72 | # define BOOST_FT_COMMON_X86_CCs callable_builtin |
73 | # endif |
74 | # else |
75 | # ifndef BOOST_FT_CC_IMPLICIT |
76 | # define BOOST_FT_CC_IMPLICIT callable_builtin |
77 | # endif |
78 | # endif |
79 | # endif |
80 | |
81 | # if (defined(BOOST_FT_CC_CDECL) || defined(BOOST_FT_COMMON_X86_CCs)) \ |
82 | && !defined(__cdecl) |
83 | # define __cdecl __attribute__((__cdecl__)) |
84 | # endif |
85 | # if (defined(BOOST_FT_CC_STDCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \ |
86 | && !defined(__stdcall) |
87 | # define __stdcall __attribute__((__stdcall__)) |
88 | # endif |
89 | # if (defined(BOOST_FT_CC_FASTCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \ |
90 | && !defined(__fastcall) |
91 | # define __fastcall __attribute__((__fastcall__)) |
92 | # endif |
93 | |
94 | #elif defined(__BORLANDC__) |
95 | |
96 | # if __BORLANDC__ < 0x550 |
97 | # error "unsupported compiler version" |
98 | # elif __BORLANDC__ > 0x565 |
99 | # pragma message("WARNING: library untested with this compiler version") |
100 | # endif |
101 | |
102 | # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS |
103 | # define BOOST_FT_COMMON_X86_CCs callable_builtin |
104 | # endif |
105 | |
106 | // syntactic specialities of cc specifier |
107 | # define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \ |
108 | result() cc_spec() lparen() type_mod() name() rparen() |
109 | #else |
110 | // only enable default calling convention |
111 | # define BOOST_FT_CC_IMPLICIT callable_builtin |
112 | #endif |
113 | |
114 | |
115 | #endif |
116 | |
117 | |