The R Project SVN R

Rev

Rev 41615 | Blame | Last modification | View Log | Download | RSS feed

#-*- Makefile -*-
## This files contains tabs: make sure your editor leaves them unchanged.

## ===== configuration macros for building packages or R  ===============

# Alternatives GCC3 (MinGW gcc3), GCC4 (MinGW gcc4) or CROSS (e.g. Linux)

## This is temporarily set to GCC3, until after the release of R 2.5.1,
## when we will change the default to GCC4.
BUILD=GCC3

HELP = YES
HELPTYPES = -txt -html -latex -example
ifeq ($(strip $(BUILD)),CROSS)
WINHELP = NO
else
WINHELP = CHM # NO or CHM
endif

# an alternative is to use -g here, if the debugger supports only stabs.
G_FLAG=-gdwarf-2

## ============== configuration macros for building R ===================

# Comment out if the msvcrt.dll malloc/free is required.
LEA_MALLOC=YES

# Set to YES and specify the path if you want to use the ATLAS BLAS.
USE_ATLAS=NO
ATLAS_PATH=/R/ATLAS/lib/WinNT_P4SSE2

# If you want to use AMD's ACML BLAS,
# set to YES and specify the path to libacml.a 
USE_ACML=NO
ACML_PATH=c:/Program Files/AMD/acml3.6.0/gnu32/lib
## Set this to YES if you want to use ACML's LAPACK not R's.
USE_ACML_LAPACK=NO

# Support for the Goto BLAS has been withdrawn: see R-admin.html

# Where does 'HTML Help Workshop' live? (unused if compiled HTML help is
# not requested. Spaces allowed.)
HHWDIR=C:/Program Files/HTML Help Workshop

# Define this to enable memory profiling.
# R_MEMORY_PROFILING=YES

# Where does Tcl/Tk live? Spaces allowed.
TCL_HOME = $(RHOME)/Tcl
TCL_VERSION = 84

# Define to use unicows
# USE_UNICOWS = YES

# Define to use svnversion to set SVN-REVISION (slow, but more informative
# than without it because mixed or modified revisions will be indicated)
# USE_SVNVERSION = YES


## ====== configuration macros for building installer ===========

# location where Inno Setup 5.1.x was installed. Spaces allowed.
ISDIR=C:/packages/Inno51

## ====== configuration macros for building MSI installer ===========

# location where WiX was installed. Spaces allowed, slashes required.
WIXDIR=C:/packages/WiX

## ====== configuration macros for building packages ================

## For a package using F90/95 set the name or path of gfortran.exe 
## or g95.exe.  Spaces allowed.
ifeq ($(strip $(BUILD)),GCC4)
F95=gfortran
else
# needs to be set by user
F95=
endif
F95FLAGS=-O3 $(PKG_FCFLAGS)

## =================== cross-compilation settings  =================

ifeq ($(strip $(BUILD)),CROSS)
# Next might be mingw32- or i386-mingw32msvc- or i586- 
# depending on the cross-compiler.
BINPREF=i586-mingw32-
# Set this to where the mingw32 include files are. It must be accurate.
# It should contain fcntl.h and windows.h
HEADER=/home/ripley/R/mingw/include
# path (possibly full path) to same version of R on the host system
R_EXE='I failed to read the instructions to set R_EXE in MkRules'
R_EXE=Rdev
endif

## =============== end of user-customizable parts  ===================

DEPARG=-MM
MINGW32LDFLAG=
C99FLAG=-std=gnu99

ifeq ($(strip $(BUILD)),GCC3)
BINPREF=
MINGW32CFLAG=
F77=g77
FLIBS=-lg2c
AWK=gawk
endif

ifeq ($(strip $(BUILD)),GCC4)
BINPREF=
MINGW32CFLAG=
F77=gfortran
FLIBS=-lgfortran
AWK=gawk
## for mingw-runtime <= 3.11
# C99FLAG=-std=gnu99 -fgnu89-inline
endif

ifeq ($(strip $(BUILD)),CROSS)
MINGW32CFLAG=-isystem $(HEADER)
F77=$(BINPREF)g77
FLIBS=-lg2c
AWK=awk
endif



BLAS_LIBS= -L$(RHOME)/bin -lRblas
ifeq ($(strip $(USE_ACML_LAPACK)),YES)
LAPACK_LIBS=-L"$(ACML_PATH)" -lacml -lg2c
else
LAPACK_LIBS= -L$(RHOME)/bin -lRlapack
endif

ifdef USE_UNICOWS
LIBEXTRAS+=-lunicows
endif


AR=$(BINPREF)ar
AS=$(BINPREF)as
CAT=cat
CC=$(BINPREF)gcc $(MINGW32CFLAG)
CP=cp
CPP=$(CC) -E
CXX=$(BINPREF)g++ $(MINGW32CFLAG)
DLL=$(BINPREF)$(DLL_LDMAIN) $(MINGW32LDFLAG)
## formerly used version without -k for front-ends/libproxy.a
DLLTOOL_WIN32=$(BINPREF)dlltool --as $(AS)
DLLTOOL=$(DLLTOOL_WIN32) -k
DLL_LDMAIN=gcc
ECHO=echo
FIND=find
LINKER=$(BINPREF)gcc $(MINGW32LDFLAG)
MKDIR=mkdir
NM=$(BINPREF)nm
OBJC=$(BINPREF)gcc $(MINGW32CFLAG)
PERL=perl
RANLIB=$(BINPREF)ranlib
RESCOMP=$(BINPREF)windres
RM=rm -f
SED=sed

.SUFFIXES:
.SUFFIXES: .c .cc .cpp .C .f .o .a .def .exp .dll .exe .d .f90 .f95 .m .S

.c.d:
    @echo "making $@ from $<"
    @$(CC) $(DEPARG) $(CFLAGS) $($*-CFLAGS) $< -o $@

.cc.d:
    @echo "making $@ from $<"
    @$(CXX) $(DEPARG) $(CXXFLAGS) $($*-CXXFLAGS) $< -o $@

.cpp.d:
    @echo "making $@ from $<"
    @$(CXX) $(DEPARG) $(CXXFLAGS) $($*-CXXFLAGS) $< -o $@

.C.d:
    @echo "making $@ from $<"
    @$(CXX) $(DEPARG) $(CXXFLAGS) $($*-CXXFLAGS) $< -o $@

.m.d:
    @echo "making $@ from $<"
    @$(OBJC) $(DEPARG) $(OBJCFLAGS) $($*-OBJCFLAGS) $< -o $@

.c.o:
    $(CC) $(CFLAGS) $($*-CFLAGS) -c $< -o $@

.f.o:
    $(F77) $(FFLAGS) $($*-FFLAGS) -c $< -o $@

.cc.o:
    $(CXX) $(CXXFLAGS) $($*-CXXFLAGS) -c $< -o $@

.cpp.o:
    $(CXX) $(CXXFLAGS) $($*-CXXFLAGS) -c $< -o $@

.C.o:
    $(CXX) $(CXXFLAGS) $($*-CXXFLAGS) -c $< -o $@

.m.o:
    $(OBJC) $(OBJCFLAGS) $($*-OBJCFLAGS) -c $< -o $@

%.exe:
    $(LINKER) $(LINKFLAGS) $($*-LINKFLAGS) -o $@ $^ $($*-LIBS) $(LIBS)

%.dll:
    @$(ECHO) EXPORTS > $*.def
    @$(NM) $^ | $(SED) -n 's/^.* [BCDRT] _/ /p' >> $*.def
    $(DLL) -shared $(DLLFLAGS) $($*-DLLFLAGS) -o $@ $*.def $^ $($*-DLLLIBS) $(DLLLIBS)
    @$(RM) $*.def

#lib%.a: %.def
#   $(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --def $*.def --output-lib $@

lib%.dll.a: %.def
    $(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --def $*.def --output-lib $@

%.a:
#   @$(ECHO) -------- Building $@ from $^ --------
    @$(RM) $@
    $(AR) crs $@ $^

ifeq ($(strip $(BUILD)),CROSS)
%.o: %.rc
    $(RESCOMP) $(RESFLAGS) $($*-RESFLAGS) -I $(HEADER) -i $< -o $@
else
%.o: %.rc
    $(RESCOMP) $(RESFLAGS) $($*-RESFLAGS) -i $< -o $@
endif

.f90.o:
    "$(F95)" $(F95FLAGS) -c $< -o $@
.f95.o:
    "$(F95)" $(F95FLAGS) -c $< -o $@