aimk is a wrapper program for make, used to portably select options to build PVM and PVM applications on
various machines. Each port of PVM is assigned an architecturename. The name is used both during
compilation (to conditionally switch in code) and at runtime (to select an executable or host).
aimk uses the value of environment variable $PVM_ARCH if it is set, otherwise it calls
$PVM_ROOT/pvmgetarch to determine the architecture name. pvmgetarch is a script that sniffs at various
parts of the system to determine the correct architecture name. It is updated as new PVM ports are
defined, and can be augmented locally.
aimk determines the machine architecture and execs make, passing it the architecture and a configuration
file along with arguments supplied to aimk. It runs make in a subdirectory to prevent executables from
becoming intermixed and to permit overlapping compiles. A different makefile can be placed in each
subdirectory or a single makefile, Makefile.aimk, can be shared between architectures. Per-architecture
definitions from the $PVM_ROOT/conf directory are appended to the common makefile. aimk calls make is
called in one of three ways, depending on what makefiles are present:
i. If $PVM_ARCH/Makefile or $PVM_ARCH/makefile exists, change directory to $PVM_ARCH and exec make
there:
(cd $PVM_ARCH ; make PVM_ARCH=$PVM_ARCH < aimk args >)
ii. Else if Makefile.aimk exists, create $PVM_ARCH directory if it doesn't exist, then:
(cd $PVM_ARCH ; \
make -f $PVM_ROOT/conf/$PVM_ARCH.def \
-f ../Makefile.aimk PVM_ARCH=$PVM_ARCH < aimk args >)
iii. Else just exec make in current directory:
make PVM_ARCH=$PVM_ARCH < aimk args >
If aimk succeeds in calling make, the exit status is that of make, otherwise it is 1.