https://github.com/geodynamics/aspect
Tip revision: d3f37f9a7d6aa1de829297d3f8777aef1d040446 authored by Wolfgang Bangerth on 24 March 2012, 23:17:47 UTC
Check in updated version.
Check in updated version.
Tip revision: d3f37f9
Makefile
# $Id: Makefile.large 22840 2010-11-22 22:28:16Z bangerth $
# The large projects Makefile looks much like the one for small
# projects. Basically, only the following seven parameters need to be
# set by you:
application-name = aspect
deal_II_dimension = 2
# The next variable tells us the name of the executable. It is prefixed by
# `lib/' to designate its destination directory. Note that the program
# name depends on the dimension, so you can keep copies for the
# different dimensions around:
target = lib/$(application-name)-$(deal_II_dimension)d
# The `debug-mode' variable works as in the small projects Makefile:
debug-mode = on
# And so does the following variable. You will have to set it to
# something reasonable that, for example, includes the location where you
# put output files that you want the `make clean' rule to delete
clean-up-files =
# Finally, here is a variable which tells the `run' rule which
# parameters to pass to the executable. Usually, this will be the name
# of an input file.
run-parameters = parameter-file.prm
# Now, this is the last variable you need to set, namely the path to
# the deal.II toplevel directory:
DEAL_DIR?=../../deal.II
D = $(DEAL_DIR)
#
#
# Usually, you will not need to change anything beyond this point.
#
#
# This tells `make' where to find the global settings and rules:
include $D/common/Make.global_options
# list the directories and the various kinds of files
all-dirs := source \
source/simulator \
source/geometry_model \
source/gravity_model \
source/boundary_temperature \
source/initial_conditions \
source/material_model \
source/postprocess
cc-files := $(shell for i in $(all-dirs) ; do echo $$i/*.cc ; done)
tmp1 := $(shell echo $(cc-files) | $(PERL) -pi -e 's,source/,,g; s,/,_,g;')
o-files := $(addprefix lib/$(deal_II_dimension)d/, $(tmp1:.cc=.$(OBJEXT)) )
go-files := $(addprefix lib/$(deal_II_dimension)d/, $(tmp1:.cc=.g.$(OBJEXT)))
h-files := $(wildcard include/aspect/*.h include/aspect/*/*h)
lib-h-files := $(shell echo $D/include/deal.II/*/*.h)
# As before, define two variables that denote the debug and optimized
# versions of the deal.II libraries:
libs.g := $(lib-deal2.g)
libs.o := $(lib-deal2.o)
INCLUDE += -Iinclude
# Now use the information from above to define the set of libraries to
# link with and the flags to be passed to the compiler:
ifeq ($(debug-mode),on)
libraries = $(go-files) $(libs.g)
flags = $(CXXFLAGS.g)
else
libraries = $(o-files) $(libs.o)
flags = $(CXXFLAGS.o)
endif
# Then augment the compiler flags by a specification of the dimension
# for which the program shall be compiled:
flags += -Ddeal_II_dimension=$(deal_II_dimension)
# The following two rules define how to compile C++ files into object
# files:
lib/$(deal_II_dimension)d/%.g.$(OBJEXT) :
@echo =====$(application-name)=======$(deal_II_dimension)d====debug=====$(MT)== $<
@$(CXX) $(flags) -c $< -o $@
lib/$(deal_II_dimension)d/%.$(OBJEXT) :
@echo =====$(application-name)=======$(deal_II_dimension)d====optimized=$(MT)== $<
@$(CXX) $(flags) -c $< -o $@
# Next define how to link the executable
build : $(target)$(EXEEXT)
$(target)$(EXEEXT) : $(libraries) Makefile
@echo =====$(application-name)=======$(deal_II_dimension)d==============$(MT)== Linking $@
@$(CXX) -o $@ $(libraries) $(LIBS) $(LDFLAGS)
# Rule how to run the program
run: $(target)$(EXEEXT)
./$(target)$(EXEEXT) $(run-parameters)
doc:
@cd doc ; make
indent:
@echo "============ Indenting all files"
@astyle --options=lib/astyle.rc $(h-files) $(cc-files)
.PHONY: run build doc indent
# Rule how to clean up. This is split into several different rules to
# allow for parallel execution of commands:
clean: clean-lib clean-data
-rm -f *~ */*~ */*/*~ source/Makefile.dep source/*/Makefile.dep
-cd doc ; make clean
clean-lib:
-rm -f lib/?d/*.$(OBJEXT) lib/?d/*.g.$(OBJEXT) $(target)$(EXEEXT) lib/$(application-name)-?d$(EXEEXT) lib/TAGS
clean-data:
-rm -f $(clean-up-files)
# Again tell `make' which rules are not meant to produce files:
.PHONY: clean clean-data clean-lib run
# Rule to generate the dependency files, one for each source
# directory. These file are automagically remade whenever needed,
# i.e. whenever one of the cc-/h-files changed. Make detects whether
# to remake this file upon inclusion below.
#
# If the command fails, then remove Makefile.dep again and fail
%/Makefile.dep: $(filter $(dir $@)%, $(cc-files)) \
$(h-files) \
$(lib-h-files) \
Makefile
@echo "====================================== Remaking $@"
@(($D/common/scripts/make_dependencies -n $(INCLUDE) "-Blib/$(deal_II_dimension)d" \
$(filter $(dir $@)%, $(cc-files)) \
| $(PERL) -pe 's!debug/(.*)\.o:!$(subst source_,,$(subst /,_,$(dir $@)))\1.g.o:!g;' \
| $(PERL) -pe 's!optimized/(.*)\.o:!$(subst source_,,$(subst /,_,$(dir $@)))\1.o:!g;' \
) > $@) \
|| (rm -f $@ ; false)
# include all the dependencies
include $(addsuffix /Makefile.dep, $(all-dirs))