[817] | 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 | |
---|
| 13 | G4TARGET := rztog4 |
---|
| 14 | |
---|
| 15 | name := G3toG4 |
---|
| 16 | |
---|
| 17 | ifndef G4INSTALL |
---|
| 18 | G4INSTALL := ../.. |
---|
| 19 | endif |
---|
| 20 | |
---|
| 21 | GLOBLIBS = libG4tracking.lib libG4processes.lib libG4digits_hits.lib |
---|
| 22 | GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib |
---|
| 23 | GLOBLIBS += libG4materials.lib libG4graphics_reps.lib |
---|
| 24 | GLOBLIBS += libG4intercoms.lib libG4global.lib |
---|
| 25 | |
---|
| 26 | include $(G4INSTALL)/config/architecture.gmk |
---|
| 27 | |
---|
| 28 | CPPFLAGS += \ |
---|
| 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 | |
---|
| 52 | ifeq ($(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 |
---|
| 58 | else |
---|
| 59 | ### other compilers do not prepend .f name with F |
---|
| 60 | dotf_prepend= |
---|
| 61 | FCFLAGS += -Iinclude |
---|
| 62 | endif |
---|
| 63 | |
---|
| 64 | .SUFFIXES: |
---|
| 65 | .SUFFIXES: .a .o .cc .cxx .c .f .F .d |
---|
| 66 | |
---|
| 67 | ### --------------------- vpaths ---------------------------------------------- |
---|
| 68 | |
---|
| 69 | vpath %.hh $(patsubst -I%,%,$(filter -I%,$(CPPFLAGS))) |
---|
| 70 | vpath %.inc $(patsubst -I%,%,$(filter -I%,$(CPPFLAGS))) |
---|
| 71 | |
---|
| 72 | G4LIBDIR := $(G4LIB)/$(G4SYSTEM) |
---|
| 73 | G4TMPDIR := $(G4TMP)/$(G4SYSTEM)/$(name) |
---|
| 74 | G4BINDIR := $(G4BIN)/$(G4SYSTEM) |
---|
| 75 | |
---|
| 76 | Fbinsources = src/$(G4TARGET).F |
---|
| 77 | Fbinobjects = $(patsubst src/%.F,$(G4TMPDIR)/%.o,$(Fbinsources)) |
---|
| 78 | Flibsources = $(filter-out $(Fbinsources),$(wildcard src/*.F)) |
---|
| 79 | Flibobjects = $(patsubst src/%.F,$(G4TMPDIR)/%.o,$(Flibsources)) |
---|
| 80 | Fdependencies = $(patsubst %.o,%.d,$(Fbinobjects) $(Flibobjects)) |
---|
| 81 | |
---|
| 82 | ifdef G3G4DEBUG |
---|
| 83 | CPPFLAGS += -DG3G4DEBUG |
---|
| 84 | endif |
---|
| 85 | ifdef G3G4_NO_REFLECTION |
---|
| 86 | CPPFLAGS += -DG3G4_NO_REFLECTION |
---|
| 87 | endif |
---|
| 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 | |
---|
| 101 | first: lib |
---|
| 102 | |
---|
| 103 | global: lib bin |
---|
| 104 | |
---|
| 105 | all: lib |
---|
| 106 | |
---|
| 107 | lib: libc libF |
---|
| 108 | |
---|
| 109 | ifneq ($(G4LIB_BUILD_SHARED),) |
---|
| 110 | libc : $(G4LIBDIR)/lib$(name).$(SHEXT) |
---|
| 111 | else |
---|
| 112 | libc : $(G4LIBDIR)/lib$(name).a |
---|
| 113 | endif |
---|
| 114 | @echo $@ stage done |
---|
| 115 | |
---|
| 116 | libF : $(G4LIBDIR)/lib$(name)F.a |
---|
| 117 | @echo $@ stage done |
---|
| 118 | |
---|
| 119 | bin: $(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 | |
---|
| 177 | clean:: cleanf |
---|
| 178 | |
---|
| 179 | cleanf: |
---|
| 180 | @$(RM) $(Flibobjects) |
---|
| 181 | @$(RM) $(Fbinobjects) |
---|
| 182 | @$(RM) $(Fdependencies) |
---|
| 183 | @$(RM) $(G4BINDIR)/$(G4TARGET) |
---|
| 184 | |
---|
| 185 | include $(G4INSTALL)/config/common.gmk |
---|
| 186 | |
---|
| 187 | test1: |
---|
| 188 | @echo $(sources) |
---|
| 189 | @echo $(objects) |
---|
| 190 | @echo $(dependencies) |
---|