################################################################################ # 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) ROOTCFLAGS = $(shell root-config --cflags) 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 -std=c++11 -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 $(ROOTCFLAGS) -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" # $(CC) -I$(ROOTINCS) -O2 $(ROOTCFLAGS) -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 ' '