nvhpc: Do not use -Wno-error with nvhpc (#44142)
				
					
				
			In #30882, we made Spack ignore `-Werror` calls so that it could more easily build projects that inject `-Werror` into their builds. We did this by translating them to `-Wno-error` in the compiler wrapper. However, some compilers (like `nvhpc`) do not support `-Wno-error`. We need to exclude them from this feature until they do. - [x] make a property on `PackageBase` for `keep_werror` that knows not to use it for `nvhpc`. - [x] update property so that it keeps only the specific `-Werror=...` args for newer nvhpc's, which support `-Wno-error` but not `-Wno-error=...` --------- Co-authored-by: William Mou <william.mou1024@gmail.com> Co-authored-by: Tom Scogland <scogland1@llnl.gov> Signed-off-by: Todd Gamblin <tgamblin@llnl.gov>
This commit is contained in:
		| @@ -621,10 +621,6 @@ class PackageBase(WindowsRPath, PackageViewMixin, RedistributionMixin, metaclass | |||||||
|     #: By default do not run tests within package's install() |     #: By default do not run tests within package's install() | ||||||
|     run_tests = False |     run_tests = False | ||||||
| 
 | 
 | ||||||
|     #: Keep -Werror flags, matches config:flags:keep_werror to override config |  | ||||||
|     # NOTE: should be type Optional[Literal['all', 'specific', 'none']] in 3.8+ |  | ||||||
|     keep_werror: Optional[str] = None |  | ||||||
| 
 |  | ||||||
|     #: Most packages are NOT extendable. Set to True if you want extensions. |     #: Most packages are NOT extendable. Set to True if you want extensions. | ||||||
|     extendable = False |     extendable = False | ||||||
| 
 | 
 | ||||||
| @@ -930,6 +926,32 @@ def global_license_file(self): | |||||||
|             self.global_license_dir, self.name, os.path.basename(self.license_files[0]) |             self.global_license_dir, self.name, os.path.basename(self.license_files[0]) | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|  |     # NOTE: return type should be Optional[Literal['all', 'specific', 'none']] in | ||||||
|  |     # Python 3.8+, but we still support 3.6. | ||||||
|  |     @property | ||||||
|  |     def keep_werror(self) -> Optional[str]: | ||||||
|  |         """Keep ``-Werror`` flags, matches ``config:flags:keep_werror`` to override config. | ||||||
|  | 
 | ||||||
|  |         Valid return values are: | ||||||
|  |         * ``"all"``: keep all ``-Werror`` flags. | ||||||
|  |         * ``"specific"``: keep only ``-Werror=specific-warning`` flags. | ||||||
|  |         * ``"none"``: filter out all ``-Werror*`` flags. | ||||||
|  |         * ``None``: respect the user's configuration (``"none"`` by default). | ||||||
|  |         """ | ||||||
|  |         if self.spec.satisfies("%nvhpc@:23.3") or self.spec.satisfies("%pgi"): | ||||||
|  |             # Filtering works by replacing -Werror with -Wno-error, but older nvhpc and | ||||||
|  |             # PGI do not understand -Wno-error, so we disable filtering. | ||||||
|  |             return "all" | ||||||
|  | 
 | ||||||
|  |         elif self.spec.satisfies("%nvhpc@23.4:"): | ||||||
|  |             # newer nvhpc supports -Wno-error but can't disable specific warnings with | ||||||
|  |             # -Wno-error=warning. Skip -Werror=warning, but still filter -Werror. | ||||||
|  |             return "specific" | ||||||
|  | 
 | ||||||
|  |         else: | ||||||
|  |             # use -Werror disablement by default for other compilers | ||||||
|  |             return None | ||||||
|  | 
 | ||||||
|     @property |     @property | ||||||
|     def version(self): |     def version(self): | ||||||
|         if not self.spec.versions.concrete: |         if not self.spec.versions.concrete: | ||||||
|   | |||||||
| @@ -828,14 +828,14 @@ def test_keep_and_replace(wrapper_environment): | |||||||
|         ), |         ), | ||||||
|         ( |         ( | ||||||
|             "config:flags:keep_werror:specific", |             "config:flags:keep_werror:specific", | ||||||
|             ["-Werror", "-Werror=specific", "-bah"], |             ["-Werror", "-Werror=specific", "-Werror-specific2", "-bah"], | ||||||
|             ["-Werror=specific", "-bah"], |             ["-Wno-error", "-Werror=specific", "-Werror-specific2", "-bah"], | ||||||
|             ["-Werror"], |             ["-Werror"], | ||||||
|         ), |         ), | ||||||
|         ( |         ( | ||||||
|             "config:flags:keep_werror:none", |             "config:flags:keep_werror:none", | ||||||
|             ["-Werror", "-Werror=specific", "-bah"], |             ["-Werror", "-Werror=specific", "-bah"], | ||||||
|             ["-bah", "-Wno-error", "-Wno-error=specific"], |             ["-Wno-error", "-Wno-error=specific", "-bah"], | ||||||
|             ["-Werror", "-Werror=specific"], |             ["-Werror", "-Werror=specific"], | ||||||
|         ), |         ), | ||||||
|         # check non-standard -Werror opts like -Werror-implicit-function-declaration |         # check non-standard -Werror opts like -Werror-implicit-function-declaration | ||||||
| @@ -848,13 +848,13 @@ def test_keep_and_replace(wrapper_environment): | |||||||
|         ( |         ( | ||||||
|             "config:flags:keep_werror:specific", |             "config:flags:keep_werror:specific", | ||||||
|             ["-Werror", "-Werror-implicit-function-declaration", "-bah"], |             ["-Werror", "-Werror-implicit-function-declaration", "-bah"], | ||||||
|             ["-Werror-implicit-function-declaration", "-bah", "-Wno-error"], |             ["-Wno-error", "-Werror-implicit-function-declaration", "-bah"], | ||||||
|             ["-Werror"], |             ["-Werror"], | ||||||
|         ), |         ), | ||||||
|         ( |         ( | ||||||
|             "config:flags:keep_werror:none", |             "config:flags:keep_werror:none", | ||||||
|             ["-Werror", "-Werror-implicit-function-declaration", "-bah"], |             ["-Werror", "-Werror-implicit-function-declaration", "-bah"], | ||||||
|             ["-bah", "-Wno-error=implicit-function-declaration"], |             ["-Wno-error", "-bah", "-Wno-error=implicit-function-declaration"], | ||||||
|             ["-Werror", "-Werror-implicit-function-declaration"], |             ["-Werror", "-Werror-implicit-function-declaration"], | ||||||
|         ), |         ), | ||||||
|     ], |     ], | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Todd Gamblin
					Todd Gamblin