summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2020-04-19 00:30:30 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2020-11-17 10:04:13 -0800
commit51cb49743e6f81456843200c203c0669eb39ac2a (patch)
treeac69b4d3e702fe9d18fd28696711ee910a5e38e6 /lib
parent43e7255e1942d30452ee7330a6c3f8c3a2613cf7 (diff)
downloadspack-51cb49743e6f81456843200c203c0669eb39ac2a.tar.gz
spack-51cb49743e6f81456843200c203c0669eb39ac2a.tar.bz2
spack-51cb49743e6f81456843200c203c0669eb39ac2a.tar.xz
spack-51cb49743e6f81456843200c203c0669eb39ac2a.zip
tests: add framework to mock targets
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/platforms/test.py6
-rw-r--r--lib/spack/spack/test/concretize.py4
-rw-r--r--lib/spack/spack/test/conftest.py37
-rw-r--r--lib/spack/spack/test/data/microarchitectures/microarchitectures.json486
-rw-r--r--lib/spack/spack/test/spec_semantics.py4
5 files changed, 530 insertions, 7 deletions
diff --git a/lib/spack/spack/platforms/test.py b/lib/spack/spack/platforms/test.py
index 3480275328..32007394b1 100644
--- a/lib/spack/spack/platforms/test.py
+++ b/lib/spack/spack/platforms/test.py
@@ -14,9 +14,9 @@ class Test(Platform):
if platform.system().lower() == 'darwin':
binary_formats = ['macho']
- front_end = 'x86'
- back_end = 'x86_64'
- default = 'x86_64'
+ front_end = 'x86_64'
+ back_end = 'core2'
+ default = 'core2'
front_os = 'redhat6'
back_os = 'debian6'
diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py
index 02305d84b5..b90a948204 100644
--- a/lib/spack/spack/test/concretize.py
+++ b/lib/spack/spack/test/concretize.py
@@ -230,7 +230,7 @@ class TestConcretize(object):
spec.concretize()
assert spec['cmake'].architecture == spec.architecture
- def test_architecture_deep_inheritance(self):
+ def test_architecture_deep_inheritance(self, mock_targets):
"""Make sure that indirect dependencies receive architecture
information from the root even when partial architecture information
is provided by an intermediate dependency.
@@ -243,7 +243,7 @@ class TestConcretize(object):
mock_repo.add_package('foopkg', [barpkg], [default_dep])
with spack.repo.swap(mock_repo):
- spec = Spec('foopkg %clang@3.3 os=CNL target=footar' +
+ spec = Spec('foopkg %gcc@4.5.0 os=CNL target=nocona' +
' ^barpkg os=SuSE11 ^bazpkg os=be')
spec.concretize()
diff --git a/lib/spack/spack/test/conftest.py b/lib/spack/spack/test/conftest.py
index af77684329..0a9d1e6a7b 100644
--- a/lib/spack/spack/test/conftest.py
+++ b/lib/spack/spack/test/conftest.py
@@ -8,6 +8,7 @@ import contextlib
import errno
import inspect
import itertools
+import json
import os
import os.path
import shutil
@@ -17,6 +18,8 @@ import xml.etree.ElementTree
import py
import pytest
+import llnl.util.cpu.microarchitecture
+import llnl.util.cpu.schema
from llnl.util.filesystem import mkdirp, remove_linked_tree
import spack.architecture
@@ -449,6 +452,40 @@ def default_config():
@pytest.fixture(scope='session')
+def mock_uarch_json(tmpdir_factory):
+ """Mock microarchitectures.json with test architecture descriptions."""
+ tmpdir = tmpdir_factory.mktemp('microarchitectures')
+
+ uarch_json = py.path.local(spack.paths.test_path).join(
+ "data", "microarchitectures", "microarchitectures.json")
+ uarch_json.copy(tmpdir)
+ yield str(tmpdir.join("microarchitectures.json"))
+
+
+@pytest.fixture(scope='session')
+def mock_uarch_configuration(mock_uarch_json):
+ """Create mock dictionaries for the llnl.util.cpu."""
+ def load_json():
+ with open(mock_uarch_json) as f:
+ return json.load(f)
+
+ targets_json = llnl.util.cpu.schema.LazyDictionary(load_json)
+ targets = llnl.util.cpu.microarchitecture.LazyDictionary(
+ llnl.util.cpu.microarchitecture._known_microarchitectures)
+
+ yield targets_json, targets
+
+
+@pytest.fixture(scope='function')
+def mock_targets(mock_uarch_configuration, monkeypatch):
+ """Use this fixture to enable mock uarch targets for testing."""
+ targets_json, targets = mock_uarch_configuration
+
+ monkeypatch.setattr(llnl.util.cpu.schema, "targets_json", targets_json)
+ monkeypatch.setattr(llnl.util.cpu.microarchitecture, "targets", targets)
+
+
+@pytest.fixture(scope='session')
def configuration_dir(tmpdir_factory, linux_os):
"""Copies mock configuration files in a temporary directory. Returns the
directory path.
diff --git a/lib/spack/spack/test/data/microarchitectures/microarchitectures.json b/lib/spack/spack/test/data/microarchitectures/microarchitectures.json
new file mode 100644
index 0000000000..690d49ffdc
--- /dev/null
+++ b/lib/spack/spack/test/data/microarchitectures/microarchitectures.json
@@ -0,0 +1,486 @@
+{
+ "microarchitectures": {
+ "x86": {
+ "from": null,
+ "vendor": "generic",
+ "features": []
+ },
+ "i686": {
+ "from": "x86",
+ "vendor": "GenuineIntel",
+ "features": []
+ },
+ "pentium2": {
+ "from": "i686",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx"
+ ]
+ },
+ "pentium3": {
+ "from": "pentium2",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse"
+ ]
+ },
+ "pentium4": {
+ "from": "pentium3",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2"
+ ]
+ },
+ "prescott": {
+ "from": "pentium4",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "sse3"
+ ]
+ },
+ "x86_64": {
+ "from": null,
+ "vendor": "generic",
+ "features": [],
+ "compilers": {
+ "gcc": [
+ {
+ "versions": "4.2.0:",
+ "name": "x86-64",
+ "flags": "-march={name} -mtune=generic"
+ },
+ {
+ "versions": ":4.1.2",
+ "name": "x86-64",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ],
+ "clang": [
+ {
+ "versions": "0.0.0-apple:",
+ "name": "x86-64",
+ "flags": "-march={name}"
+ },
+ {
+ "versions": ":",
+ "name": "x86-64",
+ "flags": "-march={name} -mtune=generic"
+ }
+ ],
+ "intel": {
+ "versions": ":",
+ "name": "pentium4",
+ "flags": "-march={name} -mtune=generic"
+ }
+ }
+ },
+ "nocona": {
+ "from": "x86_64",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "sse3"
+ ],
+ "compilers": {
+ "gcc": {
+ "versions": "4.0.4:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": {
+ "versions": "16.0:",
+ "name": "pentium4",
+ "flags": "-march={name} -mtune=generic"
+ }
+ }
+ },
+ "core2": {
+ "from": "nocona",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3"
+ ],
+ "compilers": {
+ "gcc": {
+ "versions": "4.3.0:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": {
+ "versions": "16.0:",
+ "flags": "-march={name} -mtune={name}}"
+ }
+ }
+ },
+ "nehalem": {
+ "from": "core2",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3",
+ "sse4_1",
+ "sse4_2",
+ "popcnt"
+ ],
+ "compilers": {
+ "gcc": [
+ {
+ "versions": "4.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ {
+ "versions": "4.6:4.8.5",
+ "name": "corei7",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ],
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": {
+ "versions": "16.0:",
+ "name": "corei7",
+ "flags": "-march={name} -mtune={name}"
+ }
+ }
+ },
+ "westmere": {
+ "from": "nehalem",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ "aes",
+ "pclmulqdq"
+ ],
+ "compilers": {
+ "gcc": {
+ "versions": "4.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": {
+ "versions": "16.0:",
+ "name": "corei7",
+ "flags": "-march={name} -mtune={name}"
+ }
+ }
+ },
+ "sandybridge": {
+ "from": "westmere",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ "aes",
+ "pclmulqdq",
+ "avx"
+ ],
+ "compilers": {
+ "gcc": [
+ {
+ "versions": "4.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ {
+ "versions": "4.6:4.8.5",
+ "name": "corei7-avx",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ],
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": [
+ {
+ "versions": "16.0:17.9.0",
+ "name": "corei7-avx",
+ "flags": "-march={name} -mtune={name}"
+ },
+ {
+ "versions": "18.0:",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ]
+ }
+ },
+ "ivybridge": {
+ "from": "sandybridge",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ "aes",
+ "pclmulqdq",
+ "avx",
+ "rdrand",
+ "f16c"
+ ],
+ "compilers": {
+ "gcc": [
+ {
+ "versions": "4.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ {
+ "versions": "4.6:4.8.5",
+ "name": "core-avx-i",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ],
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": [
+ {
+ "versions": "16.0:17.9.0",
+ "name": "core-avx-i",
+ "flags": "-march={name} -mtune={name}"
+ },
+ {
+ "versions": "18.0:",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ]
+ }
+ },
+ "haswell": {
+ "from": "ivybridge",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ "aes",
+ "pclmulqdq",
+ "avx",
+ "rdrand",
+ "f16c",
+ "movbe",
+ "fma",
+ "avx2",
+ "bmi1",
+ "bmi2"
+ ],
+ "compilers": {
+ "gcc": [
+ {
+ "versions": "4.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ {
+ "versions": "4.8:4.8.5",
+ "name": "core-avx2",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ],
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": [
+ {
+ "versions": "16.0:17.9.0",
+ "name": "core-avx2",
+ "flags": "-march={name} -mtune={name}"
+ },
+ {
+ "versions": "18.0:",
+ "flags": "-march={name} -mtune={name}"
+ }
+ ]
+ }
+ },
+ "broadwell": {
+ "from": "haswell",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ "aes",
+ "pclmulqdq",
+ "avx",
+ "rdrand",
+ "f16c",
+ "movbe",
+ "fma",
+ "avx2",
+ "bmi1",
+ "bmi2",
+ "rdseed",
+ "adx"
+ ],
+ "compilers": {
+ "gcc": {
+ "versions": "4.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": {
+ "versions": "18.0:",
+ "flags": "-march={name} -mtune={name}"
+ }
+ }
+ },
+ "skylake": {
+ "from": "broadwell",
+ "vendor": "GenuineIntel",
+ "features": [
+ "mmx",
+ "sse",
+ "sse2",
+ "ssse3",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ "aes",
+ "pclmulqdq",
+ "avx",
+ "rdrand",
+ "f16c",
+ "movbe",
+ "fma",
+ "avx2",
+ "bmi1",
+ "bmi2",
+ "rdseed",
+ "adx",
+ "clflushopt",
+ "xsavec",
+ "xsaveopt"
+ ],
+ "compilers": {
+ "gcc": {
+ "versions": "6.0:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "clang": {
+ "versions": "3.9:",
+ "flags": "-march={name} -mtune={name}"
+ },
+ "intel": {
+ "versions": "18.0:",
+ "flags": "-march={name} -mtune={name}"
+ }
+ }
+ }
+ },
+ "feature_aliases": {
+ "sse3": {
+ "reason": "ssse3 is a superset of sse3 and might be the only one listed",
+ "any_of": [
+ "ssse3"
+ ]
+ },
+ "avx512": {
+ "reason": "avx512 indicates generic support for any of the avx512 instruction sets",
+ "any_of": [
+ "avx512f",
+ "avx512vl",
+ "avx512bw",
+ "avx512dq",
+ "avx512cd"
+ ]
+ },
+ "fma": {
+ "reason": "FMA has been supported by PowerISA since Power1, but might not be listed in features",
+ "families": [
+ "ppc64le",
+ "ppc64"
+ ]
+ },
+ "sse4.1": {
+ "reason": "permits to refer to sse4_1 also as sse4.1",
+ "any_of": [
+ "sse4_1"
+ ]
+ },
+ "sse4.2": {
+ "reason": "permits to refer to sse4_2 also as sse4.2",
+ "any_of": [
+ "sse4_2"
+ ]
+ }
+ },
+ "conversions": {
+ "description": "Conversions that map some platform specific values to canonical values",
+ "arm_vendors": {
+ "0x41": "ARM",
+ "0x42": "Broadcom",
+ "0x43": "Cavium",
+ "0x44": "DEC",
+ "0x46": "Fujitsu",
+ "0x48": "HiSilicon",
+ "0x49": "Infineon Technologies AG",
+ "0x4d": "Motorola",
+ "0x4e": "Nvidia",
+ "0x50": "APM",
+ "0x51": "Qualcomm",
+ "0x53": "Samsung",
+ "0x56": "Marvell",
+ "0x61": "Apple",
+ "0x66": "Faraday",
+ "0x68": "HXT",
+ "0x69": "Intel"
+ },
+ "darwin_flags": {
+ "sse4.1": "sse4_1",
+ "sse4.2": "sse4_2",
+ "avx1.0": "avx",
+ "clfsopt": "clflushopt",
+ "xsave": "xsavec xsaveopt"
+ }
+ }
+}
diff --git a/lib/spack/spack/test/spec_semantics.py b/lib/spack/spack/test/spec_semantics.py
index 4d221378c7..330a1d7a0a 100644
--- a/lib/spack/spack/test/spec_semantics.py
+++ b/lib/spack/spack/test/spec_semantics.py
@@ -965,8 +965,8 @@ class TestSpecSematics(object):
with pytest.raises(SpecError):
spec.prefix
- def test_forwarding_of_architecture_attributes(self):
- spec = Spec('libelf').concretized()
+ def test_forwarding_of_architecture_attributes(self, mock_targets):
+ spec = Spec('libelf target=x86_64').concretized()
# Check that we can still access each member through
# the architecture attribute