001 MAIN=BTagObjects
002
003 ARCH := $(shell root-config --arch)
004
005 CXX =
006 DllSuf = so
007
008 ROOTCFLAGS := $(shell root-config --cflags)
009 ROOTLIBS := $(shell root-config --libs)
010 ROOTGLIBS := $(shell root-config --glibs)
011
012
013
014
015
016
017
018
019
020
021
022 ifeq ($(ARCH),win32gcc)
023
024 DllSuf = dll
025 CXX = g++
026 CXXFLAGS = -O2 -Wall -Woverloaded-virtual -I/usr/X11R6/include
027 LD = g++
028 LDFLAGS = --no_exceptions -shared
029 SOFLAGS = -shared -D_DLL -Wl,--export-all-symbols
030 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
031 endif
032
033
034 ifeq ($(ARCH),linux)
035
036 CXX = g++
037 CXXFLAGS = -O -Wall -fPIC
038 LD = g++
039 LDFLAGS = -O --no_exceptions -shared
040 SOFLAGS = -shared
041 endif
042
043
044 ifeq ($(ARCH),linuxkcc)
045
046 CXX = KCC --one_instantiation_per_object
047 CXXFLAGS = -O -fPIC +K0
048 LD = KCC
049 LDFLAGS = -O $(shell root-config --cflags) --no_exceptions -shared
050 SOFLAGS =
051 endif
052
053
054 ifeq ($(ARCH),macosx)
055 ifndef MACOSX_DEPLOYMENT_TARGET
056 $(error You must define MACOSX_DEPLOYMENT_TARGET first, e.g. "export MACOSX_DEPLOYMENT_TARGET=10.4")
057 endif
058 MACOSX_DEPLOYMENT_TARGET = 10.4
059 DllSuf = dylib
060 CXX = g++
061 CXXFLAGS = -g -pipe -W -Wall -Woverloaded-virtual -fsigned-char -fno-common -D__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__ROOT -DG__REDIRECTIO -DG__OSFDLL
062 LD = g++
063 LDFLAGS = -g -dynamiclib -single_module -undefined dynamic_lookup -install_name ../shlib/lib$(MAIN).$(DllSuf)
064 LDFLAGSROOT = -Xlinker -bind_at_load -flat_namespace -bundle
065 SHAREDROOT = ../shlib/lib$(MAIN).so
066 EXPLLINKLIBS = $(ROOTGLIBS)
067 endif
068
069 ifeq ($(CXX),)
070 $(error $(ARCH) invalid architecture)
071 endif
072
073
074 SHARED=../shlib/lib$(MAIN).$(DllSuf)
075
076 INCFLAGS =-Iinclude -I../include
077 CXXFLAGS += -D__NO_CDFSOFT__ $(shell root-config --cflags) $(INCFLAGS)
078
079
080
081 SRCS = $(wildcard src/*.cc)
082
083 INCS = $(wildcard include/*.hh)
084
085 DEPS = $(patsubst src/%, objects/%, \
086 $(patsubst %.cc, %.d, $(wildcard src/*.cc)) )
087
088
089 DICTOBS = $(patsubst %_linkdef.h, %.o, \
090 $(patsubst dict/%, objects/dict_%, \
091 $(wildcard dict/*_linkdef.h) ) )
092
093 OBJS = $(patsubst src/%, objects/%, \
094 $(patsubst %.cc, %.o, $(SRCS)) )
095
096
097 OBJS += $(DICTOBS)
098
099
100 all: shared
101
102
103
104 ifeq ($(ARCH),macosx)
105 shared: $(SHARED) $(SHAREDROOT)
106
107 $(SHARED): $(OBJS)
108 $(LD) $(LDFLAGS) $(OBJS) -o $(SHARED)
109
110 $(SHAREDROOT): $(OBJS)
111 $(LD) $(LDFLAGSROOT) $(OBJS) $(EXPLLINKLIBS) -o $(SHAREDROOT)
112
113 else
114 shared: $(SHARED)
115 $(SHARED): $(OBJS)
116 $(LD) $(LDFLAGS) $(OBJS) $(EXPLLINKLIBS) -o $(SHARED)
117 endif
118
119
120 echo:
121 @echo For Debugging:
122 @echo .
123 @echo SRCS: $(SRCS)
124 @echo .
125 @echo INCLUDES: $(INCS)
126 @echo .
127 @echo OBJECTS: $(OBJS)
128 @echo .
129 @echo DEPS: $(DEPS)
130 @echo .
131 @echo DICTOBS: $(DICTOBS)
132
133 objects/dict_%.o: include/%.hh dict/%_linkdef.h
134 @echo "Generating dictionary for $< $@"
135 $(ROOTSYS)/bin/rootcint -f $(patsubst %.o, %.C, $@) -c -Idict -Iinclude -I../include -D__NO_CDFSOFT__ $(notdir $^)
136 $(CXX) -c $(CXXFLAGS) -o $@ $(patsubst %.o, %.C, $@)
137
138 objects/%.o: src/%.cc include/%.hh
139 $(CXX) $(CXXFLAGS) -c -o $@ $<
140
141 objects/%.d: src/%.cc
142 @echo "Generating dependencies for $<"
143 @set -e; $(CXX) -M $(CXXFLAGS) $< \
144 | sed 's%\($*\)\.o[ :]*%\1.o $@ : %g' > $@; \
145 [ -s $@ ] || rm -f $@
146
147 clean:
148 @echo "Cleaning everything..."
149 @rm -f objects/*.d objects/*.o core* objects/dict_* $(SHARED)
150
151
152 include $(DEPS)
Send problems or questions to cdfcode@fnal.gov