Skip to content

Commit a69d298

Browse files
committed
Remove standard flag from compilation flags if C++ compiler is being used on a C source file
1 parent 77dd90d commit a69d298

1 file changed

Lines changed: 39 additions & 10 deletions

File tree

yggdrasil/drivers/CPPModelDriver.py

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,47 @@ class CPPCompilerBase(CCompilerBase):
1818
default_executable = None
1919

2020
@classmethod
21-
def add_standard_flag(cls, flags):
22-
r"""Add a standard flag to the list of flags.
21+
def find_standard_flag(cls, flags):
22+
r"""Locate the standard flag in a list of flags.
2323
2424
Args:
2525
flags (list): Compilation flags.
2626
27+
Returns:
28+
int: Index of the standard flag. -1 if not present.
29+
2730
"""
28-
std_flag = None
2931
for i, a in enumerate(flags):
3032
if a.startswith('-std='):
31-
std_flag = i
32-
break
33-
if std_flag is None:
33+
return i
34+
return -1
35+
36+
@classmethod
37+
def add_standard_flag(cls, flags):
38+
r"""Add a standard flag to the list of flags.
39+
40+
Args:
41+
flags (list): Compilation flags.
42+
43+
"""
44+
std_flag_idx = cls.find_standard_flag(flags)
45+
if std_flag_idx == -1:
3446
flags.append('-std=%s' % cls.cpp_std)
3547
return flags
3648

49+
def remove_standard_flag(cls, flags):
50+
r"""Remove the standard flag from a list of flags if one is
51+
present.
52+
53+
Args:
54+
flags (list): Compilation flags.
55+
56+
"""
57+
std_flag_idx = cls.find_standard_flag(flags)
58+
if std_flag_idx != -1:
59+
del flags[std_flag_idx]
60+
return flags
61+
3762

3863
class GPPCompiler(CPPCompilerBase, GCCCompiler):
3964
r"""Interface class for G++ compiler/linker."""
@@ -55,8 +80,10 @@ def get_flags(cls, skip_standard_flag=False, **kwargs):
5580
5681
"""
5782
out = super(GPPCompiler, cls).get_flags(**kwargs)
58-
# Add standard library flag
59-
if not skip_standard_flag:
83+
# Add/remove standard library flag
84+
if skip_standard_flag:
85+
out = cls.remove_standard_flag(out)
86+
else:
6087
out = cls.add_standard_flag(out)
6188
return out
6289

@@ -94,8 +121,10 @@ def get_flags(cls, skip_standard_flag=False, **kwargs):
94121
95122
"""
96123
out = super(ClangPPCompiler, cls).get_flags(**kwargs)
97-
# Add standard library flag
98-
if not skip_standard_flag:
124+
# Add/remove standard library flag
125+
if skip_standard_flag:
126+
out = cls.remove_standard_flag(out)
127+
else:
99128
out = cls.add_standard_flag(out)
100129
return out
101130

0 commit comments

Comments
 (0)