The Portland Group compilation drivers, pghpf, pgcc,
pgf77, pgCC  (HPF, C, Fortran 77, and C++)[*] allow you to issue a single command
that builds command lines to execute the various compilation tools using the
correct options (including options for the compiler, the assembler and the
linker). This chapter describes how you can customize the driver based on the
settings of environment variables and the statements in driver initialization
files. The environment variables provide information that the driver uses to
locate executable files and other system files. The driver initialization file
(PGIRC  file) contains statements and configuration keywords that set various
driver parameters; these parameters determine the defaults supplied to the
driver, to the compiler or to other phases of the compilation sequence. Most
users need not be concerned with customizing the driver, since the
initialization file supplied with each system should serve their needs.
Advanced users and system administrators can take advantage of the PGIRC
facility to customize their environment on a global, per-user, or per-file
basis.
Warning
A PGIRC file is required for the driver to operate correctly. If you remove
the PGIRC file supplied with your software and do not specify an alternate
PGIRC file, you will receive an error message from the driver, for example
using the pghpf driver:
pghpf-error-Unable to open - /command-path/.pghpfrc
Bourne Shell or Korn Shell:
PGI=/usr2/pgi; export PGI PATH=$PATH:$PGI/target/bin; export PATHC Shell:
setenv PGI /usr2/pgi setenv PATH $PATH:$PGI/target/bin
Most of the configuration variables have corresponding command-line options. The command-line options, when supplied, take precedence over values set in PGIRC files. There may be more than one PGIRC file, including the default system configuration file supplied with The Portland Group Software. For a variable that is set in more than one PGIRC file, the most recent value set overrides any previous value.
The examples presented later in this chapter show PGIRC configuration files. By supplying either user-specified values or predefined values you can set configuration variables. This text indicates valid values where a predefined keyword is expected.
Include comments in a PGIRC file using the # character. Any characters following a # are ignored.
The set statement, used in combination with the = operator (or a space), sets the value of a configuration variable. Case is significant for configuration variables, but not for the PGIRC commands. For example, the following PGIRC lines set the value of the TARGET configuration variable, and all three are equivalent.
set TARGET=target SET TARGET=target SET TARGET target
include $DRIVER/.pghpfrc set TARGET=targetThis PGIRC file would read the contents of the default PGIRC file and override the value of the TARGET variable with the specified value.
$ pghpf -dryrun hello.hpfThe driver option -show prints the driver's current configuration, after reading the PGIRC file. This option is also useful for testing.
1. Using the set statement from within a configuration file. For example:
set LD=ld2 Setting the configuration variable on the driver command line.
$pghpf LD=ld860 -ohello hello.hpf3. Setting an environment variable at the shell prompt or in the shell's startup file.
$LD=ld860 ; export LD $pghpf hello.hpfIf you use the environment variable method for setting configuration variables, you need to include a line similar to the following in your PGIRC file:
ifndef LD set LD=$LDThis tells the driver to try to resolve the LD configuration variable and look for an environment variable named LD.
4. Setting the configuration variable on the driver command line from the value of an environment variable.
$B=ld860 ; export B $pghpf LD=\$B hello.hpfFor these methods for setting configuration variables the following precedence is followed: variables set on the command line have higher precedence than those set in the configuration file.
You can also use user defined variables in PGIRC files. As with the B environment variable in example four above, configuration files can contain variable names not known to the driver. User-defined variables of this type must start with an upper or lower-case alphabetic character and must contain only upper-case or lower-case alphabetic characters, digits, or underbar "_". Special characters are not allowed in user-defined variable names.
To use a PGIRC user-defined variable, precede the variable name with a $. For example, if you set a variable B in a PGIRC file, you can subsequently use that variable:
set B=ld860 set LD=$Byou can also use
set LD=$(B)
if <configuration test> statement [statement ...] \ [ else statement [statement ...] ] \ [ endif] ifn <configuration test> statement [statement ...] \ [ else statement [statement ...] \ [ endif]where:
ifdef <variable> statement [statement ...] \ [ else statement [statement ...] ifndef <variable> statement [statement ...] \ [ else statement [statement ...]where:
set variable[=]valuewhere variable is either a predefined or user-defined variable name and value is either a predefined or user-defined value. The = is optional, but if it is not present a blank space is required.
The include PGIRC statement has the following syntax:
include [path]filenamewhere path is an optional full pathname and filename is the name of the PGIRC file to include.
switch new_switch_name[=] [existing_switch]...where new_switch_name is either a predefined or user-defined command-line switch name and existing_switch is either a predefined or user defined switch or switches, or blank. The = is optional, but if it is not present a blank space is required.
The following command adds a switch named test1.
switch test1 = -Y0,/home/test/xxx/pgcThe following command adds a switch which passes a switch directly to the linker. test2.
switch test2 = -Wl,-x1aThe following command adds a switch which tells the driver to ignore a previously defined -C switch.
switch C =
help switch[=]valuewhere switch is either a predefined or user-defined variable name and value is a help string. The = is optional, but if it is not present a blank space is required.
The map PGIRC statement has the following syntax:
map "<pass,>-switch<,args>"="<arg1,..,argn>"If the <pass> is not indicated, all passes are affected. The passes are:
The number of arguments on the left of the "=" do not have to equal the number of arguments on the right. This allows a user to add additional arguments to a re-mapped switch.
For example:
map "0,-inform,*"="*,*"This deletes the -inform option and its argument.
map "0,-terse"="*,*"This deletes the -terse option and its argument.
map "0,-x,119,2"="*,*,*"This map command deletes the -x,119,2 argument.
map "0,-idir,*"="-I,$2"This map command re-maps the -idir switch to -I and copies its argument.
When using the -help option, the driver sorts and merges the passthru defined switches with the list of switches embedded into the driver.
The passthru PGIRC statement has either of the following forms:
passthru "-switch";="help description" passthru "-switch",="help description"where the switch is the switch to pass through. The ';' indicates an optional argument follows the switch. The ',' indicates a required argument follows the switch.
For example,
passthru "-p"="a switch with no arguments" passthru "-g";="a switch with an optional argument" passthru "-ko",="a switch with a required argument"
The bypass PGIRC statement has the following syntax:
bypass -switchwhere switch is the switch to bypass.
For example,
bypass "-M" bypass -r
1) if PROFILE set LD_STARTUP="crti.o $LIB/pgcrt0.o $CRT"
2) ifdef NEWCOMP set COMPDIR="$PGI/i860/bin"
3) if PROFILE set LD_STARTUP="crti.o $LIB/pgcrt0.o $CRT" \
else set LD_STARTUP="crti.o crt1.o $CRT"
4) ifn PROFILE set LD_STARTUP="crti.o crt1.o $CRT $PGFMAIN"
5) ifndef COMPDIR set COMPDIR="$PGI/i860/bin"
6) include /home/test/pgirctest 7) set TARGET=i860
Table C.1 PGIRC Commands
Command         Description                                              
bypass          Instructs the driver to bypass or ignore a known         
                switch. A bypassed switch also will not be displayed     
                using the -help option of the driver.                    
else            Logical else test. This is used in combination with      
                the if statement.                                        
endif           Completes a logical if test block.                       
error           Used to print an error message and to force the driver   
                to exit. This is used primarily for debugging a          
                configuration file.                                      
help            Provide a description message for a driver switch        
                (refer to  -help).                                       
if              Logical if test. This may be used in conjunction with    
                an else statement.                                       
ifdef           Determines if a variable has been assigned a value.      
ifn             Logical if not test. This may be used in conjunction     
                with an else statement.                                  
ifndef          Determines if a variable has not been assigned a         
                value.                                                   
include         Used to process an additional PGIRC file.                
map             Re-maps a driver internally created switch into          
                another switch or bypasses the switch completely.        
                Internal switches are switches that are added directly   
                by the driver to the compiler.                           
passthru        This statement allows a command with optional or         
                required arguments to be "passed through" to the         
                compiler and linker passes.                              
set             Sets the value of configuration variables used in        
                PGIRC files.                                             
switch          Add a user-defined switch.                               
Table C.2 PGIRC Configuration Variables
Variable               Description                                     
AIX                    Indicates if tools are hosted on an aix         
                       system. The valid values are NO or YES.         
APX                    Indicates if tools hosted on i860. The valid    
                       values are NO or YES.                           
AS                     Name of the assembler. The assembler command    
                       name will be set to the pathname pointed to     
                       by /$ASDIR/$AS.                                 
ASDIR                  Directory path of the assembler.  The           
                       assembler command name will be set to the       
                       pathname pointed to by /$ASDIR/$AS.             
ASARGS                 Default assembler arguments. One or more        
                       assembler arguments. Refer to the assembler     
                       man page for information on its arguments.      
ASTYPE                 Output format of executable file. The valid     
                       values are: COFF, ELF and AOUT (this is used    
                       internally by the driver to pass output         
                       options to the compiler).                       
COMP_ARGS_C            Default C arguments. One or more compiler       
                       arguments.                                      
COMP_ARGS_FTN          Default Fortran arguments. One or more          
                       compiler arguments.                             
COMP_ARGS_HPF          Default HPF arguments. One or more compiler     
                       arguments.                                      
COMP_ARGS_LAST         One or more compiler arguments that the user    
                       cannot override.                                
COMP_C                 Name of the C compiler. The compiler command    
                       name will be set to the pathname pointed to     
                       by /$COMPDIR/$COMP_C.                           
COMP_FTN               Name of the Fortran compiler. The compiler      
                       command name will be set to the pathname        
                       pointed to by /$COMPDIR/$COMP_FTN.              
                                                                       
Variable               Description                                     
COMPDIR                Directory path of the compiler.  The compiler   
                       command name will be set to the pathname        
                       /$COMPDIR/$COMP_C.                              
CPLUSARGS              Default C++ arguments for the C++ first phase.  
CPLUSDIR1              Directory path of the C++ compiler (pass 1).    
CPLUSDIR2              Directory path of the C++ compiler (pass 2).    
CPLUS_LIBS             List of C++ .a files passed to linker           
CPLUS_PREDEFS          List of define's passed to C++ compiler.        
CRTDIR                 Directory path of the startup files. This       
                       variable is used in the linker portion of the   
                       driver command.                                 
CPLUS1                 Name of the C++ compiler (pass 1)               
CPLUS2                 Name of the C++ compiler (pass 2)               
DRIVER                 Specifies the location (path) of the driver.    
                       Its value is available for use in PGIRC         
                       configuration files.                            
DRIVER_ARGS_C          Default driver arguments. Refer to Chapters 7   
                       and 8 for lists of the valid driver options.    
DRIVER_ARGS_CPLUS      Default driver arguments. Refer to Chapters 7   
                       and 8 for lists of the valid driver options.    
DRIVER_ARGS_FTN        Default driver arguments. Refer to Chapters 7   
                       and 8 for in the Pgf77 User's Guide for lists   
                       of the valid driver options.                    
DRIVER_ARGS_HPF        Default driver arguments. Refer to Chapters 7   
                       and 8 for in the Pgf77 User's Guide for lists   
                       of the valid driver options.                    
ENDIAN                 Output byte-ordering of executable file. The    
                       valid values are LITTLE  and BIG (this value    
                       is used internally by the driver).              
EXTRACTOR_C            Name of the C function extractor.               
EXTRACTOR_FTN          Name of the Fortran function extractor.         
EXTRACTOR_HPF          Name of the High Performance Fortran function   
                       extractor.                                      
                                                                       
Variable               Description                                     
HPFEXDIR               Pathname of the directory holding the HPF       
                       extractor.                                      
INCDIR                 Directory path of the C include files.          
LANG                   Sets driver language to C, C++, Fortran or      
                       HPF.                                            
LD                     Name of the linker. The linker command name     
                       will be set to the pathname pointed to by       
                       /$LDDIR/$LD.                                    
LDARGS                 Default linker arguments. Refer to the linker   
                       man page for details on linker arguments.       
LD_ENDUP               List of .o endup files passed to linker.        
LDDIR                  Directory path of the linker. The linker        
                       command name will be set to the pathname        
                       pointed to by /$LDDIR/$LD.                      
LD_ENDUP               List of .o endup files passed to linker.        
                       These .o or .a files are appended to the        
                       linker command.                                 
LD_LOPT                Indicates if linker supports -l switch. The     
                       valid values are NO and YES. If this variable   
                       is set to NO, the driver builds the names of    
                       the library files by prepending "lib" and       
                       appending ".a" to library names supplied with   
                       the -l option on the command line. The          
                       library directory is specified with the -L      
                       command-line option or the LIBDIR variable.     
LD_STARTUP             List of .o startup files passed to linker.      
LIBDIR                 Directory path of the library files.            
LIBS                   List of .a files passed to linker.              
MERGEARGS              Arguments passed to merge program (same as      
                       ASARGS)                                         
MERGEDIR               Directory of merge program (same as ASDIR)      
MUNCH                  Name of the C++ symbol table changer program.   
MUNCHDIR               Directory path of the C++ symbol changer        
                       table program                                   
Variable               Description                                     
NM                     Name of the symbol name lister (C++ only)       
NMDIR                  Directory path of the symbol table listing      
                       program                                         
NMARGS                 Default name arguments. The name phase          
                       defined by NM is called during template         
                       instantiation. These arguments make the         
                       output of name readable by pgprelnk..           
NOFRAME                Indicates if frame/noframe option passed to     
                       compiler. The valid values are NO and YES.      
                       Refer to the pgcc -Mframe option for details    
                       (this does not effect the Fortran compiler).    
PGIDIR                 Directory path of the PGI object files. Some    
                       object files (or libraries) contain routines    
                       for special compiler features. The PGIDIR is    
                       the directory that contains these object        
                       files.                                          
PGMERGE                Name of pgivision merge program (same as AS)    
PREDEFS                List of defines passed to compiler. This is a   
                       list of defines that is passed to the           
                       compiler. Each predef must have the following   
                       form: 
              -Dname 
where name is      
                       the macro name. Multiple predefs can occur;     
                       they must be separated by spaces. For           
                       example:
set PREDEFS="-DTEST1=2  -DTEST2        
                       -DTEST3"                                        
PREPREDS               List of predicates passed to compiler.          
RUN860                 Name of the i860 executor program.              
RUN860ARGS             Default i860 executor arguments.                
SYSV_PROF              Indicates if System V style of profiling.       
                       The valid values are NO and YES. The driver     
                       uses this to set internal profiler options.     
TARGET                 Indicates the target system. The valid values   
                       are HAUPPAUGE, HYPERSPEED, MERC, SPARC, and     
                       I860. The driver uses this to set internal      
                       system specific options.                        
Test Variable         Description                                      
AOUT                  TRUE if  "set ASTYPE=AOUT" or -Maout  is set.    
APX                   TRUE if "set APX=YES"  or  -Mrun860=A            
BE                    TRUE if  "set ENDIAN=BIG"  or -Mbe  is set       
COFF                  TRUE if  "set ASTYPE=COFF"  or -Mcoff            
DEBUG                 TRUE if  -g is set on the command line           
ELF                   TRUE if  "set ASTYPE=ELF"  or -Melf is set       
IEEE                  TRUE if -Kieee                                   
LE                    TRUE if "set ENDIAN=LITTLE"  or -Mle is set      
PGC++                 TRUE if pgCC driver is being used                
PGCC                  TRUE if pgcc driver is being used                
PGF77                 TRUE if pgf77 driver is being used               
PGHPF                 TRUE if pghpf  driver is being used              
PROFILE               TRUE if profiling is being used                  
PROF_NONE             TRUE if profiling is NOT being used              
PROF_MCOUNT           TRUE if -Mprof=mcount is used or -qp             
PROF_COVER            TRUE if -Mprof=cover is used or -qc              
PROF_LPROF            TRUE if -Mprof=lprof is used  or -ql or -pg      
                      (Solaris)                                        
PROF_LINES            TRUE if -Mprof=lines is used or -ql              
PROF_FUNC             TRUE if -Mprof=func is used or -qp               
PROF_GPROF            TRUE if -Mprof=gprof is used or -xpg (Solaris)   
SYSV_PROF             TRUE if  "set SYSV_PROF=YES" or -pg  (Sun        
                      4.1.x)                                           
#
# PGI Compiler Configurations for High Performance Fortran
#
set SYSV_PROF=NO
#
# User Defined Switches for HPF
#
switch fast=-O2 -dalign -fnonstd -native
switch Mg=-g -Mnofn -Mkeepftn -Wh,-y,49,4
switch Mport=-Wh,-x,49,0x80
switch Mpvm
switch Mrpm
switch Mrpm1
switch Mstats
#
# Tool arguments
#
ifndef COMP_HPF	set COMP_HPF=pghpfc
ifndef HPFDIR	set HPFDIR=$PGI/$SYSTEM/bin
set DRIVER_ARGS_HPF="$EXTRA_DRIVER_ARGS_HPF -Mcray\=pointer"
ifndef COMP_ARGS_HPF	set COMP_ARGS_HPF="-x 49 4 $EXTRA_ARGS_HPF"
ifndef PGAPPEND	set PGAPPEND=pgappend
ifndef PGAPPENDDIR	set PGAPPENDDIR=$PGI/$SYSTEM/bin
ifndef PGAPPENDARGS	set PGAPPENDARGS=""
ifndef PGIPA	set PGIPA=pgipa
ifndef PGIPADIR	set PGIPADIR=$PGI/$SYSTEM/bin
ifndef PGIPAARGS	set PGIPAARGS=""
#
# HPF libraries and startup files
#
# Defines LPGFTNRTL, PGFMAIN, LPGHPF and LPVM3
#
ifndef LPVM3 \
  set LPVM3="/usr/local/pvm3/lib/SUN4/libpvm3.a $HPF_SOCKET"
if -Mstats set P="_p"
if PROF_HPF_FUNC	set P="_p"
if PROF_HPF_LINES	set P="_p"
if PGHPF \
  ifn	-Mnohpf \
    set LPGFTNRTL="-lhpfrtl" \
    ifndef LPGHPF \
      set LPGHPF="-lhpf$P $HPF_SOCKET $HPF_PROF_LIBS -lhpf2" \
      if -Mpvm \
	  set LPGHPF="-lhpf_pvm $LPVM3 $HPF_PROF_LIBS -lhpf2_pvm" \
      endif \
      if -Mrpm \
	  set LPGHPF="-lhpf_rpm$P $HPF_SOCKET $HPF_PROF_LIBS -lhpf2_rpm" \
      endif \
      if -Mrpms \
	  set LPGHPF="-lhpf_rpms $HPF_RPMS $HPF_PROF_LIBS -lhpf2_rpms" \
      endif \
      if -Mrpm1 \
	  set LPGHPF="-lhpf_rpm1 $HPF_UCB $HPF_PROF_LIBS -lhpf2_rpm1" \
      endif \
      if -Mtracegen \
	  set LPGHPF="-lhpf_par $HPF_TRACEGEN $HPF_PROF_LIBS -lhpf2_par" \
      endif \
      if -Mdolphin \
	  set LPGHPF="-lhpf_dol $HPF_SOCKET $HPF_PROF_LIBS -lhpf2_dol" \
      endif \
    endif \
    set PGFMAIN="$PGIDIR/hpfmain.o" \
    if -Mpvm \
	  set PGFMAIN="$PGIDIR/hpfmain_pvm.o" \
    endif \
    if -Mrpm \
	  set PGFMAIN="$PGIDIR/hpfmain_rpm.o" \
    endif \
    if -Mrpms \
	  set PGFMAIN="$PGIDIR/hpfmain_rpms.o" \
    endif \
    if -Mrpm1 \
	  set PGFMAIN="$PGIDIR/hpfmain_rpm1.o" \
    endif \
    if -Mtracegen \
	  set PGFMAIN="$PGIDIR/hpfmain_par.o" \
    endif \
    if -Mdolphin \
	  set PGFMAIN="$PGIDIR/hpfmain_dol.o" \
    endif \
    ifndef HPF_PROF_LIBS \
	if PROF_HPF_FUNC	set HPF_PROF_LIBS="-lpgpfh"	endif \
	if PROF_HPF_LINES	set HPF_PROF_LIBS="-lpgpfh"	endif \
    endif \
    set HPF_LIBS="$LPGHPF" \
  endif \
endif
set PGFALT="hpfalt.o"
 
xxx
1)
'x' is a valid argument to -Y & -W switches.3) There is another new driver variable: HPFEXDIR. This variable
is currently set in pghpfrc. It describes the name of the
directory holding the HPF extractor.
Please test this change on all systems, and let me know about
xxx