# make same trick as in C includes to avoid multiple include ifndef Dabc_Makefile_config Dabc_Makefile_config = true #rules which does not require any dependency checks FASTRULES = package clean clean-svn .PHONY: all libs exes apps $(FASTRULES) ifeq ($(findstring $(MAKECMDGOALS), $(FASTRULES)),) -include $(DABCSYS)/config/Makefile.gener endif ############ generic config need always #################### ifndef DABC_OS DABC_OS = $(shell uname) endif ifndef DABC_ARCH DABC_ARCH = $(shell uname -m) endif ifndef BLD_DIR BLD_DIR = $(DABC_ARCH) endif ### dabc pathes: ifndef DABCSYS $(error "DABCSYS is not set correctly") endif ifdef DABCMAINMAKE DABCDLLPATH = lib DABCINCPATH = include DABCBINPATH = bin TGTDLLPATH = lib TGTBINPATH = bin else DABCDLLPATH = $(DABCSYS)/lib DABCINCPATH = $(DABCSYS)/include DABCBINPATH = $(DABCSYS)/bin TGTDLLPATH = $(BLD_DIR)/$(_topdir_)lib TGTBINPATH = $(BLD_DIR)/$(_topdir_)bin endif #in this variable one should put directories, which should be created/destroyed by make CREATE_DIRS = $(TGTDLLPATH) #list of directories with different tests APPLICATIONS_DIRS = #### File suffixes: ### ObjSuf = o SrcSuf = cxx CSuf = c HedSuf = h ExeSuf = DllSuf = so DepSuf = d ArSuf = a OutPutOpt = -o ##### prefixes LIB_PREFIX = lib #### Linker definitions: ### lddiropt = $(1:%=-Wl,-rpath,%) $(1:%=-L%) LIBS_CORESET = -L$(DABCDLLPATH) -lDabcBase #### File system operations: ### LN = ln -sf RM = rm -f RMDIR = rm -rf MV = mv #### Version number ### DABC_VERSION = 2.10.0 ## This two compiler flags are alternative ## When DOOPTIMIZATION = false, first is used otherwise second ifndef optimiz optimiz = 2 endif DEBUGMODE = -O$(optimiz) -g OPTIMIZEMODE = -O$(optimiz) # switch on optimization for all object files DOOPTIMIZATION = true DEFINITIONS = INCLUDES = C_INCLUDES = C_DEFINITIONS = ifeq ($(DABC_OS),Darwin) #### Mac Compilers: ## CXX = clang++ CC = clang LD = clang++ SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup -install_name LDFLAGSPRE = LIBRT = else #### Linux Compilers: ## CXX = g++ CC = gcc LD = g++ SOFLAGS = -shared -Wl,-soname, LDFLAGSPRE = -Wl,--no-as-needed LIBRT = -lrt endif ifdef clang CXX = clang++ CC = clang LD = clang++ CXXOPTIONS += -stdlib=libc++ LDFLAGSPRE += -stdlib=libc++ endif LDFLAGS = $(LDFLAGSPRE) $(call lddiropt,$(DABC_FULLDLLPATH) $(LDDIRS)) ifdef debug DEFINITIONS += DEBUGLEVEL=$(debug) DOOPTIMIZATION = false endif WARNINGS = -Wall OPTIONS = -fPIC ifeq ($(CXX),clang++) WARNINGS += -Wno-exceptions endif ifeq ($(shell uname -m),x86_64) OPTIONS += -m64 DABC_64BIT = TRUE endif #### Combine compilers flags in one variable: ### CXXFLAGS = -std=c++11 $(WARNINGS) $(OPTIONS) $(CXXOPTIONS) $(DEFINITIONS:%=-D%) $(INCLUDES:%=-I%) -I$(DABCINCPATH) CFLAGS = $(OPTIONS) $(C_DEFINITIONS:%=-D%) $(C_INCLUDES:%=-I%) # build scripts MakeLib = $(DABCSYS)/build/makelib.sh "$(DABC_OS)" "$(LD)" "$(RM)" $(MV) "$(LN)" "$(LDFLAGS)" "$(SOFLAGS)" $(DllSuf) CleanLib = $(DABCSYS)/build/cleanlib.sh "$(DABC_OS)" $(DllSuf) $(VERSSUF) #################### This is generation of Makefile.gener file ########################### ifdef DABCMAINMAKE ifndef DABC_Configured LIBS_SYSSET = -lpthread -ldl $(LIBRT) DABC_FULLDLLPATH = $(CURDIR)/$(DABCDLLPATH) DABC_FULLBINPATH = $(CURDIR)/$(DABCBINPATH) DABC_FULLINCPATH = $(CURDIR)/$(DABCINCPATH) ### detect ROOT ifndef noroot ifdef ROOTSYS DABC_ISROOT = true DABC_ROOTBIN = $(ROOTSYS)/bin/ DABC_ROOTSYS = $(ROOTSYS) else ifneq ($(shell which root-config 2>/dev/null),) DABC_ISROOT = true DABC_ROOTSYS := $(shell root-config --prefix) DABC_ROOTBIN := $(shell root-config --exec-prefix)/bin/ $(warning define ROOT binaries in $(DABC_ROOTBIN)) endif endif endif ifdef DABC_ISROOT DABC_ROOTVERSION = $(shell $(DABC_ROOTBIN)root-config --version) DABC_ROOTINCDIR = $(shell $(DABC_ROOTBIN)root-config --incdir) DABC_ROOTLIBDIR = $(shell $(DABC_ROOTBIN)root-config --libdir) DABC_ROOTCFLAGS = $(shell $(DABC_ROOTBIN)root-config --cflags) DABC_ROOTLIBS = $(shell $(DABC_ROOTBIN)root-config --libs) ifneq ($(wildcard $(DABC_ROOTLIBDIR)/libRHTTP.*),) DABC_ROOT_RHHTP = true else DABC_ROOT_RHHTP = false endif endif ############################# detect stream framework ######################## ifndef nostream ifdef STREAMSYS DABC_ISSTREAM = true DABC_STREAMSYS = $(STREAMSYS) endif endif ################ detect FASTCGI ############################# ifndef DABC_FASTCGI ifneq ($(wildcard /usr/include/fastcgi/fcgiapp.h),) DABC_FASTCGI = true DABC_FASTCGI_INC = /usr/include/fastcgi DABC_FASTCGI_LIB = -lfcgi else ifneq ($(wildcard /usr/include/fcgiapp.h),) DABC_FASTCGI = true DABC_FASTCGI_LIB = -lfcgi endif endif endif ################# detect ZLIB ##################### ifndef DABC_ZLIB ifneq ($(wildcard /usr/include/zlib.h),) DABC_ZLIB = true DABC_ZLIB_INC = DABC_ZLIB_LIB = -lz endif endif ################# detect SSL ##################### ifndef DABC_SSL ifneq ($(wildcard /usr/include/openssl/ssl.h),) ifneq ($(wildcard /usr/lib64/libssl.so),) ifneq ($(wildcard /usr/lib64/libcrypto.so),) DABC_SSL = true DABC_SSL_INC = DABC_SSL_LIB = -lssl -lcrypto endif endif endif endif ############## detect EPICS ################## ifndef noepics ifndef DABC_EPICS ifndef DABC_EPICS_LIBDIR ifdef DABC_64BIT DABC_EPICS_LIBDIR = $(EPICS_EXTENSIONS)/lib/linux-x86_64 else DABC_EPICS_LIBDIR = $(EPICS_EXTENSIONS)/lib/linux-x86 endif endif ifneq ($(wildcard $(DABC_EPICS_LIBDIR)/libezca.*),) DABC_EPICS = true DABC_EPICS_INCDIR = $(EPICS_BASE)/include $(EPICS_BASE)/include/os/Linux $(EPICS_EXTENSIONS)/include endif endif endif ############### detect DIM ######################## ifndef nodim ifndef DABC_DIM ifdef DIMDIR ifneq ($(wildcard $(DIMDIR)/linux/libdim.*),) ifneq ($(wildcard $(DIMDIR)/dim/dim.h),) DABC_DIM = true DABC_DIMDIR = $(DIMDIR) DABC_DIM_LIBDIR = $(DIMDIR)/linux DABC_DIM_INCDIR = $(DIMDIR)/dim endif endif endif endif endif ############### detect GOSIP ######################## ifndef nogosip ifndef DABC_GOSIP ifdef GSI_OS_VERSION GOSIPHOME = /mbs/driv/mbspex_$(GSI_OS_VERSION)_DEB ifneq ($(wildcard $(GOSIPHOME)/lib/libmbspex.so),) ifneq ($(wildcard $(GOSIPHOME)/include/mbspex/libmbspex.h),) DABC_GOSIP = true DABC_GOSIPHOME = $(GOSIPHOME) DABC_GOSIP_LIBDIR = $(GOSIPHOME)/lib DABC_GOSIP_INCDIR = $(GOSIPHOME)/include endif endif endif endif endif ############### detect DOFI ######################## ifndef nodofi ifndef DABC_DOFI ifneq ($(wildcard /usr/include/linux/spi/spidev.h),) DABC_DOFI = true endif endif endif ############ detect FESA ############## ifndef nofesa ifndef DABC_FESA ifndef RDA_HOME RDA_HOME = /opt/fesa/fesa-3rdparty/1.0.0 endif ifneq ($(wildcard $(RDA_HOME)/*),) DABC_FESA = true DABC_FESA_INCDIR = $(RDA_HOME)/include DABC_FESA_LIBS = -lomniORB4 -lomnithread -lcrypto -lcurl -lpthread DABC_FESA_SLIBS = $(RDA_HOME)/lib/x86_64/libcmw-rda.a \ $(RDA_HOME)/lib/x86_64/libcmw-rbac.a \ $(RDA_HOME)/lib/x86_64/libcmw-directory-client.a \ $(RDA_HOME)/lib/x86_64/libcmw-serializer.a \ $(RDA_HOME)/lib/x86_64/libcmw-log-stomp.a \ $(RDA_HOME)/lib/x86_64/libcmw-stomp.a \ $(RDA_HOME)/lib/x86_64/libcmw-log.a \ $(RDA_HOME)/lib/x86_64/libcmw-util.a \ $(RDA_HOME)/lib/x86_64/libiceutil.a endif endif endif ############ detect SAFT (White Rabbit timing library) ############## ifndef nosaft ifndef DABC_SAFT DABC_SAFT_LIBDIR = /usr/local/lib64 #DABC_SAFT_LIBDIR =/mbs/driv/white_rabbit/enigma/PCx86_Linux_OSV_4_9_0_64_Deb/lib ifneq ($(wildcard $(DABC_SAFT_LIBDIR)/libsaftlib.so),) DABC_SAFT = true DABC_SAFT_INCDIR = /usr/local/include #DABC_SAFT_INCDIR = /mbs/driv/white_rabbit/enigma/PCx86_Linux_OSV_4_9_0_64_Deb/include # following taken from generated saftlib makefile. todo: take this from package configuration ifdef oldsaft # we only use giomm libs for old saft lib 1.4 if explicitely given at compile time DABC_GIOMM_CFLAGS = -pthread -I/usr/include/giomm-2.4 -I/usr/lib64/giomm-2.4/include -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include DABC_GIOMM_LIBS = -lgiomm-2.4 -lgio-2.0 -lglibmm-2.4 -lgobject-2.0 -lglib-2.0 -lsigc-2.0 else DABC_GIOMM_CFLAGS = -DDABC_SAFT_USE_2_0 -pthread -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include DABC_GIOMM_LIBS = -lsaftbus -lsaftcommon -lsigc-2.0 endif endif endif endif ############ detect LTSM (light tsm storagelibrary) ############## ifndef noltsm ifndef DABC_LTSM ifndef LTSMAPI LTSMAPI = /home/hadaq/ltsm/install #LTSMAPI = /daq/usr/adamczew/ltsm/ltsm_ts/src/lib endif ifndef TSMAPI TSMAPI =/opt/tivoli/tsm/client/api/bin64/sample/ endif ifndef TSM_LIBDIR TSM_LIBDIR = /usr/lib64/ endif ifndef TSM_LINKLIBS TSM_LINKLIBS = -lApiTSM64 -lz endif ifneq ($(wildcard $(LTSMAPI)/*),) DABC_LTSM = true endif endif endif $(DABCSYS)/config/Makefile.gener : $(DABCSYS)/config/Makefile.config @$(RM) $@ @echo "#### Generated file, change with care ###" >> $@ @echo "DABC_Configured = true" >> $@ @echo "DABC_OS = $(DABC_OS)" >> $@ @echo "DABC_ARCH = $(DABC_ARCH)" >> $@ @echo "BLD_DIR = $(BLD_DIR)" >> $@ @echo "LIBS_SYSSET = $(LIBS_SYSSET)" >> $@ @echo "DABC_FULLDLLPATH = $(DABC_FULLDLLPATH)" >> $@ @echo "DABC_FULLBINPATH = $(DABC_FULLBINPATH)" >> $@ @echo "DABC_FULLINCPATH = $(DABC_FULLINCPATH)" >> $@ ifdef DABC_ISROOT @echo "" >> $@ @echo "DABC_ISROOT = $(DABC_ISROOT)" >> $@ @echo "DABC_ROOTSYS = $(DABC_ROOTSYS)" >> $@ @echo "DABC_ROOTBIN = $(DABC_ROOTBIN)" >> $@ @echo "DABC_ROOTVERSION = $(DABC_ROOTVERSION)" >> $@ @echo "DABC_ROOTINCDIR = $(DABC_ROOTINCDIR)" >> $@ @echo "DABC_ROOTCFLAGS = $(DABC_ROOTCFLAGS)" >> $@ @echo "DABC_ROOTLIBDIR = $(DABC_ROOTLIBDIR)" >> $@ @echo "DABC_ROOTLIBS = $(DABC_ROOTLIBS)" >> $@ @echo "DABC_ROOT_RHHTP = $(DABC_ROOT_RHHTP)" >> $@ endif ifdef DABC_FASTCGI @echo "" >> $@ @echo "DABC_FASTCGI = $(DABC_FASTCGI)" >> $@ @echo "DABC_FASTCGI_INC = $(DABC_FASTCGI_INC)" >> $@ @echo "DABC_FASTCGI_LIB = $(DABC_FASTCGI_LIB)" >> $@ endif ifdef DABC_ZLIB @echo "" >> $@ @echo "DABC_ZLIB = $(DABC_ZLIB)" >> $@ @echo "DABC_ZLIB_INC = $(DABC_ZLIB_INC)" >> $@ @echo "DABC_ZLIB_LIB = $(DABC_ZLIB_LIB)" >> $@ endif ifdef DABC_SSL @echo "" >> $@ @echo "DABC_SSL = $(DABC_SSL)" >> $@ @echo "DABC_SSL_INC = $(DABC_SSL_INC)" >> $@ @echo "DABC_SSL_LIB = $(DABC_SSL_LIB)" >> $@ endif ifdef DABC_EPICS @echo "" >> $@ @echo "DABC_EPICS = $(DABC_EPICS)" >> $@ @echo "DABC_EPICS_LIBDIR = $(DABC_EPICS_LIBDIR)" >> $@ @echo "DABC_EPICS_INCDIR = $(DABC_EPICS_INCDIR)" >> $@ endif ifdef DABC_DIM @echo "" >> $@ @echo "DABC_DIM = $(DABC_DIM)" >> $@ @echo "DABC_DIM_LIBDIR = $(DABC_DIM_LIBDIR)" >> $@ @echo "DABC_DIM_INCDIR = $(DABC_DIM_INCDIR)" >> $@ endif ifdef DABC_GOSIP @echo "" >> $@ @echo "DABC_GOSIP = $(DABC_GOSIP)" >> $@ @echo "DABC_GOSIP_LIBDIR = $(DABC_GOSIP_LIBDIR)" >> $@ @echo "DABC_GOSIP_INCDIR = $(DABC_GOSIP_INCDIR)" >> $@ endif ifdef DABC_DOFI @echo "" >> $@ @echo "DABC_DOFI = $(DABC_DOFI)" >> $@ endif ifdef DABC_FESA @echo "" >> $@ @echo "DABC_FESA = $(DABC_FESA)" >> $@ @echo "DABC_FESA_INCDIR = $(DABC_FESA_INCDIR)" >> $@ @echo "DABC_FESA_LIBS = $(DABC_FESA_LIBS)" >> $@ @echo "DABC_FESA_SLIBS = $(DABC_FESA_SLIBS)" >> $@ endif ifdef DABC_SAFT @echo "" >> $@ @echo "DABC_SAFT = $(DABC_SAFT)" >> $@ @echo "DABC_SAFT_INCDIR = $(DABC_SAFT_INCDIR)" >> $@ @echo "DABC_SAFT_LIBDIR = $(DABC_SAFT_LIBDIR)" >> $@ @echo "DABC_GIOMM_CFLAGS = $(DABC_GIOMM_CFLAGS)" >> $@ @echo "DABC_GIOMM_LIBS = $(DABC_GIOMM_LIBS)" >> $@ endif ifdef DABC_LTSM @echo "" >> $@ @echo "DABC_LTSM = $(DABC_LTSM)" >> $@ @echo "LTSMAPI = $(LTSMAPI)" >> $@ @echo "TSMAPI = $(TSMAPI)" >> $@ @echo "TSM_LIBDIR = $(TSM_LIBDIR)" >> $@ @echo "TSM_LINKLIBS = $(TSM_LINKLIBS)" >> $@ endif ifdef DABC_ISSTREAM @echo "" >> $@ @echo "DABC_ISSTREAM = $(DABC_ISSTREAM)" >> $@ @echo "DABC_STREAMSYS = $(DABC_STREAMSYS)" >> $@ endif endif endif #################### End of generation of Makefile.gener file ########################### # libs DABCBASE_LIBNAME = $(LIB_PREFIX)DabcBase DABCBASE_LIB = $(DABCDLLPATH)/$(DABCBASE_LIBNAME).$(DllSuf) DABCBASE_SLIB = $(DABCDLLPATH)/$(DABCBASE_LIBNAME).$(ArSuf) DABCSOCKET_LIBNAME = $(LIB_PREFIX)DabcSocket DABCSOCKET_LIB = $(DABCDLLPATH)/$(DABCSOCKET_LIBNAME).$(DllSuf) DABCSOCKET_SLIB = $(DABCDLLPATH)/$(DABCSOCKET_LIBNAME).$(ArSuf) DABCMBS_LIBNAME = $(LIB_PREFIX)DabcMbs DABCMBS_LIB = $(DABCDLLPATH)/$(DABCMBS_LIBNAME).$(DllSuf) DABCHADAQ_LIBNAME = $(LIB_PREFIX)DabcHadaq DABCHADAQ_LIB = $(DABCDLLPATH)/$(DABCHADAQ_LIBNAME).$(DllSuf) DABCDOGMA_LIBNAME = $(LIB_PREFIX)DabcDogma DABCDOGMA_LIB = $(DABCDLLPATH)/$(DABCDOGMA_LIBNAME).$(DllSuf) DABCVERBS_LIBNAME = $(LIB_PREFIX)DabcVerbs DABCVERBS_LIB = $(DABCDLLPATH)/$(DABCVERBS_LIBNAME).$(DllSuf) ifdef noroot DABC_ISROOT:= endif ifdef DABC_ISROOT DABC_ROOTIVERSION = $(subst /,,$(subst .,,$(DABC_ROOTVERSION))) DABC_ROOTMAJORVER = $(firstword $(subst ., ,$(DABC_ROOTVERSION))) DABCROOT_LIBNAME = $(LIB_PREFIX)DabcRoot DABCROOT_LIB = $(TGTDLLPATH)/$(DABCROOT_LIBNAME).$(DllSuf) DABCROOT_MAP = $(TGTDLLPATH)/$(DABCROOT_LIBNAME).rootmap DABC_ROOTCINT = @$(DABCSYS)/build/makedict.sh $(DABC_ROOTMAJORVER) $(DABC_ROOTSYS) $(DABC_ROOTBIN) "$(INCLUDES:%=-I%) -I$(DABCSYS)/include $(DEFINITIONS:%=-D%)" $@ DABC_ROOTMAP = @$(DABCSYS)/build/makemap.sh $(DABC_ROOTMAJORVER) $(DABC_ROOTSYS) $(DABC_ROOTBIN) "$(INCLUDES:%=-I%) -I$(DABCSYS)/include $(DEFINITIONS:%=-D%)" $@ else DABC_ROOTCINT = echo "ROOT is not configured - dictionary $@ cannot be generated"; endif all: libs exes apps libs:: exes:: clean:: endif