su2 fixes and improvements: AD, scipy/numpy, and Mutationpp setup, environment variable (#46774)

* su2 fixes and improvements: AD, scipy/numpy, and Mutationpp setup, environment variable

* su2: Conflict %gcc@13: when @:7, mpp was added with @7.1.0

* py-scipy: SciPy 1.14: requires GCC >= 9.1

---------

Co-authored-by: Bernhard Kaindl <bernhardkaindl7@gmail.com>
This commit is contained in:
kjrstory 2024-10-10 23:19:05 +09:00 committed by GitHub
parent 7a8955597d
commit bc662b8764
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 56 additions and 24 deletions

View File

@ -13,12 +13,14 @@ class Medipack(CMakePackage):
homepage = "https://github.com/SciCompKL/MeDiPack"
url = "https://github.com/SciCompKL/MeDiPack/archive/refs/tags/v1.2.2.tar.gz"
version("1.3.0", sha256="81daf8391ca00286a1276408badc7f1c9f76af889eb16940601c0ffb5f229e1d")
version("1.2.2", sha256="8937fa1025c6fb12f516cacf38a7f776221e7e818b30f17ce334c63f78513aa7")
version("1.2.1", sha256="c746196b98cfe24a212584cdb88bd12ebb14f4a54728070d605e0c6d0e75db8a")
depends_on("cxx", type="build") # generated
depends_on("cmake@3.12:", type="build", when="@1.2.2:")
depends_on("mpi")
build_system(
conditional("cmake", when="@1.2.2:"),
@ -27,7 +29,7 @@ class Medipack(CMakePackage):
)
def install(self, spec, prefix):
mkdirp(join_path(prefix, "include"))
install_tree(join_path(self.stage.source_path, "include"), join_path(prefix, "include"))
mkdirp(join_path(prefix, "src"))
install_tree(join_path(self.stage.source_path, "src"), join_path(prefix, "src"))
mkdirp(self.prefix.include)
install_tree(join_path(self.stage.source_path, "include"), self.prefix.include)
mkdirp(self.prefix.src)
install_tree(join_path(self.stage.source_path, "src"), self.prefix.src)

View File

@ -136,7 +136,8 @@ class PyScipy(PythonPackage):
# meson.build
# https://docs.scipy.org/doc/scipy/dev/toolchain.html#compilers
conflicts("%gcc@:7", when="@1.10:", msg="SciPy requires GCC >= 8.0")
conflicts("%gcc@:7", when="@1.10:", msg="SciPy 1.10-1.13 requires GCC >= 8.0")
conflicts("%gcc@:9.0", when="@1.14:", msg="SciPy 1.14: requires GCC >= 9.1")
conflicts("%gcc@:4.7", when="@:1.9", msg="SciPy requires GCC >= 4.8")
conflicts("%apple-clang@:9", when="@1.10:", msg="SciPy requires Apple Clang >= 10")
conflicts(

View File

@ -38,6 +38,9 @@ class Su2(MesonPackage):
version("7.0.0", sha256="6207dcca15eaebc11ce12b2866c937b4ad9b93274edf6f23d0487948ac3963b8")
version("6.2.0", sha256="ffc953326e8432a1a6534556a5f6cf086046d3149cfcec6b4e7390eebe30ce2e")
# @:7 is missing few <cstdint> includes, causing a few files to fail with %gcc@13:
conflicts("%gcc@13:", when="@:7")
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated
@ -60,6 +63,8 @@ class Su2(MesonPackage):
depends_on("meson@0.61.1:", type=("build"))
depends_on("python@3:", type=("build", "run"))
depends_on("py-numpy", type="run")
depends_on("py-scipy", type="run")
depends_on("zlib-api")
depends_on("pkgconfig")
depends_on("mpi", when="+mpi")
@ -69,14 +74,12 @@ class Su2(MesonPackage):
depends_on("openblas", when="+openblas ~mkl")
depends_on("cmake", type="build", when="+mpp")
depends_on("codipack@:1.9.3", when="+autodiff")
depends_on("codipack@:1.9.3", when="+directdiff")
depends_on("medipack", when="+autodiff +mpi")
depends_on("medipack", when="+directdiff +mpi")
for diff_type in ("+autodiff", "+directdiff"):
with when(diff_type):
depends_on("codipack@1.9.3", when="@:7.5.1")
depends_on("codipack@2.2.0:", when="@8.0.0:")
depends_on("medipack", when="+mpi")
depends_on("opdilib", when="+autodiff +openmp")
depends_on("opdilib", when="+directdiff +openmp")
depends_on("codipack@openmp", when="+autodiff +openmp")
depends_on("codipack@openmp", when="+directdiff +openmp")
# Remove the part that fixes the meson version to 0.61.1.
# This fix is considered meaningless and will be removed in the next version(@7.6:) of SU2.
@ -93,17 +96,13 @@ def patch(self):
"meson.build",
)
if (
self.spec.satisfies("+autodiff") or self.spec.satisfies("+directdiff")
) and self.spec.satisfiles("+mpi"):
filter_file(
"externals/medi/include", self.spec["medipack"].prefix.include, "meson.build"
)
filter_file("externals/medi/src", self.spec["medipack"].prefix.src, "meson.build")
if self.spec.satisfies("+mpi"):
filter_file(
"externals/medi/include", self.spec["medipack"].prefix.include, "meson.build"
)
filter_file("externals/medi/src", self.spec["medipack"].prefix.src, "meson.build")
if (
self.spec.satisfies("+autodiff") or self.spec.satisfies("+directdiff")
) and self.spec.satisfies("+openmp"):
if self.spec.satisfies("+autodiff") and self.spec.satisfies("+openmp"):
filter_file(
"externals/opdi/include", self.spec["opdilib"].prefix.include, "meson.build"
)
@ -113,6 +112,13 @@ def patch(self):
"meson.build",
)
if self.spec.satisfies("+mpp") and self.spec.satisfies("@8.0:"):
filter_file(
r"join_paths\(meson\.project_source_root\(\), 'ninja'\)",
f"join_paths('{self.spec['ninja'].prefix.bin}', 'ninja')",
"meson.build",
)
def meson_args(self):
args = [
"-Dwith-omp={}".format("+openmp" in self.spec),
@ -123,16 +129,39 @@ def meson_args(self):
"-Denable-pywrapper={}".format("+pywrapper" in self.spec),
"-Denable-mkl={}".format("+mkl" in self.spec),
"-Denable-openblas={}".format("+openblas" in self.spec),
"-Denable-mpp={}".format("+mpp" in self.spec),
"-Denable-mixedprec={}".format("+midexprec" in self.spec),
]
if self.spec.version >= Version("7.1.0"):
args.append("-Denable-mpp={}".format("+mpp" in self.spec))
if "+mkl" in self.spec:
args.append("-Dmkl_root=" + self.spec["intel-oneapi-mkl"].prefix)
if "+mpi" in self.spec:
args.append("-Dwith-mpi=enabled")
args.append("-Dwith-mpi=auto")
else:
args.append("-Dwith-mpi=disabled")
return args
@run_after("install")
def install_mpp(self):
if "+mpp" in self.spec:
mkdirp(join_path(self.prefix, "mpp-data"))
mkdirp(join_path(self.prefix, "lib"))
install_tree(
join_path(self.stage.source_path, "subprojects", "Mutationpp", "data"),
join_path(self.prefix, "mpp-data"),
)
install_tree(
join_path(self.build_directory, "subprojects", "Mutationpp"), self.prefix.lib
)
def setup_run_environment(self, env):
env.set("su2_run", self.prefix.bin)
env.set("su2_home", self.prefix)
env.prepend_path("path", self.prefix.bin)
env.prepend_path("pythonpath", self.prefix.bin)
if "+mpp" in self.spec:
env.set("mpp_data_directory", join_path(self.prefix, "mpp-data"))
env.prepend_path("ld_library_path", self.prefix.lib)