Skip to content

Commit f93dbf6

Browse files
committed
Document architecture-dicts for dependency versions and sanity_check_paths
1 parent b960d46 commit f93dbf6

1 file changed

Lines changed: 48 additions & 6 deletions

File tree

docs/writing-easyconfig-files.md

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ easyconfig is all that you need to create in order to build and install
88
the software and the corresponding module file.
99

1010
Luckily, the majority of software delivery mechanisms are being designed
11-
around either autotools or CMake or, perhaps, some simple file
11+
around either Autotools or CMake or, perhaps, some simple file
1212
extraction/copy pattern. In that case, a *generic easyblock* can be
1313
leveraged; see [Overview of generic easyblocks][generic_easyblocks].
1414

@@ -194,7 +194,7 @@ The intention is to move towards making `sha256` the recommended and
194194
default checksum type.
195195

196196
Other checksum types are also supported: `adler32`, `crc32`, `sha1`,
197-
`sha512`, `size` (filesize in bytes). To provide checksum values of a
197+
`sha512`, `size` (file size in bytes). To provide checksum values of a
198198
specific type, elements of the `checksums` list can also be 2-element
199199
tuples of the form `('<checksum type>', '<checksum value>')`. For
200200
example:
@@ -443,7 +443,7 @@ checksums, but a different checksum type can be specified as an argument
443443

444444
In some cases, it can be required to provide additional information next
445445
to the name of a source file, e.g., a custom extraction command (because
446-
the one derived from the file extension is not correct), or an altername
446+
the one derived from the file extension is not correct), or an alternate
447447
filename that should be used to download the source file.
448448

449449
This can be specified using a Python dictionary value in the `sources`
@@ -474,7 +474,7 @@ sources = [{
474474

475475
!!! note
476476
Custom extraction commands can also be specified as a 2-element tuple, but this format has been deprecated
477-
in favour of the Python dictionary format described above; see also
477+
in favor of the Python dictionary format described above; see also
478478
[Specifying source files as 2-element tuples to provide a custom extraction command][depr_sources_2_element_tuple].
479479

480480
#### Using `download_instructions` for user-side part of installation { : #download_instructions }
@@ -595,6 +595,8 @@ Remarks:
595595
- modules must exist for all (non-system) dependencies
596596
- (non-system) dependencies can be resolved via `--robot`
597597
- format: `(<name>, <version>[, <versionsuffix>[, <toolchain>]])`
598+
- An [architecture specific](#architecture-specific-values) version is possible.
599+
This also allows adding or removing a dependency for a specific architecture.
598600

599601
Example:
600602

@@ -628,7 +630,7 @@ generated module file.
628630

629631
When a [`system` toolchain][system_toolchain] is used, the
630632
modules for each of the (build) dependencies are *always* loaded,
631-
regardless of the toolchain version (as opposed the behaviour with the
633+
regardless of the toolchain version (as opposed the behavior with the
632634
`dummy` toolchain in EasyBuild versions prior to v4.0, see
633635
[Motivation for deprecating the `dummy` toolchain][system_toolchain_motivation_deprecating_dummy]).
634636

@@ -822,7 +824,7 @@ would result in:
822824
- `./configure --prefix=... --two; make lib; TYPE=two make install`
823825
- `./configure --prefix=... --three; make lib; TYPE=three make install`
824826

825-
An example use case of this is building FFTW with different precisions,
827+
An example use case of this is building FFTW with different precision,
826828
see the [FFTW easyconfig
827829
files](https://github.com/easybuilders/easybuild-easyconfigs/tree/main/easybuild/easyconfigs/f/FFTW).
828830

@@ -845,6 +847,7 @@ Remarks:
845847
- paths are *relative* to installation directory
846848
- for a path specified as a tuple, only one of the specified paths
847849
must be available
850+
- [architecture specific](#architecture-specific-values) lists are possible
848851
- default values:
849852
- paths: non-empty `bin` and `lib` or `lib64` directories
850853
- commands: none
@@ -1059,6 +1062,45 @@ sources = [SOURCELOWER_TAR_GZ] # gcc-4.8.3.tar.gz
10591062
make `--try-software-version` behave as expected (see also
10601063
[Tweaking existing easyconfig files][tweaking_easyconfigs_using_try]).
10611064
1065+
## Architecture specific values
1066+
1067+
For some easyconfig parameters it is possible to provide architecture specific values by using a dictionary
1068+
with keys in the format `arch=<val>`.
1069+
They key `arch=*` will be used when there was no other match.
1070+
1071+
In `dependencies` this can be used as the *version* to use different ones, e.g. when a newer version has a known issue.
1072+
Using `False` will cause the dependency to be removed.
1073+
It is en **error** if no matching key (which includes `arch=*`) for the current architecture is found.
1074+
1075+
In the values of `sanity_check_paths` this can be used to require files/folders that are only present on specific architectures.
1076+
When the current architecture is missing in the keys, or the value is `None` the item will be skipped.
1077+
1078+
Example:
1079+
1080+
``` python
1081+
dependencies=[
1082+
('imkl', {
1083+
'arch=x86_64': '2021.4.0',
1084+
'arch=AArch32': '2021.3.0',
1085+
'arch=*': False
1086+
}, '', SYSTEM),
1087+
]
1088+
1089+
sanity_check_paths = {
1090+
'files': [{
1091+
'arch=AArch64': 'lib_arm.a',
1092+
'arch=x86_64': 'lib_intel.a',
1093+
},
1094+
'lib_generic.a', # Always checked (additionally)
1095+
],
1096+
'dirs': [{
1097+
'arch=RISCV64': ('data/risc'),
1098+
'arch=*': 'data/other',
1099+
},
1100+
],
1101+
},
1102+
```
1103+
10621104
## Version-specific documentation relevant to easyconfigs
10631105
10641106
- [Available config file constants][avail_cfgfile_constants]

0 commit comments

Comments
 (0)