From: softlib.cs.rice.edu
Last mod: December 29, 1995
fastlink, 3.0p

Using Makefile


This file describes using the Makefile included in this distribution to build FASTLINK, version 3.0P. See README for an overview of all the documentation.

FTP instructions, source code organization, and an overview of compilation is described in README.install .

README.constants explains the meaning of some constants that you will need to set in the Makefile for compilation.

If you plan to run parallel FASTLINK, please also refer to README.parallel, and either README.p4 (for shared-memory), or README.TreadMarks (for networks) to fully install the parallel version.

Makefile, Introduction

There are two files residing in the 3.0P/src directory that are used by the make utility to determine how to build FASTLINK. They are:
  Makefile         --  primary Makefile for FASTLINK
  Makefile.common  --  make rules and targets for parallel FASTLINK
Makefile.common contains common, system-independent information, and should require no modification whatsoever. You may, however, need to edit the Makefile to set certain parameters pertaining to your system configuration, compiler, and various FASTLINK-related constants.

The Makefile is broken into two main sections. The first includes the definition of parameters, while the second describes dependencies among source files, compilation rules, and targets. You will only need to be concerned with the first section.

Makefile, Variables

Parameters, or variables for compilation are defined in the Makefile with the syntax:
  < VAR > = < VAL >
where variable < VAR > is assigned the value < VAL >. For example, to define the variable CC (denoting the name of the C compiler) to be gcc, the Makefile would include:
  CC = gcc
Variables can be referred to by surrounding the variable name in a $(...) enclosure. For example, given the definition above, the statement:
  $(CC) file.c
would be interpreted by make as:
  gcc file.c
Your editing of the Makefile will consist of choosing, or defining variables to suit your particular needs. For example, if you were instructed to set the variable CC to the compiler you want to use, and you wanted to use cc instead of gcc, you would change the above definition to:
  CC = cc

Makefile, Comments

In a Makefile, the pound symbol "#" denotes a comment. Any line that begins with a "#" is a comment included to make the file more readable, or to explain the meaning of a variable. These lines are ignored by make, and have no effect on the compilation.

In addition to defining variables as described above, you will in places be instructed to either "comment out", or to "uncomment" a line.

"Uncommenting" a line has the effect of making a line visible to make that it previously could not see (because make ignores comments). For example, if you are running Sun's Solaris operating system, you will be instructed to uncomment the definition of the SYSDEP variable. This means that you need to erase the "#" character from the beginning of the line. The line:

  #SYSDEP = -DSOLARIS
should be changed to:
  SYSDEP = -DSOLARIS
Conversely, "commenting out" a line has the effect of telling make to ignore the line. For example, if you don't want to use compiler optimization, you would comment out the line:
  OPTFLAG = -O2
by adding a "#" to the beginning of the line, so it reads:
  #OPTFLAG = -O2
Note that when there are two possible definitions of a variable, you should make sure that no more than one are uncommented. This can lead to unexpected problems.

FASTLINK, Memory Usage Options

One of the issues you will be asked to consider when editing the Makefile is the level of memory FASTLINK can use. There are two variables that combine to give three different levels of possible memory usage. The variables are:
LESSMEMORY
If defined (using the -D flag described in README.install ), LESSMEMORY instructs FASTLINK to use an alternate algorithm which requires considerably less memory, but is slower. The file README.memory discusses the differences.

PRECOMPUTE
This variable is defined as either 1, 0, where PRECOMPUTE=1 instructs FASTLINK to use an alternate algorithm which requires more memory, and is faster. PRECOMPUTE=0 uses the normal approach. The possible combinations of these variables is as follows:

Lowest Memory Used -- Slowest
LESSMEMORY defined and PRECOMPUTE=0

Middle Level -- Medium Speed, available only for parallel version
LESSMEMORY not defined and PRECOMPUTE=0

Highest Level -- Fastest
LESSMEMORY not defined and PRECOMPUTE=1
You should always be able to use the fastest level for 2 and 3 locus analysis. Depending on how much memory you have, you may need to go down to the Middle Level or Lowest Level for 4 point analysis. You should use the Lowest Level for 5 or more loci.

Makefile, Editing

Editing the Makefile amounts to simply answering a number of questions. Much of the following information appears within comments in the Makefile itself to simplify the editing process. All of the relevant information occurs in the first 200 lines or so of the Makefile; this corresponds to roughly 25 decisions. Most of these decisions are relevant only to the parallel version.

Start at the beginning of the Makefile, and work through the variables one at a time until you reach the line:

  # You shouldn't need to change anything beyond this point. #
The variables are grouped together in logical sections. The following is an explanation of each of the variables, section by section, including their definitions as they appear in the Makefile.

Makefile, Miscellaneous Variables

The following variables apply to compilation of *both* sequential *and* parallel FASTLINK
BINDIR = ./bin
This is the destination directory where you want your executables installed. Note: this directory *must* exist, or compilation will fail during linkage.

OPTFLAG = -O
Compiler optimization flag. Comment this out if your compiler complains.

PROTO = -DKNR_PROTO
If you use the cc compiler, uncomment this flag to use K&R (Kernighan and Ritchie) style function prototypes. Note: FASTLINK will *not* compile under cc without this flag set.

SYSDEP = -DSUNOS_4_1_X_GCC
SYSDEP = -DSOLARIS
SYSDEP = -D_POSIX_SOURCE
SYSDEP =
All of these variables are commented out by default. Otherwise, leave this alone.

Makefile, Sequential Code Variables

The following variables apply to sequential FASTLINK only.

CC = gcc
This defines the C compiler for sequential code.

CKPT = -DDOS
This variable determines whether or not to include checkpointing code in FASTLINK. Uncomment this if you are compiling for DOS, or if you want to turn off checkpointing in FASTLINK.

Makefile, Parallel Code Variables

These variables apply only to parallel FASTLINK. You do not need to touch any of this stuff if you are running sequentially.

PARCC = gcc
C compiler for parallel code.

PARLIB = -DIS_P4=1
PARLIB = -DIS_PARMACS=1
Parallel support library. If you are using TreadMarks, leave these commented out. If you are using P4 or PARMACS, uncomment the appropriate variable. Make sure that no more than one of these variables is uncommented!

PARINCLPATH = -I$(TmkDIR)/include -I/usr/local/include
PARINCLPATH = -I$(P4_INCLDIR)
Parallel include path. If you are using TreadMarks or P4, uncomment the appropriate variable. If you are using PARMACS, comment these out, or supply your own, appropriate path. Make sure that no more than one of these variables is uncommented!

Makefile, Parallel Code Variables, TreadMarks specifics

These variables apply only to users of TreadMarks. Please refer to the README.TreadMarks for more details.
TmkDIR = /usr/lib/Tmk-0.9.3
Set this to the root directory of your TreadMarks installation

ARCH = sparc
Target architecture. For example, if your TreadMarks library is in $(TmkDIR)/lib.mips, you should set this variable to mips. Consult your TreadMarks documentation for more details.

ATMDIR = /usr/fore/lib
If you are using TreadMarks on an ATM network, set this to the location of libatm.a on your system.

Makefile, Parallel Code Variables, P4 specifics

These variables apply only to users of P4. Please refer to the README.p4 for more details.
P4_HOME_DIR = /usr/lib/p4-1.4
Set this to the root directory of your p4 installation. Refer to the README.p4 for details.

P4_MDEP_LD = -lsocket -lnsl -lthread
Uncomment this variable if you are running in parallel on SOLARIS. This is *very* important -- FASTLINK will not compile without it.

Makefile, Parallel Code Variables, Parallel C Compiler Flags

Edit the following variables when compiling parallel FASTLINK to suit your particular run.

There are 3 sets of variables provided -- one each for ILINK, MLINK, and LINKMAP. The variables are **PARMEM, **PRECOMP, where ** represents one of IL, ML, or LI, for ILINK, MLINK and LINKMAP respectively. They are briefly described below. Please refer to the files README.constants , README.memory, and README.parallel , as well as to the section above on Memory Usage Options.

**PARMEM
Defines the variable LESSMEMORY, instructing FASTLINK to use an alternate algorithm which requires less memory, but is slower. Please refer to the README.memory , as well as to the section on Memory Usage Options above. Uncomment this if you wish to use less memory. Note: setting this value to 0 *or* 1 will both have the same effect of defining LESSMEMORY. If you don't want less memory, be sure to comment this out.

**PRECOMPUTE
Defines the variable PRECOMPUTE as 1 or 0. PRECOMPUTE=1 instructs FASTLINK to use an alternate algorithm which requires more memory, and is faster. PRECOMPUTE=0 uses the normal approach. Please refer to the README.memory, as well as to the section above on Memory Usage Options for more details. Note: Unlike **PARMEM, this value *must* be set to either 0 or 1.

Makefile, Unix Utilities on Your System

If any of the following utilities are different on your system, you can change them here. If not, there is nothing more to do.
RM = rm -f
RM is used for "make clean", so if you want to use that, you'll need something defined here.

Makefile, Passing Extra Flags

Most versions of make allows you to override Makefile variables from the command line. The Makefile includes a variable EXTRAFLAGS that is intentionally left empty to allow you to add command-line flags without editing the Makefile. EXTRAFLAGS is automatically passed to each of the different targets. If you want to change a constant, such as maxloop, you would add a suitable -D command to EXTRAFLAGS (see README.constants).

For example, if you wanted to pass along an additional include directive to the compiler when making ILINK, you could type:

  make ilink EXTRAFLAGS="-I/usr/ucb/include -I/usr/lib/include"
Note that if you want to add more than one flag, you need to protect the argument in double quotes (") as above.
back to fastlink