The R Project SVN R

Rev

Rev 47698 | Blame | Compare with Previous | 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 GCC4 or F2C (use suitable f2c rather than a Fortran compiler).

BUILD=GCC4

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

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

# Should CHM help be built?  Any value other than TRUE disables this
USE_CHM = TRUE

# 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

# Support for the ACML and Goto BLASes 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 = 85

# Define to use svnversion to set SVN-REVISION (slow, and requires a clean
# checkout with no modifications).
# USE_SVNVERSION = YES

# We normally link against DLLs, but this macro forces the use of import libs
# Needed if using other compilers, and currently on Win64
# USE_IMPLIBS = YES

# 32- or 64-bit Windows?
WIN=32
ifeq ($(strip $(WIN)),64)
USE_IMPLIBS = YES
endif

# use ICU
USE_ICU=NO
# path to parent of ICU headers
ICU_PATH=/sources/icu

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

# location where Inno Setup 5.[12].x was installed. Spaces allowed.
ISDIR=C:/packages/Inno

## ====== 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)
FC=gfortran$(GCC4_SUFF)
else
# needs to be set by user
FC=
endif
FCFLAGS=-O3

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

DEPARG=-MM
C99FLAG=-std=gnu99

ifeq ($(strip $(BUILD)),GCC4)
F77=gfortran$(GCC4_SUFF)
FLIBS=-lgfortran
AWK=gawk
## for mingw-runtime <= 3.11
# C99FLAG=-std=gnu99 -fgnu89-inline
## earlier Rtools needs -sjlj
## an alternative is -dw2, which currently fails building R.
GCC4_SUFF=
endif

ifeq ($(strip $(BUILD)),F2C)
F77=sh $(RHOME)/src/scripts/f77_f2c
FLIBS=-lf2c
AWK=gawk
endif

ifeq ($(strip $(USE_IMPLIBS)),YES)
IMPDIR=lib
else
IMPDIR=bin
endif

BLAS_LIBS=-L$(RHOME)/$(IMPDIR) -lRblas
LAPACK_LIBS=-L$(RHOME)/$(IMPDIR) -lRlapack
GRAPHAPP_LIB=-lRgraphapp
ZLIB_LIBS=-lRzlib

AR=ar
AS=as
CAT=cat
CC=gcc$(GCC4_SUFF) $(C99FLAG)
CP=cp
# as set by make
CPP=$(CC) -E
CXX=g++$(GCC4_SUFF)
## overridden in some packages
DLL_LDMAIN=$(CC)
DLL=$(DLL_LDMAIN)
## formerly used version without -k for front-ends/libproxy.a
DLLTOOL=dlltool
## some versions have trouble with paths, so we always need this
## even for native builds
DLLTOOLFLAGS=--as $(AS) -k
ECHO=echo
FIND=find
LINKER=$(MAIN_LD)
MAIN_LD=$(CC)
MKDIR=mkdir
NM=nm
OBJC=gcc$(GCC4_SUFF)
PERL=perl
RANLIB=ranlib
RESCOMP=windres
# as set by make
RM=rm -f
SED=sed
SORT=sort

## from etc/Renviron.site on Unix
EGREP=grep -e
LN_S=cp -p
TAR=tar

.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) $(CPPFLAGS) $($*-CPPFLAGS) $< -o $@

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

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

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

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

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

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

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

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

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

.m.o:
    $(OBJC) $(CPPFLAGS) $($*-CPPFLAGS) $(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%.dll.a: %.def
    $(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --input-def $*.def --output-lib $@

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

%.o: %.rc
    $(RESCOMP) $(RESFLAGS) $($*-RESFLAGS) -i $< -o $@

.f90.o:
    "$(FC)" $(PKG_FCFLAGS) $(FCFLAGS) -c $< -o $@
.f95.o:
    "$(FC)" $(PKG_FCFLAGS) $(FCFLAGS) -c $< -o $@