/
package.py
103 lines (85 loc) · 3.65 KB
/
package.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Openmx(MakefilePackage):
"""OpenMX (Open source package for Material eXplorer) is a software
package for nano-scale material simulations based on density functional
theories (DFT), norm-conserving pseudopotentials, and pseudo-atomic
localized basis functions.
"""
homepage = "http://www.openmx-square.org/index.html"
url = "https://t-ozaki.issp.u-tokyo.ac.jp/openmx3.8.tar.gz"
version("3.9", sha256="27bb56bd4d1582d33ad32108fb239b546bdd1bdffd6f5b739b4423da1ab93ae2")
version("3.8", sha256="36ee10d8b1587b25a2ca1d57f110111be65c4fb4dc820e6d93e1ed2b562634a1")
resource(
name="patch",
url="http://www.openmx-square.org/bugfixed/18June12/patch3.8.5.tar.gz",
sha256="d0fea2ce956d796a87a4bc9e9d580fb115ff2a22764650fffa78bb79a1b30468",
placement="patch",
when="@3.8",
)
resource(
name="patch",
url="http://www.openmx-square.org/bugfixed/21Oct17/patch3.9.9.tar.gz",
sha256="20cccc4e3412a814a53568f400260e90f79f0bfb7e2bed84447fe071b26edd38",
placement="patch",
when="@3.9",
)
depends_on("mpi")
depends_on("fftw-api@3")
depends_on("scalapack")
depends_on("sse2neon", when="target=aarch64:")
patch("for_aarch64.patch", when="@3.8 target=aarch64:")
parallel = False
build_directory = "source"
def edit(self, spec, prefix):
# Move contents to source/
# http://www.openmx-square.org/bugfixed/18June12/README.txt
copy_tree("patch", "source")
# Move extra file for 3.9 patch
# http://www.openmx-square.org/bugfixed/21Oct17/README.txt
if spec.satisfies("@3.9"):
copy(join_path("source", "kpoint.in"), "work")
makefile = FileFilter("./source/makefile")
makefile.filter("^DESTDIR.*$", "DESTDIR = {0}/bin".format(prefix))
mkdirp(prefix.bin)
@property
def common_arguments(self):
spec, common_option = self.spec, []
lapack_blas_libs = spec["lapack"].libs + spec["blas"].libs + spec["scalapack"].libs
cc_option = [
spec["mpi"].mpicc,
self.compiler.openmp_flag,
spec["fftw-api"].headers.include_flags,
]
fc_option = [spec["mpi"].mpifc]
lib_option = [spec["fftw-api"].libs.ld_flags, lapack_blas_libs.ld_flags, "-lmpi_mpifh"]
if spec.satisfies("@3.8"):
cc_option.append("-I$(LIBERIDIR)")
if spec.satisfies("@3.9"):
lib_option.extend(["-lmpi_usempif08"])
lib_option.extend(["-lmpi_usempi_ignore_tkr"])
if "%fj" in spec:
common_option.append("-Dkcomp -Kfast")
cc_option.append("-Dnosse -Nclang")
fc_option.extend([self.compiler.openmp_flag, "-Ccpp"])
else:
common_option.append("-O3")
if "%gcc" in spec:
lib_option.append("-lgfortran")
if spec.satisfies("%gcc@10:"):
fc_option.append("-fallow-argument-mismatch")
cc_option.append("-fcommon")
return [
"CC={0} -Dscalapack {1} ".format(" ".join(cc_option), " ".join(common_option)),
"FC={0} {1}".format(" ".join(fc_option), " ".join(common_option)),
"LIB={0}".format(" ".join(lib_option)),
]
@property
def build_targets(self):
return ["all"] + self.common_arguments
@property
def install_targets(self):
return ["all"] + self.common_arguments