Skip to content

Commit

Permalink
nvhpc: Do not use -Wno-error with nvhpc (spack#44142)
Browse files Browse the repository at this point in the history
In spack#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 <[email protected]>
Co-authored-by: Tom Scogland <[email protected]>
Signed-off-by: Todd Gamblin <[email protected]>
  • Loading branch information
3 people authored Jun 4, 2024
1 parent 259629c commit 89a0c9f
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 9 deletions.
30 changes: 26 additions & 4 deletions lib/spack/spack/package_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -621,10 +621,6 @@ class PackageBase(WindowsRPath, PackageViewMixin, RedistributionMixin, metaclass
#: By default do not run tests within package's install()
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.
extendable = False

Expand Down Expand Up @@ -930,6 +926,32 @@ def global_license_file(self):
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("%[email protected]:"):
# 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
def version(self):
if not self.spec.versions.concrete:
Expand Down
10 changes: 5 additions & 5 deletions lib/spack/spack/test/cc.py
Original file line number Diff line number Diff line change
Expand Up @@ -828,14 +828,14 @@ def test_keep_and_replace(wrapper_environment):
),
(
"config:flags:keep_werror:specific",
["-Werror", "-Werror=specific", "-bah"],
["-Werror=specific", "-bah"],
["-Werror", "-Werror=specific", "-Werror-specific2", "-bah"],
["-Wno-error", "-Werror=specific", "-Werror-specific2", "-bah"],
["-Werror"],
),
(
"config:flags:keep_werror:none",
["-Werror", "-Werror=specific", "-bah"],
["-bah", "-Wno-error", "-Wno-error=specific"],
["-Wno-error", "-Wno-error=specific", "-bah"],
["-Werror", "-Werror=specific"],
),
# check non-standard -Werror opts like -Werror-implicit-function-declaration
Expand All @@ -848,13 +848,13 @@ def test_keep_and_replace(wrapper_environment):
(
"config:flags:keep_werror:specific",
["-Werror", "-Werror-implicit-function-declaration", "-bah"],
["-Werror-implicit-function-declaration", "-bah", "-Wno-error"],
["-Wno-error", "-Werror-implicit-function-declaration", "-bah"],
["-Werror"],
),
(
"config:flags:keep_werror:none",
["-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"],
),
],
Expand Down

0 comments on commit 89a0c9f

Please sign in to comment.