Hi Andy,
On 31/05/16 17:07, Andy Turner wrote:
Hi Kenneth,
On 31/05/2016 15:54, Kenneth Hoste wrote:
Hi Andy,
On 31/05/16 16:43, Andy Turner wrote:
Hi All,
This is probably a silly question but I could not determine the answer
from reading the docs or by examining the easyblock files themselves.
I want to write an easyblock for building VASP and am not sure which
generic block to start from (or even if I need to add a new one). The
basic build procedure consists of:
1) Unpack the source from a tarball located on the local file system
2) Write a "makefile.include" file with the correct options in the top
level of the unpacked source
3) Issue "make veryclean"
4) Issue "make all"
I looked at "makecp.py" and various other generic easyblocks but none
of them, as far as I can see, have a configure step that just consists
of writing a file.
Any help much appreciated
There's an easyconfig file for VASP included in EasyBuild v2.8.x, which
indeed uses the MakeCp easyblock,
see [1] (or "eb -S VASP" if you have EasyBuild v2.8.0 or more recent
installed).
It slightly goes beyond what is generally done in an easyconfig file
(copying makefile.include & patching it with sed), but it does allow to
avoid producing a custom easyblock...
Does that help?
regards,
Kenneth
[1]
https://github.com/hpcugent/easybuild-easyconfigs/blob/master/easybuild/easyconfigs/v/VASP/VASP-5.4.1-intel-2016.02-GCC-4.9.eb
Ah! I was looking for a block rather than just a config so missed
this. I see what it does now.
Actually, the "makefile.include" I want to use does not correspond to
any of the default supplied ones with VASP so simply copying across
from the source is not an option.
I could just put the file somewhere local and copy it across as in
your example but I really wanted to be able to capture the full build
logic in the framework (so it would be of use to other sites that do
not have access to our makefile.include on our local disk).
Is there a simple way to have a step that writes the makefile.include
before building so that I can encode all the settings or will I have
to write a new generic easyblock for this (e.g. WriteMake.py)? I guess
the other option is simply to use the MakeCp.py block and encode
writing makefile.include into the make step before I call the make
command but this seems to be breaking the spirit of the tool...
There is, you can include your custom makefile.include via the 'patches'
easyconfig parameter.
Next to actual patch files, you can also specify additional files that
should be copied into place somewhere; this seems like a perfect match...
Add something like this in your easyconfig file:
# copy my-makefile.include to makefile.include in build directory
patches = [('my-makefile.include', 'makefile.include')]
You can place my-makefile.include in either the same directory as the
easyconfig file, or where the VASP sources are picked up by EB.
Do let us know if this suffices or not.
regards,
Kenneth