= The PALM build script = The script to compile PALM and its [utility (pre-/postprocessing) programs] is called {{{palmbuild}}}. It resides under {{{trunk/SCRIPTS}}} and is invoked by the [wiki:doc/install/automatic automatic installer] as part of the installation process. It can also be executed manually, e.g. in case of a [#svnupdate PALM code update] from the svn repository, or code modifications by the user. Each modification of the source code requires new compilation.\\\\ {{{palmbuild}}}\\\\ * is steered by settings, e.g. about compiler options, in the [wiki:doc/app/palm_config configuration file] .palm.config.,\\\\ * compiles code based on the unix makefile mechanism,\\\\ * adds the created binaries to the directory MAKE_DEPOSITORY_,\\\\ * is automatically invoked by the PALM run script [wiki:doc/app/palmrun palmrun] in case this doesn't find the respective MAKE_DEPOSITORY_. \\ == Execute {{{palmbuild}}} == Assuming a configuration file named {{{.palm.config.default}}}, you need to type the command {{{ palmbuild -c default }}} Since you can have different configuration files (for different compilers, compiler options, or hosts), you need to specify the configuration file to-be-used by the option {{{-c}}}. The suffix {{{default}}} in this example is the , which can be an arbitrary ASCII-character string.\\ After entering the command, informative messages will appear in the terminal: {{{ #------------------------------------------------------------------------# | palmbuild 1.0 Rev: 3523 $ Wed Nov 21 09:47:10 CET 2018 | | PALM code Rev: 3524 | | | | called on: hostname (IP:111.11.111.111) | | config file: /home/kanani/palm/current_version/.palm.config.imuktrunk | | makefile: /home/kanani/palm/current_version/trunk/SOURCE/Makefile | | source path: /home/kanani/palm/current_version/trunk/SOURCE | | | | config. identifier: imuktrunk | | local depository: /home/kanani/palm/current_version/MAKE_DEPOSITORY_ | | imuktrunk | | username: kanani | | address: 130.75.105.106 | | compiler: mpif90 | | serial compiler: ifort | | make options: -j 4 | | cpp options: -cpp -D__parallel ... | | compiler options: -fpe0 -O3 ... | | linker options: -fpe0 -O3 ... | #------------------------------------------------------------------------# >>> continue (y(es)/c(ontinue)/a(bort)) ? }}} After confirmation (y(es)), compilation starts and compiler messages will appear. After successful completion, the binaries reside in the directory {{{MAKE_DEPOSITORY_default}}} under the path given by the variable [%base_directory] in the configuration file. When invoking {{{palmbuild}}} locally for compilation of PALM on a [link-to remote computer], sources are copied via {{{scp}}} to the remote host, and the compiler is called via {{{ssh}}} on the remote host as well. Here, the {{{MAKE_DEPOSITORY_default}}} also lands [%base_directory]. [=#svnupdate In] case you have updated the PALM code, you need to call {{{palmbuild}}} again: {{{ cd ~/palm/current_version svn update trunk palmbuild -c default }}} If you have changed the compiler options in the configuration file and like to re-compile the PALM code with the new options, you need to touch the source code files in your working copy of the repository first, {{{ touch trunk/SOURCE/*.f90 palmbuild -c default }}} because otherwise the make mechanism would see no changes in the source code and would not compile at all (message {{{make: Nothing to be done}}}). Alternatively, you may delete the MAKE_DEPOSITORY folder: {{{ rm -rf MAKE_DEPOSITORY_default palmbuild -c default }}} **However**, best practice would be to create [link-to individual .palm.config files] for the different configurations, because this prevents from having to re-compile over and over again whenever modifying and working with just one single .palm.config file. Of course, {{{palmbuild}}} has to be executed for each configuration. \\ == Options for {{{palmbuild}}} == ||='''option''' =||='''default value''' =||='''meaning''' =|| |----------- ||-c ||default ||configuration identifier. Tells {{{palmbuild}}} which configuration file is to be used. || ||-v ||--- ||to run in silent mode. Switches off most messages and queries || \\ == Automatic calls of {{{palmbuild}}} from {{{palmrun}}} == {{{palmbuild}}} is automatically called by {{{palmrun}}}, but only if {{{palmrun}}} has been manually called (i.e. if the {{{palmrun}}} call has been entered by the user in a terminal). There are two different calls for two different purposes: 1. If {{{palmrun}}} does not find a MAKE_DEPOSITORY folder, it calls {{{palmbuild}}} with the respective configuration identifier (e.g. {{{palmbuild -c default}}} in order to pre-compile PALM. 2. {{{palmbuild}}} is called to compile sources for the specific PALM run. This may be user-interface code (if there is any), or modified code from the working copy (i.e. from {{{.../trunk/SOURCE}}}) that has been specified by {{{palmrun}}} option {{{-s}}}. {{{palmrun}}} has put the respective source files (plus all other files from the MAKE_DEPOSITORY) into a newly created folder named {{{SOURCES_FOR_RUN__}}}, where {{{}}} is the configuration identifier and {{{}}} is the run identifier that have been specified with {{{palmrun}}} options {{{-c}}} and {{{-r}}}. This SOURCES_FOR_RUN-folder is created in the directory that has been specified by variable {{{base_directory}}} in the configuration file. {{{palmbuild}}} copies this folder to directory {{{$fast_io_catalog/SOURCES_FOR_RUN__}}} and compiles the user-interface or/and modified sources (if there are any). Variable {{{fast_io_catalog}}} is also defined in the configuration file. In case of remote jobs, the SOURCES_FOR_RUN folder is copied via {{{scp}}} and the compiler is invoked via {{{ssh}}}. The internal {{{palmbuild}}} call generally looks like {{{ palmbuild -v -c -r }}} where {{{