Page 1 of 1

Compiling VASP.6.1.1 on a macOS Catalina 10.15.6-errors

Posted: Wed Sep 16, 2020 7:08 pm
by nicholas_dimakis1
Hello

I have a problem compiling VASP.6.1.1 on a macOS Catalina 10.15.6. I use gfortran. Both the make.include and the output from the make command files are included as attachments. I copy the crash here.

% make
if [ ! -d build/std ] ; then mkdir build/std ; fi; \
cp src/makefile src/.objects makefile.include build/std ; \
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C build/std VERSION=std all
rsync -ru ../../src/lib .
cp makefile.include lib
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C lib -j1
make libdmy.a
gcc -O -c -o getshmem.o getshmem.c
getshmem.c:23:42: error: use of undeclared identifier 'SHM_NORESERVE'
shmflg = IPC_CREAT | IPC_EXCL | 0600 | SHM_NORESERVE ;
^
getshmem.c:40:42: error: use of undeclared identifier 'SHM_NORESERVE'
shmflg = IPC_CREAT | IPC_EXCL | 0600 | SHM_NORESERVE ;
^
2 errors generated.
make[3]: *** [getshmem.o] Error 1
make[2]: *** [all] Error 2
make[1]: *** [lib] Error 2
make: *** [std] Error 2

Thank you,
Nick

Re: Compiling VASP.6.1.1 on a macOS Catalina 10.15.6-errors

Posted: Tue Sep 22, 2020 11:56 am
by chengcheng_xiao1
The fix can be found here https://thelostelectron.wordpress.com/tag/vasp/.

Note that installing VASP on your laptop might be a violation of the user agreement.

Re: Compiling VASP.6.1.1 on a macOS Catalina 10.15.6-errors

Posted: Thu Oct 01, 2020 5:45 am
by henrique_miranda
Note that the solution posted above might fix the compilation but it does not explain the issue or why and if the fix works.

The getshmem.c file contains a custom implementation of shared memory used by VASP.
If you look inside the code you will see specific system calls for example: shmget
here is the Linux manual:
https://man7.org/linux/man-pages/man2/shmget.2.html
there is a macOS counterpart:
https://developer.apple.com/library/arc ... get.2.html

This system call is specific of System V: https://en.wikipedia.org/wiki/UNIX_System_V
Without going into too much details, this is a function is provided by the operating system which might or might not be implemented in macOS with the same arguments as Linux.
This seemd to be the case here: the SHM_NORESERVE option does not exist in macOS (and hence not defined in the header) so the function should not be called in the same way as in Linux.
As such, I would say that the fix suggested above is not the most appropriate.

Note that you only need the getshmem.o object when you want to use the custom shared memory implementation inside VASP i.e. when '-Duse_shmem -Dshmem_rproj -Dshmem_bcast_buffer' are present in CPP_OPTIONS.
If this is not the case, the proper fix would be to remove getshmem.o from OBJECTS_LIB and skip the compilation of this file altogether.

TL;DR
The shared memory feature provided by getshmem.c is not officially supported on macOS, as such you should:
- NOT use any of the -Duse_shmem -Dshmem_rproj -Dshmem_bcast_buffer in CPP_OPTIONS
- remove getshmem.o from OBJECTS_LIB