clang/apple-clang correct c/c++ standard flags (#35062)
This commit is contained in:
		| @@ -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" | ||||||
|             ) |             ) | ||||||
|         return "-std=c++1z" |         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 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,10 +128,23 @@ 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=c11" |             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 |     @property | ||||||
|     def cc_pic_flag(self): |     def cc_pic_flag(self): | ||||||
|   | |||||||
| @@ -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") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels