makefile 5.04 KB
################################################################################
# Makefile building all dynamic libraries:
# libTELoss.so, libEvent.so, libDetectors.so, libSimulations.so 
#
#	OBJS - files type *.o (subdir.mk)
#	LIBS - list of the loaded libraries (objects.mk)
#	RM - command "rm -rf"
#	CPP_DEPS - files type *.d (subdir.mk)
#	.PHONY - 
#	.SECONDARY - 
#	
# Vratislav Chudoba
################################################################################

RM := rm -rf

CC := g++

F90 := gfortran

ROOTLIBS = $(shell root-config --libdir)
ROOTINCS = $(shell root-config --incdir)

PWD = $(shell pwd)
INSTALLFOLDER = $(HOME)/AculLib

ACULDATA = $(PWD)/AculData
ELOSS = $(PWD)/ELoss
TELOSS = $(PWD)/TELoss
DETECTORS = $(PWD)/Detectors
BE = $(PWD)/Be
THREADS = $(PWD)/Threads
APPS = $(PWD)/apps

-include $(ACULDATA)/AculData.mk
-include $(ELOSS)/ELOSS.mk
-include $(TELOSS)/TELoss.mk
-include $(DETECTORS)/Detectors.mk
-include $(BE)/Be.mk
#-include $(THREADS)/Threads.mk
-include $(APPS)/apps.mk

all: libAculData.so \
	libTELoss.so \
	libDetectors.so \
	libBe.so
	

#ROOT html documentation, it will be done as a program which will be alsa compiled by this makefile, program will be as a last condition after all of the libraries
htmldoc: libTELoss.so
	-$(RM) htmldoc
	root -l -q html.cxx	

#copy the libraries and includes somewhere into $HOME, copy the ./htmldoc folder into some location in $HOME
install: 
	-mkdir $(INSTALLFOLDER)	
	-mkdir $(INSTALLFOLDER)/lib
	-mkdir $(INSTALLFOLDER)/include
	cp lib* $(INSTALLFOLDER)/lib
	cp $(ACULDATA)/*.h $(INSTALLFOLDER)/include
	cp $(TELOSS)/*.h $(INSTALLFOLDER)/include
	cp $(DETECTORS)/*.h $(INSTALLFOLDER)/include
	cp -r ./htmldoc $(INSTALLFOLDER)/htmldoc

clean:
	-$(RM) $(ACULDATAOBJS) $(ACULDATACPP_DEPS) 
	-$(RM) $(ACULDATA)/AculDataCint.* libAculData.so
	-@echo ' '
	-$(RM) $(TELOSSOBJS) $(TELOSSCPP_DEPS) 
	-$(RM) $(TELOSS)/TELossCint.* libTELoss.so
	-@echo ' '
	-$(RM) $(DETECTORSOBJS) $(DETECTORSCPP_DEPS) 
	-$(RM) $(DETECTORS)/DetectorsCint.* libDetectors.so 
	-@echo ' '
	-$(RM) $(BEOBJS) $(BECPP_DEPS) 
	-$(RM) $(BE)/BeCint.* libBe.so
	-@echo ' '
	-$(RM) $(THREADSOBJS) 
	-$(RM) $(THREADS)/ThreadsCint.* libThreads.so
	-@echo ' '
	-$(RM) htmldoc
	-@echo ' '

# Those *Cint* files below need special treating:
$(ACULDATA)/AculDataCint.cpp:
	-@echo 'Pre-building AculDataCint.cpp and AculDataCint.h files'
	-rootcint -f $(ACULDATA)/AculDataCint.cpp -c -p $(ACULDATA_HEADERS)
	-@echo ' '

$(TELOSS)/TELossCint.cpp:
	-@echo 'Pre-building TELossCint.cpp and TELossCint.h files'
	-rootcint -f $(TELOSS)/TELossCint.cpp -c -p $(TELOSS)/TELoss.h $(TELOSS)/linkdef.h
	-@echo ' '

$(DETECTORS)/DetectorsCint.cpp:
	-@echo 'Pre-building DetectorsCint.cpp and DetectorsCint.h files'
	-rootcint -f $(DETECTORS)/DetectorsCint.cpp -c -p $(DETECTORS_HEADERS)
	-@echo ' '
	
$(BE)/BeCint.cpp:
	-@echo 'Pre-building BeCint.cpp and BeCint.h files'
	-rootcint -f $(BE)/BeCint.cpp -c -p $(BE_HEADERS)
	-@echo ' '
	

#*.so files
libAculData.so: $(ACULDATAOBJS)
	@echo 'Building target: $@'
	@echo 'Invoking: GCC C++ Linker'
	$(CC) -L $(ROOTLIBS) -shared -o"libAculData.so" $(ACULDATAOBJS) $(ACULDATALIBS)
	@echo 'Finished building target: $@'
	@echo ' '

libTELoss.so: $(TELOSSOBJS)
	@echo 'Building target: $@'
	@echo 'Invoking: GCC C++ Linker'
	$(CC) -L . -L $(ROOTLIBS) -shared -o"libTELoss.so" $(TELOSSOBJS) $(TELOSSLIBS)
	@echo 'Finished building target: $@'
	@echo ' '

libDetectors.so: $(DETECTORSOBJS)
	@echo 'Building target: $@'
	@echo 'Invoking: GCC C++ Linker'
	g++ -L $(ROOTLIBS) -shared -o"libDetectors.so" $(DETECTORSOBJS) $(DETECTORSLIBS)
	@echo 'Finished building target: $@'
	@echo ' '

libBe.so: libAculData.so libDetectors.so libTELoss.so $(BEOBJS)
	@echo 'Building target: $@'
	@echo 'Invoking: GCC C++ Linker'
	g++ -L . -L $(ROOTLIBS) -shared -o"libBe.so" $(BEOBJS) $(BELIBS)
	@echo 'Finished building target: $@'
	@echo ' '
	
fillExpFile: $(APPSOBJS)
	@echo 'Building target: $@'
	@echo 'Invoking: GCC C++ Linker'
	g++ -L . -L $(ROOTLIBS) -o"fillExpFile" $(APPSOBJS) $(APPSLIBS)
	@echo 'Finished building target: $@'
	@echo ' '
	
.PHONY: all clean
#.SECONDARY: AculData_pre-build TELoss_pre-build Detectors_pre-build libAculData.so libTELoss.so libDetectors.so

# Each subdirectory must supply rules for building sources it contributes
%.o: %.cpp
	@echo 'Building file: $@'
	@echo 'Invoking: GCC C++ Compiler'
#	$(CC) -I$(ROOTINCS) -O0 -g3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
#	$(CC) -I$(ROOTINCS) -DTHREADING -I$(BOOSTINCS) -O2 -Wall -mmmx -msse -msse2 -msse3 -mfpmath=sse,387 -march=nocona -mtune=nocona -c -fmessage-length=0 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
	$(CC) -I$(ROOTINCS) -O2 -Wall -mmmx -msse -msse2 -msse3 -mfpmath=sse,387 -march=nocona -mtune=nocona -c -fmessage-length=0 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
	@echo 'Finished building: $@'
	@echo ' '

# fortran object files
$(TELOSS)/ELOSS.o:
	@echo 'Building file: $@'
	@echo 'Invoking: gfortran'
	$(F90) -c -fPIC -o"$(TELOSS)/ELOSS.o" $(TELOSS)/ELOSS.f90
	@echo 'Finished building target: $@'
	@echo ' '