musrfit/src/classes/Makefile.PMusr
2009-06-19 20:40:00 +00:00

262 lines
7.5 KiB
Makefile

#---------------------------------------------------
# Makefile.PMusr
#
# Author: Andreas Suter
# e-mail: andreas.suter@psi.ch
#
# $Id$
#
# Comment: If it doesn't work, try
# make --warning-undefined-variables -f Makefile.PMusr
# it might be that OSTYPE is not set properly, i.e.
# OSTYPE being a variable (set), instead of a enviornment
# variable (printenv). If so, try
# export OSTYPE=linux-gnu
# are whatever makes sense on your system.
#---------------------------------------------------
#---------------------------------------------------
# get compilation and library flags from root-config
ROOTCFLAGS = $(shell $(ROOTSYS)/bin/root-config --cflags)
ROOTLIBS = $(shell $(ROOTSYS)/bin/root-config --libs)
ROOTGLIBS = $(shell $(ROOTSYS)/bin/root-config --glibs)
#---------------------------------------------------
# depending on the architecture, choose the compiler,
# linker, and the flags to use
#
ARCH = $(shell $(ROOTSYS)/bin/root-config --arch)
ifeq ($(ARCH),linux)
OS = LINUX
endif
ifeq ($(ARCH),linuxx8664gcc)
OS = LINUX
endif
ifeq ($(ARCH),win32gcc)
OS = WIN32GCC
endif
ifeq ($(ARCH),macosx)
OS = DARWIN
endif
# -- Linux
ifeq ($(OS),LINUX)
CXX = g++
CXXFLAGS = -O3 -Wall -Wno-trigraphs -fPIC
PMUSRPATH = ../include
MNPATH = $(ROOTSYS)/include
GSLPATH = /usr/include/gsl
BOOSTPATH = /usr/include
FFTW3PATH = /usr/include
LEMPATH = ../external/TLemRunHeader
PSIBINPATH = ../external/MuSR_software/Class_MuSR_PSI
INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(BOOSTPATH) -I$(LEMPATH) -I$(PSIBINPATH) -I$(FFTW3PATH)
LD = g++
LDFLAGS = -O
SOFLAGS = -shared
LEMLIB = libTLemRunHeader.so
SHLIB = libPMusr.so
endif
# -- Windows/Cygwin
ifeq ($(OS),WIN32GCC)
CXX = g++
CXXFLAGS = -O3 -Wall -Wno-trigraphs -D_DLL
PMUSRPATH = ../include
MNPATH = $(ROOTSYS)/include
GSLPATH = /usr/include/gsl
BOOSTPATH = /usr/include
FFTW3PATH = /usr/include
LEMPATH = ../external/TLemRunHeader
PSIBINPATH = ../external/MuSR_software/Class_MuSR_PSI
INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(BOOSTPATH) -I$(LEMPATH) -I$(PSIBINPATH) -I$(FFTW3PATH)
LD = g++
LDFLAGS = -O -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc
SOFLAGS = -shared -Wl,--export-all-symbols
LEMLIB = libTLemRunHeader.dll
SHLIB = libPMusr.dll
endif
# -- MacOSX/Darwin
ifeq ($(OS),DARWIN)
CXX = g++
CXXFLAGS = -O3 -Wall -Wno-trigraphs -fPIC
PMUSRPATH = ../include
MNPATH = $(ROOTSYS)/include
FINKPATH = /sw/include
GSLPATH = $(FINKPATH)/gsl
BOOSTPATH = $(FINKPATH)
FFTW3PATH = $(FINKPATH)
LEMPATH = ../external/TLemRunHeader
PSIBINPATH = ../external/MuSR_software/Class_MuSR_PSI
INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(BOOSTPATH) -I$(LEMPATH) -I$(PSIBINPATH) -I$(FFTW3PATH)
LD = g++
LDFLAGS = -O -Xlinker -bind_at_load
SOFLAGS = -dynamiclib -flat_namespace -undefined suppress -Wl,-x
LEMLIB = libTLemRunHeader.dylib
SHLIB = libPMusr.dylib
endif
# the output from the root-config script:
CXXFLAGS += $(ROOTCFLAGS)
LDFLAGS +=
# the ROOT libraries (G = graphic)
LIBS = $(ROOTLIBS) -lXMLParser
GLIBS = $(ROOTGLIBS) -lXMLParser
# LEM run header
PSILIB = -L. -lTLemRunHeader
# Minuit2 lib
MNLIB = -L$(ROOTSYS)/lib -lMinuit2
# GSL lib
GSLLIB = -lgslcblas -lgsl
# FFTW lib
FFTW3LIB = -lfftw3
ifeq ($(OS),WIN32GCC)
# Minuit2 lib
MNLIB = -L$(ROOTSYS)/lib -lMinuit2 -lMathMore
# GSL lib
GSLLIB = -L/usr/lib -lgslcblas -lgsl
# FFTW lib
FFTW3LIB = -L/usr/lib -lfftw3
endif
ifeq ($(OS),DARWIN)
# Minuit2 lib
MNLIB = -L$(ROOTSYS)/lib -lMinuit2 -lMathMore
# GSL lib
GSLLIB = -L/sw/lib -lgslcblas -lgsl
# FFTW lib
FFTW3LIB = -L/sw/lib -lfftw3
endif
# some definitions: headers (used to generate *Dict* stuff), sources, objects,...
OBJS =
OBJS += PStartupHandler.o PStartupHandlerDict.o
OBJS += PMsrHandler.o
OBJS += PRunDataHandler.o
OBJS += PFunctionHandler.o
OBJS += PFunction.o
OBJS += PRunBase.o
OBJS += PRunSingleHisto.o
OBJS += PRunAsymmetry.o
OBJS += PRunRRF.o
OBJS += PRunNonMusr.o
OBJS += PRunListCollection.o
OBJS += PTheory.o
OBJS += PFitterFcn.o
OBJS += PFitter.o
OBJS += PMusrCanvas.o PMusrCanvasDict.o
OBJS += PUserFcnBase.o PUserFcnBaseDict.o
OBJS += PFourier.o
OBJS += PMusrT0.o PMusrT0Dict.o
LEMOBJS =
LEMOBJS += TLemStats.o TLemStatsDict.o
LEMOBJS += TLemRunHeader.o TLemRunHeaderDict.o
EXTOBJS =
EXTOBJS += MuSR_td_PSI_bin.o
# make the shared libs:
all: lemlib musrlib
lemlib: $(LEMLIB)
musrlib: $(SHLIB)
$(LEMLIB): $(LEMOBJS)
@echo "---> Building shared library $(LEMLIB) ..."
/bin/rm -f $(LEMLIB)
$(LD) $(SOFLAGS) $(LDFLAGS) $(LEMOBJS) -o $(LEMLIB) $(LIBS)
@echo "done"
$(SHLIB): $(OBJS) $(EXTOBJS)
@echo "---> Building shared library $(SHLIB) ..."
/bin/rm -f $(SHLIB)
$(LD) $(SOFLAGS) $(LDFLAGS) $(OBJS) $(EXTOBJS) -o $(SHLIB) $(FFTW3LIB) $(GLIBS) $(PSILIB) $(MNLIB) $(GSLLIB)
@echo "done"
# clean up: remove all object file (and core files)
# semicolon needed to tell make there is no source
# for this target!
#
clean:; @rm -f $(OBJS) $(EXTOBJS) $(LEMOBJS) *Dict* core*
@echo "---> removing $(OBJS) $(EXTOBJS) $(LEMOBJS)"
#
$(OBJS): %.o: %.cpp
$(CXX) $(INCLUDES) $(CXXFLAGS) -c $<
$(LEMOBJS): ../external/TLemRunHeader/TLemRunHeader.cxx TLemRunHeaderDict.cxx ../external/TLemRunHeader/TLemStats.cxx TLemStatsDict.cxx
$(CXX) $(INCLUDES) $(CXXFLAGS) -c $^
$(EXTOBJS): ../external/MuSR_software/Class_MuSR_PSI/MuSR_td_PSI_bin.cpp
$(CXX) $(INCLUDES) $(CXXFLAGS) -c $^
TLemRunHeaderDict.cxx: ../external/TLemRunHeader/TLemRunHeader.h ../external/TLemRunHeader/TLemRunHeaderLinkDef.h
@echo "Generating dictionary $@..."
rootcint -f $@ -c -p $^
TLemStatsDict.cxx: ../external/TLemRunHeader/TLemStats.h ../external/TLemRunHeader/TLemStatsLinkDef.h
@echo "Generating dictionary $@..."
rootcint -f $@ -c -p $^
PStartupHandlerDict.cpp: ../include/PStartupHandler.h ../include/PStartupHandlerLinkDef.h
@echo "Generating dictionary $@..."
rootcint -f $@ -c -p $^
PMusrCanvasDict.cpp: ../include/PMusrCanvas.h ../include/PMusrCanvasLinkDef.h
@echo "Generating dictionary $@..."
rootcint -v -f $@ -c -p $^
PMusrT0Dict.cpp: ../include/PMusrT0.h ../include/PMusrT0LinkDef.h
@echo "Generating dictionary $@..."
rootcint -v -f $@ -c -p $^
PUserFcnBaseDict.cpp: ../include/PUserFcnBase.h ../include/PUserFcnBaseLinkDef.h
@echo "Generating dictionary $@..."
rootcint -v -f $@ -c -p $^
install: leminstall musrinstall
leminstall: lemlib
@echo "Installing shared lib: $(LEMLIB) ( you must be root ;-) )"
ifeq ($(OS),LINUX)
cp -pv $(LEMLIB) $(ROOTSYS)/lib
cp -pv $(LEMPATH)/*.h $(ROOTSYS)/include
endif
ifeq ($(OS),WIN32GCC)
cp -pv $(LEMLIB) $(ROOTSYS)/bin
ln -sf $(ROOTSYS)/bin/$(LEMLIB) $(ROOTSYS)/lib/$(LEMLIB)
cp -pv $(LEMPATH)/*.h $(ROOTSYS)/include
endif
ifeq ($(OS),DARWIN)
cp -pv $(LEMLIB) $(ROOTSYS)/lib
cp -pv $(LEMPATH)/*.h $(ROOTSYS)/include
endif
musrinstall: musrlib
@echo "Installing shared lib: $(SHLIB) ( you must be root ;-) )"
ifeq ($(OS),LINUX)
cp -pv $(SHLIB) $(ROOTSYS)/lib
cp -pv $(PMUSRPATH)/*.h $(ROOTSYS)/include
endif
ifeq ($(OS),WIN32GCC)
cp -pv $(SHLIB) $(ROOTSYS)/bin
ln -sf $(ROOTSYS)/bin/$(SHLIB) $(ROOTSYS)/lib/$(SHLIB)
cp -pv $(PMUSRPATH)/*.h $(ROOTSYS)/include
endif
ifeq ($(OS),DARWIN)
cp -pv $(SHLIB) $(ROOTSYS)/lib
cp -pv $(PMUSRPATH)/*.h $(ROOTSYS)/include
endif
cleaninstall: clean install