Skip to content

Commit 954504e

Browse files
committed
add Makefile
1 parent cdccd72 commit 954504e

1 file changed

Lines changed: 323 additions & 0 deletions

File tree

Lines changed: 323 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,323 @@
1+
VERSION := $(shell grep . VERSION.txt | cut -f1 -d:)
2+
PROGRAM_NAME := project
3+
4+
CC := g++
5+
# CC := g++-mp-7 # typical macports compiler name
6+
# CC := g++-7 # typical homebrew compiler name
7+
8+
# Check for environment definitions of compiler
9+
# e.g., on CC = g++-7 on OSX
10+
ifdef PHYSICELL_CPP
11+
CC := $(PHYSICELL_CPP)
12+
endif
13+
14+
ifndef STATIC_OPENMP
15+
STATIC_OPENMP = -fopenmp
16+
endif
17+
18+
ARCH := native # best auto-tuning
19+
# ARCH := core2 # a reasonably safe default for most CPUs since 2007
20+
# ARCH := corei7
21+
# ARCH := corei7-avx # earlier i7
22+
# ARCH := core-avx-i # i7 ivy bridge or newer
23+
# ARCH := core-avx2 # i7 with Haswell or newer
24+
# ARCH := nehalem
25+
# ARCH := westmere
26+
# ARCH := sandybridge # circa 2011
27+
# ARCH := ivybridge # circa 2012
28+
# ARCH := haswell # circa 2013
29+
# ARCH := broadwell # circa 2014
30+
# ARCH := skylake # circa 2015
31+
# ARCH := bonnell
32+
# ARCH := silvermont
33+
# ARCH := skylake-avx512
34+
# ARCH := nocona #64-bit pentium 4 or later
35+
36+
# CFLAGS := -march=$(ARCH) -Ofast -s -fomit-frame-pointer -mfpmath=both -fopenmp -m64 -std=c++11
37+
CFLAGS := -march=$(ARCH) -O3 -fomit-frame-pointer -mfpmath=both -fopenmp -m64 -std=c++11
38+
39+
ifeq ($(OS),Windows_NT)
40+
else
41+
UNAME_S := $(shell uname -s)
42+
ifeq ($(UNAME_S),Darwin)
43+
UNAME_P := $(shell uname -p)
44+
var := $(shell which $(CC) | xargs file)
45+
ifeq ($(lastword $(var)),arm64)
46+
CFLAGS := -march=$(ARCH) -O3 -fomit-frame-pointer -fopenmp -m64 -std=c++11
47+
endif
48+
endif
49+
endif
50+
51+
CFLAGS_LINK := $(shell echo $(CFLAGS) | sed -e "s/-fopenmp//g")
52+
COMPILE_COMMAND := $(CC) $(CFLAGS) $(EXTRA_FLAGS)
53+
LINK_COMMAND := $(CC) $(CFLAGS_LINK) $(EXTRA_FLAGS)
54+
55+
BioFVM_OBJECTS := BioFVM_vector.o BioFVM_mesh.o BioFVM_microenvironment.o BioFVM_solvers.o BioFVM_matlab.o \
56+
BioFVM_utilities.o BioFVM_basic_agent.o BioFVM_MultiCellDS.o BioFVM_agent_container.o
57+
58+
PhysiCell_core_OBJECTS := PhysiCell_phenotype.o PhysiCell_cell_container.o PhysiCell_standard_models.o \
59+
PhysiCell_cell.o PhysiCell_custom.o PhysiCell_utilities.o PhysiCell_constants.o PhysiCell_basic_signaling.o \
60+
PhysiCell_signal_behavior.o PhysiCell_rules.o
61+
62+
PhysiCell_module_OBJECTS := PhysiCell_SVG.o PhysiCell_pathology.o PhysiCell_MultiCellDS.o PhysiCell_various_outputs.o \
63+
PhysiCell_pugixml.o PhysiCell_settings.o PhysiCell_geometry.o
64+
65+
# put your custom objects here (they should be in the custom_modules directory)
66+
67+
PhysiCell_custom_module_OBJECTS := custom.o
68+
69+
pugixml_OBJECTS := pugixml.o
70+
71+
PhysiCell_OBJECTS := $(BioFVM_OBJECTS) $(pugixml_OBJECTS) $(PhysiCell_core_OBJECTS) $(PhysiCell_module_OBJECTS)
72+
ALL_OBJECTS := $(PhysiCell_OBJECTS) $(PhysiCell_custom_module_OBJECTS)
73+
74+
# compile the project
75+
76+
all: main.cpp $(ALL_OBJECTS)
77+
$(COMPILE_COMMAND) -o $(PROGRAM_NAME) $(ALL_OBJECTS) main.cpp
78+
make name
79+
80+
static: main.cpp $(ALL_OBJECTS) $(MaBoSS)
81+
$(LINK_COMMAND) $(INC) -o $(PROGRAM_NAME) $(ALL_OBJECTS) main.cpp $(LIB) -static-libgcc -static-libstdc++ $(STATIC_OPENMP)
82+
83+
name:
84+
@echo ""
85+
@echo "Executable name is" $(PROGRAM_NAME)
86+
@echo ""
87+
88+
# PhysiCell core components
89+
90+
PhysiCell_phenotype.o: ./core/PhysiCell_phenotype.cpp
91+
$(COMPILE_COMMAND) -c ./core/PhysiCell_phenotype.cpp
92+
93+
PhysiCell_digital_cell_line.o: ./core/PhysiCell_digital_cell_line.cpp
94+
$(COMPILE_COMMAND) -c ./core/PhysiCell_digital_cell_line.cpp
95+
96+
PhysiCell_cell.o: ./core/PhysiCell_cell.cpp
97+
$(COMPILE_COMMAND) -c ./core/PhysiCell_cell.cpp
98+
99+
PhysiCell_cell_container.o: ./core/PhysiCell_cell_container.cpp
100+
$(COMPILE_COMMAND) -c ./core/PhysiCell_cell_container.cpp
101+
102+
PhysiCell_standard_models.o: ./core/PhysiCell_standard_models.cpp
103+
$(COMPILE_COMMAND) -c ./core/PhysiCell_standard_models.cpp
104+
105+
PhysiCell_utilities.o: ./core/PhysiCell_utilities.cpp
106+
$(COMPILE_COMMAND) -c ./core/PhysiCell_utilities.cpp
107+
108+
PhysiCell_custom.o: ./core/PhysiCell_custom.cpp
109+
$(COMPILE_COMMAND) -c ./core/PhysiCell_custom.cpp
110+
111+
PhysiCell_constants.o: ./core/PhysiCell_constants.cpp
112+
$(COMPILE_COMMAND) -c ./core/PhysiCell_constants.cpp
113+
114+
PhysiCell_signal_behavior.o: ./core/PhysiCell_signal_behavior.cpp
115+
$(COMPILE_COMMAND) -c ./core/PhysiCell_signal_behavior.cpp
116+
117+
PhysiCell_rules.o: ./core/PhysiCell_rules.cpp
118+
$(COMPILE_COMMAND) -c ./core/PhysiCell_rules.cpp
119+
120+
# BioFVM core components (needed by PhysiCell)
121+
122+
BioFVM_vector.o: ./BioFVM/BioFVM_vector.cpp
123+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_vector.cpp
124+
125+
BioFVM_agent_container.o: ./BioFVM/BioFVM_agent_container.cpp
126+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_agent_container.cpp
127+
128+
BioFVM_mesh.o: ./BioFVM/BioFVM_mesh.cpp
129+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_mesh.cpp
130+
131+
BioFVM_microenvironment.o: ./BioFVM/BioFVM_microenvironment.cpp
132+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_microenvironment.cpp
133+
134+
BioFVM_solvers.o: ./BioFVM/BioFVM_solvers.cpp
135+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_solvers.cpp
136+
137+
BioFVM_utilities.o: ./BioFVM/BioFVM_utilities.cpp
138+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_utilities.cpp
139+
140+
BioFVM_basic_agent.o: ./BioFVM/BioFVM_basic_agent.cpp
141+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_basic_agent.cpp
142+
143+
BioFVM_matlab.o: ./BioFVM/BioFVM_matlab.cpp
144+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_matlab.cpp
145+
146+
BioFVM_MultiCellDS.o: ./BioFVM/BioFVM_MultiCellDS.cpp
147+
$(COMPILE_COMMAND) -c ./BioFVM/BioFVM_MultiCellDS.cpp
148+
149+
pugixml.o: ./BioFVM/pugixml.cpp
150+
$(COMPILE_COMMAND) -c ./BioFVM/pugixml.cpp
151+
152+
# standard PhysiCell modules
153+
154+
PhysiCell_SVG.o: ./modules/PhysiCell_SVG.cpp
155+
$(COMPILE_COMMAND) -c ./modules/PhysiCell_SVG.cpp
156+
157+
PhysiCell_pathology.o: ./modules/PhysiCell_pathology.cpp
158+
$(COMPILE_COMMAND) -c ./modules/PhysiCell_pathology.cpp
159+
160+
PhysiCell_MultiCellDS.o: ./modules/PhysiCell_MultiCellDS.cpp
161+
$(COMPILE_COMMAND) -c ./modules/PhysiCell_MultiCellDS.cpp
162+
163+
PhysiCell_various_outputs.o: ./modules/PhysiCell_various_outputs.cpp
164+
$(COMPILE_COMMAND) -c ./modules/PhysiCell_various_outputs.cpp
165+
166+
PhysiCell_pugixml.o: ./modules/PhysiCell_pugixml.cpp
167+
$(COMPILE_COMMAND) -c ./modules/PhysiCell_pugixml.cpp
168+
169+
PhysiCell_settings.o: ./modules/PhysiCell_settings.cpp
170+
$(COMPILE_COMMAND) -c ./modules/PhysiCell_settings.cpp
171+
172+
PhysiCell_basic_signaling.o: ./core/PhysiCell_basic_signaling.cpp
173+
$(COMPILE_COMMAND) -c ./core/PhysiCell_basic_signaling.cpp
174+
175+
PhysiCell_geometry.o: ./modules/PhysiCell_geometry.cpp
176+
$(COMPILE_COMMAND) -c ./modules/PhysiCell_geometry.cpp
177+
178+
# user-defined PhysiCell modules
179+
180+
custom.o: ./custom_modules/custom.cpp
181+
$(COMPILE_COMMAND) -c ./custom_modules/custom.cpp
182+
183+
# cleanup
184+
185+
reset:
186+
rm -f *.cpp
187+
cp ./sample_projects/Makefile-default Makefile
188+
rm -f ./custom_modules/*
189+
touch ./custom_modules/empty.txt
190+
touch ALL_CITATIONS.txt
191+
touch ./core/PhysiCell_cell.cpp
192+
rm ALL_CITATIONS.txt
193+
cp ./config/PhysiCell_settings-backup.xml ./config/PhysiCell_settings.xml
194+
touch ./config/empty.csv
195+
rm -f ./config/*.csv
196+
197+
clean:
198+
rm -f *.o
199+
rm -f $(PROGRAM_NAME)*
200+
201+
data-cleanup:
202+
rm -rf ./output
203+
mkdir ./output
204+
touch ./output/empty.txt
205+
206+
# archival
207+
208+
checkpoint:
209+
zip -r $$(date +%b_%d_%Y_%H%M).zip Makefile *.cpp *.h config/*.xml custom_modules/*
210+
211+
zip:
212+
zip -r latest.zip Makefile* *.cpp *.h BioFVM/* config/* core/* custom_modules/* matlab/* modules/* sample_projects/*
213+
cp latest.zip $$(date +%b_%d_%Y_%H%M).zip
214+
cp latest.zip VERSION_$(VERSION).zip
215+
mv *.zip archives/
216+
217+
tar:
218+
tar --ignore-failed-read -czf latest.tar Makefile* *.cpp *.h BioFVM/* config/* core/* custom_modules/* matlab/* modules/* sample_projects/*
219+
cp latest.tar $$(date +%b_%d_%Y_%H%M).tar
220+
cp latest.tar VERSION_$(VERSION).tar
221+
mv *.tar archives/
222+
223+
unzip:
224+
cp ./archives/latest.zip .
225+
unzip latest.zip
226+
227+
untar:
228+
cp ./archives/latest.tar .
229+
tar -xzf latest.tar
230+
231+
# easier animation
232+
233+
FRAMERATE := 24
234+
OUTPUT := output
235+
236+
jpeg:
237+
@magick identify -format "%h" $(OUTPUT)/initial.svg > __H.txt
238+
@magick identify -format "%w" $(OUTPUT)/initial.svg > __W.txt
239+
@expr 2 \* \( $$(grep . __H.txt) / 2 \) > __H1.txt
240+
@expr 2 \* \( $$(grep . __W.txt) / 2 \) > __W1.txt
241+
@echo "$$(grep . __W1.txt)!x$$(grep . __H1.txt)!" > __resize.txt
242+
@magick mogrify -format jpg -resize $$(grep . __resize.txt) $(OUTPUT)/s*.svg
243+
rm -f __H*.txt __W*.txt __resize.txt
244+
245+
gif:
246+
magick convert $(OUTPUT)/s*.svg $(OUTPUT)/out.gif
247+
248+
movie:
249+
ffmpeg -r $(FRAMERATE) -f image2 -i $(OUTPUT)/snapshot%08d.jpg -vcodec libx264 -pix_fmt yuv420p -strict -2 -tune animation -crf 15 -acodec none $(OUTPUT)/out.mp4
250+
251+
# upgrade rules
252+
253+
SOURCE := PhysiCell_upgrade.zip
254+
get-upgrade:
255+
@echo $$(curl https://raw.githubusercontent.com/MathCancer/PhysiCell/master/VERSION.txt) > VER.txt
256+
@echo https://github.com/MathCancer/PhysiCell/releases/download/$$(grep . VER.txt)/PhysiCell_V.$$(grep . VER.txt).zip > DL_FILE.txt
257+
rm -f VER.txt
258+
$$(curl -L $$(grep . DL_FILE.txt) --output PhysiCell_upgrade.zip)
259+
rm -f DL_FILE.txt
260+
261+
PhysiCell_upgrade.zip:
262+
make get-upgrade
263+
264+
upgrade: $(SOURCE)
265+
unzip $(SOURCE) PhysiCell/VERSION.txt
266+
mv -f PhysiCell/VERSION.txt .
267+
unzip $(SOURCE) PhysiCell/core/*
268+
cp -r PhysiCell/core/* core
269+
unzip $(SOURCE) PhysiCell/modules/*
270+
cp -r PhysiCell/modules/* modules
271+
unzip $(SOURCE) PhysiCell/sample_projects/*
272+
cp -r PhysiCell/sample_projects/* sample_projects
273+
unzip $(SOURCE) PhysiCell/BioFVM/*
274+
cp -r PhysiCell/BioFVM/* BioFVM
275+
unzip $(SOURCE) PhysiCell/documentation/User_Guide.pdf
276+
mv -f PhysiCell/documentation/User_Guide.pdf documentation
277+
rm -f -r PhysiCell
278+
rm -f $(SOURCE)
279+
280+
# use: make save PROJ=your_project_name
281+
PROJ := my_project
282+
283+
save:
284+
echo "Saving project as $(PROJ) ... "
285+
mkdir -p ./user_projects
286+
mkdir -p ./user_projects/$(PROJ)
287+
mkdir -p ./user_projects/$(PROJ)/custom_modules
288+
mkdir -p ./user_projects/$(PROJ)/config
289+
cp main.cpp ./user_projects/$(PROJ)
290+
cp Makefile ./user_projects/$(PROJ)
291+
cp VERSION.txt ./user_projects/$(PROJ)
292+
cp ./config/* ./user_projects/$(PROJ)/config
293+
cp ./custom_modules/* ./user_projects/$(PROJ)/custom_modules
294+
295+
load:
296+
echo "Loading project from $(PROJ) ... "
297+
cp ./user_projects/$(PROJ)/main.cpp .
298+
cp ./user_projects/$(PROJ)/Makefile .
299+
cp ./user_projects/$(PROJ)/config/* ./config/
300+
cp ./user_projects/$(PROJ)/custom_modules/* ./custom_modules/
301+
302+
pack:
303+
@echo " "
304+
@echo "Preparing project $(PROJ) for sharing ... "
305+
@echo " "
306+
cd ./user_projects && zip -r $(PROJ).zip $(PROJ)
307+
@echo " "
308+
@echo "Share ./user_projects/$(PROJ).zip ... "
309+
@echo "Other users can unzip $(PROJ).zip in their ./user_projects, compile, and run."
310+
@echo " "
311+
312+
unpack:
313+
@echo " "
314+
@echo "Preparing shared project $(PROJ).zip for use ... "
315+
@echo " "
316+
cd ./user_projects && unzip $(PROJ).zip
317+
@echo " "
318+
@echo "Load this project via make load PROJ=$(PROJ) ... "
319+
@echo " "
320+
321+
list-user-projects:
322+
@echo "user projects::"
323+
@cd ./user_projects && ls -dt1 * | grep . | sed 's!empty.txt!!'

0 commit comments

Comments
 (0)