source: trunk/source/g3tog4/GNUmakefile@ 1265

Last change on this file since 1265 was 965, checked in by garnier, 17 years ago

update g3tog4

File size: 6.0 KB
Line 
1###############################################################################
2### GNUmakefile for the G3 to G4 conversion package.
3###
4### T. Wenaus 20/11/1995
5### Uses chunks of John Allison's generic makefiles.
6###
7### The presence of Fortran and several standalone programs
8### make this package non-generic enough to require its
9### own makefile.
10###
11###############################################################################
12
13G4TARGET := rztog4
14
15name := G3toG4
16
17ifndef G4INSTALL
18 G4INSTALL := ../..
19endif
20
21GLOBLIBS = libG4tracking.lib libG4processes.lib libG4digits_hits.lib
22GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib
23GLOBLIBS += libG4materials.lib libG4graphics_reps.lib
24GLOBLIBS += libG4intercoms.lib libG4global.lib
25
26include $(G4INSTALL)/config/architecture.gmk
27
28CPPFLAGS += \
29 -I$(G4BASE)/global/management/include \
30 -I$(G4BASE)/global/HEPGeometry/include \
31 -I$(G4BASE)/global/HEPRandom/include \
32 -I$(G4BASE)/geometry/magneticfield/include \
33 -I$(G4BASE)/geometry/volumes/include \
34 -I$(G4BASE)/geometry/management/include \
35 -I$(G4BASE)/geometry/solids/CSG/include \
36 -I$(G4BASE)/geometry/solids/specific/include \
37 -I$(G4BASE)/geometry/solids/Boolean/include \
38 -I$(G4BASE)/geometry/solids/BREPS/include \
39 -I$(G4BASE)/graphics_reps/include \
40 -I$(G4BASE)/materials/include \
41 -I$(G4BASE)/particles/management/include \
42 -I$(G4BASE)/processes/management/include \
43 -I$(G4BASE)/processes/general/include \
44 -I$(G4BASE)/processes/decay/include \
45 -I$(G4BASE)/track/include \
46 -I$(G4BASE)/tracking/include \
47 -I$(G4BASE)/digits_hits/detector/include \
48 -I$(G4BASE)/digits_hits/hits/include
49
50### kludge for AIX
51
52ifeq ($(FC),xlf)
53 cpp_include_flag=-WF,-I
54### -d writes out F*.f file
55 FCFLAGS += -d $(patsubst -I%,$(cpp_include_flag)%,-Iinclude)
56### xlf prepends .f name with F
57 dotf_prepend=F
58else
59### other compilers do not prepend .f name with F
60 dotf_prepend=
61 FCFLAGS += -Iinclude
62endif
63
64.SUFFIXES:
65.SUFFIXES: .a .o .cc .cxx .c .f .F .d
66
67### --------------------- vpaths ----------------------------------------------
68
69vpath %.hh $(patsubst -I%,%,$(filter -I%,$(CPPFLAGS)))
70vpath %.inc $(patsubst -I%,%,$(filter -I%,$(CPPFLAGS)))
71
72G4LIBDIR := $(G4LIB)/$(G4SYSTEM)
73G4TMPDIR := $(G4TMP)/$(G4SYSTEM)/$(name)
74G4BINDIR := $(G4BIN)/$(G4SYSTEM)
75
76Fbinsources = src/$(G4TARGET).F
77Fbinobjects = $(patsubst src/%.F,$(G4TMPDIR)/%.o,$(Fbinsources))
78Flibsources = $(filter-out $(Fbinsources),$(wildcard src/*.F))
79Flibobjects = $(patsubst src/%.F,$(G4TMPDIR)/%.o,$(Flibsources))
80Fdependencies = $(patsubst %.o,%.d,$(Fbinobjects) $(Flibobjects))
81
82ifdef G3G4DEBUG
83 CPPFLAGS += -DG3G4DEBUG
84endif
85ifdef G3G4_NO_REFLECTION
86 CPPFLAGS += -DG3G4_NO_REFLECTION
87endif
88
89###############################################################################
90### user beware! .rz files made with cernlib v 95a cannot be read with later
91### versions. You can use cernlib -v option to specify the cernlib version
92###############################################################################
93
94### .PHONY targets are executed regardless of time-stamp of any file of same
95### name
96
97.PHONY: global all lib bin libC libF
98
99###--------------------- section to define explicit rules --------------------
100
101first: lib
102
103global: lib bin
104
105all: lib
106
107lib: cleanf libc libF
108
109ifneq ($(G4LIB_BUILD_SHARED),)
110libc : $(G4LIBDIR)/lib$(name).$(SHEXT)
111else
112libc : $(G4LIBDIR)/lib$(name).a
113endif
114 @echo $@ stage done
115
116libF : $(G4LIBDIR)/lib$(name)F.a
117 @echo $@ stage done
118
119bin: $(G4BINDIR)/$(G4TARGET)
120 @echo $@ stage done
121
122### Make Fortran library.
123
124$(G4LIBDIR)/lib$(name)F.a: $(Flibobjects)
125 @if [ ! -d $(G4LIBDIR) ] ; then mkdir $(G4LIBDIR) ;fi
126 @echo Creating/replacing object files in lib$(name)F.a
127 @ar r $@ $?
128 @if [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ; then \
129 echo Running ranlib on lib$(name)F.a ; ranlib $@ ; fi
130
131### rztog4: Standalone Fortran program that reads an RZ file and converts
132### the geometry and other init structures therein to G4. A call
133### list file and G4 C++ code are generated; either can be used
134### on the G4 side to build the geometry.
135
136$(G4BINDIR)/$(G4TARGET) : $(Fbinobjects) $(G4LIBDIR)/lib$(name)F.a
137 @if [ ! -d $(G4BINDIR) ] ; then mkdir $(G4BINDIR) ;fi
138 @echo Linking $(G4TARGET)
139 $(RM) $@
140 echo $(G4TARGET) dependencies: $^
141 $(FC) $(Fbinobjects) -o $@ $(G4LIBDIR)/lib$(name)F.a $(shell cernlib -v pro geant321 packlib)
142 @echo Finished linking $(G4TARGET)
143
144###-------------------- locally defined pattern rules ------------------------
145
146### Make the .o files from src/*.F
147$(G4TMPDIR)/%.o : src/%.F
148 $(FC) $(FCFLAGS) -o $(G4TMPDIR)/$(*F).o -c src/$(*F).F
149 @file=$(dotf_prepend)$(*F).f;\
150 if [ -f $$file ]; then echo Moving $$file to $(G4TMPDIR)/$$file; \
151 mv $$file $(G4TMPDIR)/$$file; fi
152
153### Move the .f files
154$(G4TMPDIR)/%.f : %.f
155 @echo Moving $< to $@
156 @mv $< $@
157
158### --------------------- .d files --------------------------------------------
159
160### Make the .d file(s) and include it(them).
161### g++ -MM is good at this, except it forgets the subdirectory (hence
162### the echo $(@D)/).
163
164$(G4TMPDIR)/%.d: src/%.F
165 @if [ ! -d $(G4TMP)/$(G4SYSTEM) ] ; then mkdir $(G4TMP)/$(G4SYSTEM) ;fi
166 @if [ ! -d $(G4TMPDIR) ] ; then mkdir $(G4TMPDIR) ;fi
167 @if test -f $@ ; then rm -f $@; fi
168 @echo $(G4LIBDIR)/lib$(name)F.a\($*.o\) $@ " : " $? "\\" > $@
169 @if test -f $< ; then awk '$$1=="#include" { print $$2 " \\" }' $< | tr -d \"\>\< >> $@ ; echo >> $@ ; fi
170
171###@if test -f $< ; then echo Making $@ depend file for $<; awk '$$1=="#include" { print $$2 " \\" }' $< | tr -d \"\>\< >> $@ ; echo >> $@ ; fi
172
173### --------------------- end of pattern rules --------------------------------
174
175-include $(Fdependencies)
176
177clean:: cleanf
178
179cleanf:
180 @$(RM) $(Flibobjects)
181 @$(RM) $(Fbinobjects)
182 @$(RM) $(Fdependencies)
183 @$(RM) $(G4BINDIR)/$(G4TARGET)
184
185include $(G4INSTALL)/config/common.gmk
186
187test1:
188 @echo $(sources)
189 @echo $(objects)
190 @echo $(dependencies)
Note: See TracBrowser for help on using the repository browser.