clang/apple-clang correct c/c++ standard flags (#35062)
This commit is contained in:
parent
352d56d6b0
commit
fb644de086
3 changed files with 83 additions and 17 deletions
|
@ -36,36 +36,89 @@ def extract_version_from_output(cls, output):
|
||||||
ver = match.group(match.lastindex)
|
ver = match.group(match.lastindex)
|
||||||
return ver
|
return ver
|
||||||
|
|
||||||
|
# C++ flags based on CMake Modules/Compiler/AppleClang-CXX.cmake
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cxx11_flag(self):
|
def cxx11_flag(self):
|
||||||
# Adapted from CMake's AppleClang-CXX rules
|
|
||||||
# Spack's AppleClang detection only valid from Xcode >= 4.6
|
# Spack's AppleClang detection only valid from Xcode >= 4.6
|
||||||
if self.real_version < spack.version.ver("4.0.0"):
|
if self.real_version < spack.version.ver("4.0"):
|
||||||
raise spack.compiler.UnsupportedCompilerFlag(
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
self, "the C++11 standard", "cxx11_flag", "Xcode < 4.0.0"
|
self, "the C++11 standard", "cxx11_flag", "Xcode < 4.0"
|
||||||
)
|
)
|
||||||
return "-std=c++11"
|
return "-std=c++11"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cxx14_flag(self):
|
def cxx14_flag(self):
|
||||||
# Adapted from CMake's rules for AppleClang
|
if self.real_version < spack.version.ver("5.1"):
|
||||||
if self.real_version < spack.version.ver("5.1.0"):
|
|
||||||
raise spack.compiler.UnsupportedCompilerFlag(
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
self, "the C++14 standard", "cxx14_flag", "Xcode < 5.1.0"
|
self, "the C++14 standard", "cxx14_flag", "Xcode < 5.1"
|
||||||
)
|
)
|
||||||
elif self.real_version < spack.version.ver("6.1.0"):
|
elif self.real_version < spack.version.ver("6.1"):
|
||||||
return "-std=c++1y"
|
return "-std=c++1y"
|
||||||
|
|
||||||
return "-std=c++14"
|
return "-std=c++14"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cxx17_flag(self):
|
def cxx17_flag(self):
|
||||||
# Adapted from CMake's rules for AppleClang
|
if self.real_version < spack.version.ver("6.1"):
|
||||||
if self.real_version < spack.version.ver("6.1.0"):
|
|
||||||
raise spack.compiler.UnsupportedCompilerFlag(
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
self, "the C++17 standard", "cxx17_flag", "Xcode < 6.1.0"
|
self, "the C++17 standard", "cxx17_flag", "Xcode < 6.1"
|
||||||
)
|
)
|
||||||
|
elif self.real_version < spack.version.ver("10.0"):
|
||||||
return "-std=c++1z"
|
return "-std=c++1z"
|
||||||
|
return "-std=c++17"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cxx20_flag(self):
|
||||||
|
if self.real_version < spack.version.ver("10.0"):
|
||||||
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
|
self, "the C++20 standard", "cxx20_flag", "Xcode < 10.0"
|
||||||
|
)
|
||||||
|
elif self.real_version < spack.version.ver("13.0"):
|
||||||
|
return "-std=c++2a"
|
||||||
|
return "-std=c++20"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cxx23_flag(self):
|
||||||
|
if self.real_version < spack.version.ver("13.0"):
|
||||||
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
|
self, "the C++23 standard", "cxx23_flag", "Xcode < 13.0"
|
||||||
|
)
|
||||||
|
return "-std=c++2b"
|
||||||
|
|
||||||
|
# C flags based on CMake Modules/Compiler/AppleClang-C.cmake
|
||||||
|
|
||||||
|
@property
|
||||||
|
def c99_flag(self):
|
||||||
|
if self.real_version < spack.version.ver("4.0"):
|
||||||
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
|
self, "the C99 standard", "c99_flag", "< 4.0"
|
||||||
|
)
|
||||||
|
return "-std=c99"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def c11_flag(self):
|
||||||
|
if self.real_version < spack.version.ver("4.0"):
|
||||||
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
|
self, "the C11 standard", "c11_flag", "< 4.0"
|
||||||
|
)
|
||||||
|
return "-std=c11"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def c17_flag(self):
|
||||||
|
if self.real_version < spack.version.ver("11.0"):
|
||||||
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
|
self, "the C17 standard", "c17_flag", "< 11.0"
|
||||||
|
)
|
||||||
|
return "-std=c17"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def c23_flag(self):
|
||||||
|
if self.real_version < spack.version.ver("11.0.3"):
|
||||||
|
raise spack.compiler.UnsupportedCompilerFlag(
|
||||||
|
self, "the C23 standard", "c23_flag", "< 11.0.3"
|
||||||
|
)
|
||||||
|
return "-std=c2x"
|
||||||
|
|
||||||
def setup_custom_environment(self, pkg, env):
|
def setup_custom_environment(self, pkg, env):
|
||||||
"""Set the DEVELOPER_DIR environment for the Xcode toolchain.
|
"""Set the DEVELOPER_DIR environment for the Xcode toolchain.
|
||||||
|
|
|
@ -128,11 +128,24 @@ def c99_flag(self):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def c11_flag(self):
|
def c11_flag(self):
|
||||||
if self.real_version < ver("6.1.0"):
|
if self.real_version < ver("3.0"):
|
||||||
raise UnsupportedCompilerFlag(self, "the C11 standard", "c11_flag", "< 6.1.0")
|
raise UnsupportedCompilerFlag(self, "the C11 standard", "c11_flag", "< 3.0")
|
||||||
else:
|
if self.real_version < ver("3.1"):
|
||||||
|
return "-std=c1x"
|
||||||
return "-std=c11"
|
return "-std=c11"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def c17_flag(self):
|
||||||
|
if self.real_version < ver("6.0"):
|
||||||
|
raise UnsupportedCompilerFlag(self, "the C17 standard", "c17_flag", "< 6.0")
|
||||||
|
return "-std=c17"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def c23_flag(self):
|
||||||
|
if self.real_version < ver("9.0"):
|
||||||
|
raise UnsupportedCompilerFlag(self, "the C23 standard", "c23_flag", "< 9.0")
|
||||||
|
return "-std=c2x"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cc_pic_flag(self):
|
def cc_pic_flag(self):
|
||||||
return "-fPIC"
|
return "-fPIC"
|
||||||
|
|
|
@ -389,7 +389,7 @@ def test_apple_clang_flags():
|
||||||
unsupported_flag_test("cxx17_flag", "apple-clang@6.0.0")
|
unsupported_flag_test("cxx17_flag", "apple-clang@6.0.0")
|
||||||
supported_flag_test("cxx17_flag", "-std=c++1z", "apple-clang@6.1.0")
|
supported_flag_test("cxx17_flag", "-std=c++1z", "apple-clang@6.1.0")
|
||||||
supported_flag_test("c99_flag", "-std=c99", "apple-clang@6.1.0")
|
supported_flag_test("c99_flag", "-std=c99", "apple-clang@6.1.0")
|
||||||
unsupported_flag_test("c11_flag", "apple-clang@6.0.0")
|
unsupported_flag_test("c11_flag", "apple-clang@3.0.0")
|
||||||
supported_flag_test("c11_flag", "-std=c11", "apple-clang@6.1.0")
|
supported_flag_test("c11_flag", "-std=c11", "apple-clang@6.1.0")
|
||||||
supported_flag_test("cc_pic_flag", "-fPIC", "apple-clang@2.0.0")
|
supported_flag_test("cc_pic_flag", "-fPIC", "apple-clang@2.0.0")
|
||||||
supported_flag_test("cxx_pic_flag", "-fPIC", "apple-clang@2.0.0")
|
supported_flag_test("cxx_pic_flag", "-fPIC", "apple-clang@2.0.0")
|
||||||
|
@ -409,7 +409,7 @@ def test_clang_flags():
|
||||||
supported_flag_test("cxx17_flag", "-std=c++1z", "clang@3.5")
|
supported_flag_test("cxx17_flag", "-std=c++1z", "clang@3.5")
|
||||||
supported_flag_test("cxx17_flag", "-std=c++17", "clang@5.0")
|
supported_flag_test("cxx17_flag", "-std=c++17", "clang@5.0")
|
||||||
supported_flag_test("c99_flag", "-std=c99", "clang@3.3")
|
supported_flag_test("c99_flag", "-std=c99", "clang@3.3")
|
||||||
unsupported_flag_test("c11_flag", "clang@6.0.0")
|
unsupported_flag_test("c11_flag", "clang@2.0")
|
||||||
supported_flag_test("c11_flag", "-std=c11", "clang@6.1.0")
|
supported_flag_test("c11_flag", "-std=c11", "clang@6.1.0")
|
||||||
supported_flag_test("cc_pic_flag", "-fPIC", "clang@3.3")
|
supported_flag_test("cc_pic_flag", "-fPIC", "clang@3.3")
|
||||||
supported_flag_test("cxx_pic_flag", "-fPIC", "clang@3.3")
|
supported_flag_test("cxx_pic_flag", "-fPIC", "clang@3.3")
|
||||||
|
|
Loading…
Reference in a new issue