forked from cmbant/CAMB
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile_main
168 lines (125 loc) · 5.43 KB
/
Makefile_main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#Files containing evolution equations initial power spectrum module
EQUATIONS ?= equations
POWERSPECTRUM ?= power_tilt
REIONIZATION ?= reionization
RECOMBINATION ?= recfast
BISPECTRUM ?= SeparableBispectrum
#Module doing non-linear scaling
NONLINEAR ?= halofit_ppf
#Driver program
DRIVER ?= inidriver.F90
#DRIVER ?= sigma8.f90
#DRIVER ?= tester.f90
Release: OUTPUT_DIR = Release
Debug: OUTPUT_DIR = Debug
Release: DLL_DIR = Releaselib
Debug: DLL_DIR = Debuglib
OUTPUT_DIR ?= Release
PYCAMB_OUTPUT_DIR ?= pycamb/camb
DLL_DIR ?= Releaselib
CAMBLIB = $(OUTPUT_DIR)/libcamb_$(RECOMBINATION).a
F90FLAGS = $(FFLAGS)
F90FLAGS += $(MODOUT) $(IFLAG)$(OUTPUT_DIR)/
SF90FLAGS = $(SFFLAGS) $(FFLAGS)
SF90FLAGS += $(SMODOUT) $(IFLAG)$(DLL_DIR)/
HEALPIXLD = -L$(HEALPIXDIR)/lib -lhealpix -L$(FITSDIR) -l$(FITSLIB)
CAMBOBJ = $(OUTPUT_DIR)/constants.o $(OUTPUT_DIR)/utils.o $(EXTCAMBFILES) $(OUTPUT_DIR)/subroutines.o \
$(OUTPUT_DIR)/inifile.o $(OUTPUT_DIR)/$(POWERSPECTRUM).o $(OUTPUT_DIR)/$(RECOMBINATION).o \
$(OUTPUT_DIR)/$(REIONIZATION).o $(OUTPUT_DIR)/modules.o $(OUTPUT_DIR)/bessels.o $(OUTPUT_DIR)/$(EQUATIONS).o \
$(OUTPUT_DIR)/$(NONLINEAR).o $(OUTPUT_DIR)/lensing.o $(OUTPUT_DIR)/$(BISPECTRUM).o $(OUTPUT_DIR)/cmbmain.o \
$(OUTPUT_DIR)/camb.o
CAMBSO = $(DLL_DIR)/constants.o $(DLL_DIR)/utils.o $(EXTCAMBFILES) $(DLL_DIR)/subroutines.o \
$(DLL_DIR)/inifile.o $(DLL_DIR)/$(POWERSPECTRUM).o $(DLL_DIR)/$(RECOMBINATION).o \
$(DLL_DIR)/$(REIONIZATION).o $(DLL_DIR)/modules.o $(DLL_DIR)/bessels.o $(DLL_DIR)/$(EQUATIONS).o \
$(DLL_DIR)/$(NONLINEAR).o $(DLL_DIR)/lensing.o $(DLL_DIR)/$(BISPECTRUM).o $(DLL_DIR)/cmbmain.o \
$(DLL_DIR)/camb.o $(DLL_DIR)/camb_python.o
#F90CRLINK ?= -lstdc++
## CosmoRec
ifeq ($(RECOMBINATION),cosmorec)
COSMOREC_PATH ?=../CosmoRec/
GSL_LINK ?=-lgsl -lgslcblas
camb: libCosmoRec.a
$(CAMBLIB): libCosmoRec.a
F90CRLINK += -L$(COSMOREC_PATH) -lCosmoRec $(GSL_LINK) -lstdc++
endif
ifeq ($(RECOMBINATION),hyrec)
HYREC_PATH ?= ../HyRec/
camb: libhyrec.a
$(CAMBLIB): libhyrec.a
F90CRLINK += -L$(HYREC_PATH) -lhyrec
endif
default: camb
## python wrapper library only works with gfortran
ifeq ($(COMPILER),gfortran)
all: camb camblib.so libcamb
Release: camb camblib.so
Debug: camb camblib.so
else
all: camb libcamb
Release: camb
Debug: camb
endif
libcamb: $(CAMBLIB)
$(OUTPUT_DIR)/subroutines.o: $(OUTPUT_DIR)/constants.o $(OUTPUT_DIR)/utils.o
$(OUTPUT_DIR)/$(POWERSPECTRUM).o: $(OUTPUT_DIR)/subroutines.o $(OUTPUT_DIR)/inifile.o
$(OUTPUT_DIR)/$(RECOMBINATION).o: $(OUTPUT_DIR)/subroutines.o $(OUTPUT_DIR)/inifile.o
$(OUTPUT_DIR)/$(REIONIZATION).o: $(OUTPUT_DIR)/constants.o $(OUTPUT_DIR)/inifile.o
$(OUTPUT_DIR)/modules.o: $(OUTPUT_DIR)/$(REIONIZATION).o $(OUTPUT_DIR)/$(POWERSPECTRUM).o $(OUTPUT_DIR)/$(RECOMBINATION).o
$(OUTPUT_DIR)/bessels.o: $(OUTPUT_DIR)/modules.o
$(OUTPUT_DIR)/$(EQUATIONS).o: $(OUTPUT_DIR)/bessels.o
$(OUTPUT_DIR)/$(NONLINEAR).o: $(OUTPUT_DIR)/modules.o $(OUTPUT_DIR)/$(EQUATIONS).o
$(OUTPUT_DIR)/lensing.o: $(OUTPUT_DIR)/bessels.o
$(OUTPUT_DIR)/$(BISPECTRUM).o: $(OUTPUT_DIR)/lensing.o $(OUTPUT_DIR)/modules.o
$(OUTPUT_DIR)/cmbmain.o: $(OUTPUT_DIR)/lensing.o $(OUTPUT_DIR)/$(NONLINEAR).o $(OUTPUT_DIR)/$(EQUATIONS).o $(OUTPUT_DIR)/$(BISPECTRUM).o
$(OUTPUT_DIR)/camb.o: $(OUTPUT_DIR)/cmbmain.o
$(OUTPUT_DIR)/Matrix_utils.o: $(OUTPUT_DIR)/utils.o
$(DLL_DIR)/subroutines.o: $(DLL_DIR)/constants.o $(DLL_DIR)/utils.o
$(DLL_DIR)/$(POWERSPECTRUM).o: $(DLL_DIR)/subroutines.o $(DLL_DIR)/inifile.o
$(DLL_DIR)/$(RECOMBINATION).o: $(DLL_DIR)/subroutines.o $(DLL_DIR)/inifile.o
$(DLL_DIR)/$(REIONIZATION).o: $(DLL_DIR)/constants.o $(DLL_DIR)/inifile.o
$(DLL_DIR)/modules.o: $(DLL_DIR)/$(REIONIZATION).o $(DLL_DIR)/$(POWERSPECTRUM).o $(DLL_DIR)/$(RECOMBINATION).o
$(DLL_DIR)/bessels.o: $(DLL_DIR)/modules.o
$(DLL_DIR)/$(EQUATIONS).o: $(DLL_DIR)/bessels.o
$(DLL_DIR)/$(NONLINEAR).o: $(DLL_DIR)/modules.o $(DLL_DIR)/$(EQUATIONS).o
$(DLL_DIR)/lensing.o: $(DLL_DIR)/bessels.o
$(DLL_DIR)/$(BISPECTRUM).o: $(DLL_DIR)/lensing.o $(DLL_DIR)/modules.o
$(DLL_DIR)/cmbmain.o: $(DLL_DIR)/lensing.o $(DLL_DIR)/$(NONLINEAR).o $(DLL_DIR)/$(EQUATIONS).o $(DLL_DIR)/$(BISPECTRUM).o
$(DLL_DIR)/camb.o: $(DLL_DIR)/cmbmain.o
$(DLL_DIR)/Matrix_utils.o: $(DLL_DIR)/utils.o
$(DLL_DIR)/camb_python.o: $(DLL_DIR)/camb.o
camblib.so: folders $(CAMBSO)
$(F90C) $(SF90FLAGS) $(CAMBSO) -o $(DLL_DIR)/camblib.so
cp $(DLL_DIR)/camblib.so $(PYCAMB_OUTPUT_DIR) >/dev/null || :
camb: directories $(CAMBOBJ) $(DRIVER)
$(F90C) $(F90FLAGS) $(CAMBOBJ) $(DRIVER) $(F90CRLINK) -o $@
$(CAMBLIB): directories $(CAMBOBJ)
ar -r $@ $(CAMBOBJ)
camb_fits: directories writefits.f90 $(CAMBOBJ) $(DRIVER)
$(F90C) $(F90FLAGS) -I$(HEALPIXDIR)/include $(CAMBOBJ) writefits.f90 $(DRIVER) $(HEALPIXLD) -DWRITE_FITS -o $@
$(DLL_DIR)/%.o: %.f90
$(F90C) $(SF90FLAGS) -c $*.f90 -o $(DLL_DIR)/$*.o
$(DLL_DIR)/%.o: %.F90
$(F90C) $(SF90FLAGS) -c $*.F90 -o $(DLL_DIR)/$*.o
$(OUTPUT_DIR)/%.o: %.f90
$(F90C) $(F90FLAGS) -c $*.f90 -o $(OUTPUT_DIR)/$*.o
$(OUTPUT_DIR)/%.o: %.F90
$(F90C) $(F90FLAGS) -c $*.F90 -o $(OUTPUT_DIR)/$*.o
folders:
mkdir -p $(DLL_DIR)
directories:
mkdir -p $(OUTPUT_DIR)
clean:
rm -f *.o *.a *.d core *.mod $(DLL_DIR)/*.o $(DLL_DIR)/*.mod
rm -f *.o *.a *.d core *.mod $(OUTPUT_DIR)/*.o $(OUTPUT_DIR)/*.mod
rm -rf Release*
rm -rf Debug*
delete:
rm -f camb
rm -f pycamb/camb/*.so
## CosmoRec make parts
cleanCR:
cd $(COSMOREC_PATH); make tidy;
libCosmoRec.a:
cd $(COSMOREC_PATH); make lib;
libhyrec.a:
cd $(HYREC_PATH); make libhyrec.a;