summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarmen Stoppels <harmenstoppels@gmail.com>2023-02-17 23:18:01 +0100
committerGitHub <noreply@github.com>2023-02-17 23:18:01 +0100
commitfb644de086a222ee8335910a0ff9b010ed4d60d7 (patch)
tree9a6f73e3ba27d05f7c48b8e21f9eaca93c625095
parent352d56d6b0ed97de3859ab98e6272a2c7682f6d1 (diff)
downloadspack-fb644de086a222ee8335910a0ff9b010ed4d60d7.tar.gz
spack-fb644de086a222ee8335910a0ff9b010ed4d60d7.tar.bz2
spack-fb644de086a222ee8335910a0ff9b010ed4d60d7.tar.xz
spack-fb644de086a222ee8335910a0ff9b010ed4d60d7.zip
clang/apple-clang correct c/c++ standard flags (#35062)
-rw-r--r--lib/spack/spack/compilers/apple_clang.py75
-rw-r--r--lib/spack/spack/compilers/clang.py21
-rw-r--r--lib/spack/spack/test/compilers/basics.py4
3 files changed, 83 insertions, 17 deletions
diff --git a/lib/spack/spack/compilers/apple_clang.py b/lib/spack/spack/compilers/apple_clang.py
index e4bef2c4bb..8a39b6427a 100644
--- a/lib/spack/spack/compilers/apple_clang.py
+++ b/lib/spack/spack/compilers/apple_clang.py
@@ -36,36 +36,89 @@ class AppleClang(spack.compilers.clang.Clang):
ver = match.group(match.lastindex)
return ver
+ # C++ flags based on CMake Modules/Compiler/AppleClang-CXX.cmake
+
@property
def cxx11_flag(self):
- # Adapted from CMake's AppleClang-CXX rules
# 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(
- 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"
@property
def cxx14_flag(self):
- # Adapted from CMake's rules for AppleClang
- if self.real_version < spack.version.ver("5.1.0"):
+ if self.real_version < spack.version.ver("5.1"):
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++14"
@property
def cxx17_flag(self):
- # Adapted from CMake's rules for AppleClang
- if self.real_version < spack.version.ver("6.1.0"):
+ if self.real_version < spack.version.ver("6.1"):
+ raise spack.compiler.UnsupportedCompilerFlag(
+ 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++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 C++17 standard", "cxx17_flag", "Xcode < 6.1.0"
+ self, "the C23 standard", "c23_flag", "< 11.0.3"
)
- return "-std=c++1z"
+ return "-std=c2x"
def setup_custom_environment(self, pkg, env):
"""Set the DEVELOPER_DIR environment for the Xcode toolchain.
diff --git a/lib/spack/spack/compilers/clang.py b/lib/spack/spack/compilers/clang.py
index f9d5482297..53535256ae 100644
--- a/lib/spack/spack/compilers/clang.py
+++ b/lib/spack/spack/compilers/clang.py
@@ -128,10 +128,23 @@ class Clang(Compiler):
@property
def c11_flag(self):
- if self.real_version < ver("6.1.0"):
- raise UnsupportedCompilerFlag(self, "the C11 standard", "c11_flag", "< 6.1.0")
- else:
- return "-std=c11"
+ if self.real_version < ver("3.0"):
+ raise UnsupportedCompilerFlag(self, "the C11 standard", "c11_flag", "< 3.0")
+ if self.real_version < ver("3.1"):
+ return "-std=c1x"
+ 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
def cc_pic_flag(self):
diff --git a/lib/spack/spack/test/compilers/basics.py b/lib/spack/spack/test/compilers/basics.py
index 0c5660efca..edd2f3acc9 100644
--- a/lib/spack/spack/test/compilers/basics.py
+++ b/lib/spack/spack/test/compilers/basics.py
@@ -389,7 +389,7 @@ def test_apple_clang_flags():
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("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("cc_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++17", "clang@5.0")
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("cc_pic_flag", "-fPIC", "clang@3.3")
supported_flag_test("cxx_pic_flag", "-fPIC", "clang@3.3")