|
|
|
@ -37,6 +37,13 @@ from .compilers import ( |
|
|
|
|
from .c_function_attributes import CXX_FUNC_ATTRIBUTES, C_FUNC_ATTRIBUTES |
|
|
|
|
from .clike import CLikeCompiler |
|
|
|
|
|
|
|
|
|
def non_msvc_eh_options(eh, args): |
|
|
|
|
if eh == 'none': |
|
|
|
|
args.append('-fno-exceptions') |
|
|
|
|
elif eh == 's' or eh == 'c': |
|
|
|
|
mlog.warning('non-MSVC compilers do not support ' + eh + ' exception handling.' + |
|
|
|
|
'You may want to set eh to \'default\'.') |
|
|
|
|
|
|
|
|
|
class CPPCompiler(CLikeCompiler, Compiler): |
|
|
|
|
|
|
|
|
|
@classmethod |
|
|
|
@ -151,7 +158,7 @@ class ClangCPPCompiler(ClangCompiler, CPPCompiler): |
|
|
|
|
opts = CPPCompiler.get_options(self) |
|
|
|
|
opts.update({'cpp_eh': coredata.UserComboOption('cpp_eh', |
|
|
|
|
'C++ exception handling type.', |
|
|
|
|
['none', 'default'], |
|
|
|
|
['none', 'default', 'a', 's', 'sc'], |
|
|
|
|
'default'), |
|
|
|
|
'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', |
|
|
|
|
['none', 'c++98', 'c++03', 'c++11', 'c++14', 'c++17', 'c++1z', 'c++2a', |
|
|
|
@ -164,8 +171,9 @@ class ClangCPPCompiler(ClangCompiler, CPPCompiler): |
|
|
|
|
std = options['cpp_std'] |
|
|
|
|
if std.value != 'none': |
|
|
|
|
args.append(self._find_best_cpp_std(std.value)) |
|
|
|
|
if options['cpp_eh'].value == 'none': |
|
|
|
|
args.append('-fno-exceptions') |
|
|
|
|
|
|
|
|
|
non_msvc_eh_options(options['cpp_eh'].value, args) |
|
|
|
|
|
|
|
|
|
return args |
|
|
|
|
|
|
|
|
|
def get_option_link_args(self, options): |
|
|
|
@ -189,7 +197,7 @@ class ArmclangCPPCompiler(ArmclangCompiler, CPPCompiler): |
|
|
|
|
opts = CPPCompiler.get_options(self) |
|
|
|
|
opts.update({'cpp_eh': coredata.UserComboOption('cpp_eh', |
|
|
|
|
'C++ exception handling type.', |
|
|
|
|
['none', 'default'], |
|
|
|
|
['none', 'default', 'a', 's', 'sc'], |
|
|
|
|
'default'), |
|
|
|
|
'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', |
|
|
|
|
['none', 'c++98', 'c++03', 'c++11', 'c++14', 'c++17', |
|
|
|
@ -202,8 +210,9 @@ class ArmclangCPPCompiler(ArmclangCompiler, CPPCompiler): |
|
|
|
|
std = options['cpp_std'] |
|
|
|
|
if std.value != 'none': |
|
|
|
|
args.append('-std=' + std.value) |
|
|
|
|
if options['cpp_eh'].value == 'none': |
|
|
|
|
args.append('-fno-exceptions') |
|
|
|
|
|
|
|
|
|
non_msvc_eh_options(options['cpp_eh'].value, args) |
|
|
|
|
|
|
|
|
|
return args |
|
|
|
|
|
|
|
|
|
def get_option_link_args(self, options): |
|
|
|
@ -224,7 +233,7 @@ class GnuCPPCompiler(GnuCompiler, CPPCompiler): |
|
|
|
|
opts = CPPCompiler.get_options(self) |
|
|
|
|
opts.update({'cpp_eh': coredata.UserComboOption('cpp_eh', |
|
|
|
|
'C++ exception handling type.', |
|
|
|
|
['none', 'default'], |
|
|
|
|
['none', 'default', 'a', 's', 'sc'], |
|
|
|
|
'default'), |
|
|
|
|
'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', |
|
|
|
|
['none', 'c++98', 'c++03', 'c++11', 'c++14', 'c++17', 'c++1z', 'c++2a', |
|
|
|
@ -244,8 +253,9 @@ class GnuCPPCompiler(GnuCompiler, CPPCompiler): |
|
|
|
|
std = options['cpp_std'] |
|
|
|
|
if std.value != 'none': |
|
|
|
|
args.append(self._find_best_cpp_std(std.value)) |
|
|
|
|
if options['cpp_eh'].value == 'none': |
|
|
|
|
args.append('-fno-exceptions') |
|
|
|
|
|
|
|
|
|
non_msvc_eh_options(options['cpp_eh'].value, args) |
|
|
|
|
|
|
|
|
|
if options['cpp_debugstl'].value: |
|
|
|
|
args.append('-D_GLIBCXX_DEBUG=1') |
|
|
|
|
return args |
|
|
|
@ -278,7 +288,7 @@ class ElbrusCPPCompiler(GnuCPPCompiler, ElbrusCompiler): |
|
|
|
|
opts = CPPCompiler.get_options(self) |
|
|
|
|
opts.update({'cpp_eh': coredata.UserComboOption('cpp_eh', |
|
|
|
|
'C++ exception handling type.', |
|
|
|
|
['none', 'default'], |
|
|
|
|
['none', 'default', 'a', 's', 'sc'], |
|
|
|
|
'default'), |
|
|
|
|
'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', |
|
|
|
|
['none', 'c++98', 'c++03', 'c++0x', 'c++11', 'c++14', 'c++1y', |
|
|
|
@ -328,7 +338,7 @@ class IntelCPPCompiler(IntelCompiler, CPPCompiler): |
|
|
|
|
g_stds += ['gnu++14'] |
|
|
|
|
opts.update({'cpp_eh': coredata.UserComboOption('cpp_eh', |
|
|
|
|
'C++ exception handling type.', |
|
|
|
|
['none', 'default'], |
|
|
|
|
['none', 'default', 'a', 's', 'sc'], |
|
|
|
|
'default'), |
|
|
|
|
'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', |
|
|
|
|
['none'] + c_stds + g_stds, |
|
|
|
@ -367,7 +377,7 @@ class VisualStudioLikeCPPCompilerMixin: |
|
|
|
|
def _get_options_impl(self, opts, cpp_stds: typing.List[str]): |
|
|
|
|
opts.update({'cpp_eh': coredata.UserComboOption('cpp_eh', |
|
|
|
|
'C++ exception handling type.', |
|
|
|
|
['none', 'a', 's', 'sc', 'default'], |
|
|
|
|
['none', 'default', 'a', 's', 'sc'], |
|
|
|
|
'default'), |
|
|
|
|
'cpp_std': coredata.UserComboOption('cpp_std', |
|
|
|
|
'C++ language standard to use', |
|
|
|
|