@@ -8,7 +8,7 @@ easyconfig is all that you need to create in order to build and install
88the software and the corresponding module file.
99
1010Luckily, 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
1212extraction/copy pattern. In that case, a * generic easyblock* can be
1313leveraged; see [ Overview of generic easyblocks] [ generic_easyblocks ] .
1414
@@ -194,7 +194,7 @@ The intention is to move towards making `sha256` the recommended and
194194default checksum type.
195195
196196Other 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
198198specific type, elements of the ` checksums ` list can also be 2-element
199199tuples of the form ` ('<checksum type>', '<checksum value>') ` . For
200200example:
@@ -443,7 +443,7 @@ checksums, but a different checksum type can be specified as an argument
443443
444444In some cases, it can be required to provide additional information next
445445to 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
447447filename that should be used to download the source file.
448448
449449This 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
599601Example:
600602
@@ -628,7 +630,7 @@ generated module file.
628630
629631When a [ ` system ` toolchain] [ system_toolchain ] is used, the
630632modules 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 ,
826828see the [ FFTW easyconfig
827829files] ( 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