Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reorganize the makefiles #782

Merged
merged 8 commits into from
Feb 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
201 changes: 7 additions & 194 deletions Exec/Make.Castro
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ endif
# Locations within Microphysics
EOS_HOME ?= $(MICROPHYSICS_HOME)/EOS
NETWORK_HOME ?= $(MICROPHYSICS_HOME)/networks
COND_HOME ?= $(MICROPHYSICS_HOME)/conductivity
CONDUCTIVITY_HOME ?= $(MICROPHYSICS_HOME)/conductivity

# AMReX is a git submodule of Castro. By default
# we assume it is in the external/ directory.
Expand Down Expand Up @@ -289,83 +289,17 @@ Bpack += $(foreach dir, $(Pdirs), $(AMREX_HOME)/Src/$(dir)/Make.package)
# microphysics
#------------------------------------------------------------------------------

EOS_PATH := $(MICROPHYSICS_HOME)/EOS/$(strip $(EOS_DIR))
NETWORK_PATH := $(MICROPHYSICS_HOME)/networks/$(strip $(NETWORK_DIR))
ifeq ($(USE_DIFFUSION), TRUE)
COND_PATH := $(MICROPHYSICS_HOME)/conductivity/$(strip $(CONDUCTIVITY_DIR))
endif

# Problems can specify the input file for general_null by setting
# GENERAL_NET_INPUTS directly (full path) or just specifying the name
# of the inputs file as NETWORK_INPUTS and let us sort it out
ifndef GENERAL_NET_INPUTS
ifneq "$(wildcard $(NETWORK_INPUTS))" ""
GENERAL_NET_INPUTS := $(NETWORK_INPUTS)
else
GENERAL_NET_INPUTS := $(MICROPHYSICS_HOME)/networks/general_null/$(NETWORK_INPUTS)
endif
endif

# Specify that we want to write the general_null network
# files to our temporary build directory (this has no
# effect for other networks).
# Specify that we want to write any automatically generated network
# file (including the general_null network) to our temporary build
# directory
NETWORK_OUTPUT_PATH = $(CASTRO_AUTO_SOURCE_DIR)

EXTERN_CORE += $(EOS_PATH)
EXTERN_CORE += $(EOS_HOME)

# the helmholtz EOS has an include file -- also add a target to link
# the table into the problem directory.
ifeq ($(findstring helmholtz, $(EOS_DIR)), helmholtz)
all: table
endif

table:
@if [ ! -f helm_table.dat ]; then echo Linking helm_table.dat; ln -s $(EOS_PATH)/helm_table.dat .; fi

EXTERN_CORE += $(NETWORK_PATH)

# Note that this should be located after the include of the EOS and
# Network includes since it has actions that depend on variables set
# there.

EXTERN_CORE += $(MICROPHYSICS_HOME)/EOS
EXTERN_CORE += $(MICROPHYSICS_HOME)/networks
EXTERN_CORE += $(MICROPHYSICS_HOME)/interfaces

# for the automatically generated network_properties stuff, we should
# tell it where to put them
NETWORK_HEADERS_DIR = $(CASTRO_AUTO_SOURCE_DIR)


ifeq ($(USE_CONDUCTIVITY), TRUE)
EXTERN_CORE += $(COND_HOME)
EXTERN_CORE += $(COND_PATH)
endif

ifeq ($(USE_RAD), TRUE)
ifeq ($(Opacity_dir), null)
$(error The null opacity directory has been removed, please update to rad_power_law)
endif
OPAC_PATH := $(MICROPHYSICS_HOME)/opacity/$(Opacity_dir)
EXTERN_CORE += $(OPAC_PATH)
endif
include $(MICROPHYSICS_HOME)/Make.Microphysics_extern

Bpack += $(foreach dir, $(EXTERN_CORE), $(dir)/Make.package)
Blocs += $(foreach dir, $(EXTERN_CORE), $(dir))

ifeq ($(USE_EXTRA_THERMO), TRUE)
DEFINES += -DEXTRA_THERMO
endif


ifeq ($(USE_REACT), TRUE)
ifeq ($(USE_CUDA), TRUE)
ifneq ($(INTEGRATOR_DIR), VODE)
$(error Only the VODE integrator supports GPUs currently, please change INTEGRATOR_DIR)
endif
endif
endif

#------------------------------------------------------------------------------
# external libraries
Expand Down Expand Up @@ -408,131 +342,10 @@ VPATH_LOCATIONS += $(Blocs)


#------------------------------------------------------------------------------
# make generated source files location
#------------------------------------------------------------------------------
VPATH_LOCATIONS += $(CASTRO_AUTO_SOURCE_DIR)
INCLUDE_LOCATIONS += $(CASTRO_AUTO_SOURCE_DIR)


#------------------------------------------------------------------------------
# runtime parameters
#------------------------------------------------------------------------------

# runtime parameter support for extern/ routines
F90EXE_sources += extern.F90

EXTERN_TEMPLATE := $(TOP)/Source/driver/extern_probin.template

# these are for finding runtime parameters
EXTERN_SEARCH += $(EXTERN_CORE) $(TOP)/constants $(TOP)/Util/model_parser $(TOP)/Util/conservative_interpolate
EXTERN_SEARCH += $(MICROPHYSICS_HOME)/networks/

EXTERN_PARAMETERS := $(shell $(AMREX_HOME)/Tools/F_scripts/findparams.py $(EXTERN_SEARCH))

$(CASTRO_AUTO_SOURCE_DIR)/extern.F90: $(EXTERN_PARAMETERS) $(EXTERN_TEMPLATE)
@if [ ! -d $(CASTRO_AUTO_SOURCE_DIR) ]; then mkdir -p $(CASTRO_AUTO_SOURCE_DIR); fi
$(AMREX_HOME)/Tools/F_scripts/write_probin.py \
-t $(EXTERN_TEMPLATE) -o $(CASTRO_AUTO_SOURCE_DIR)/extern.F90 -n extern \
--cxx_prefix $(CASTRO_AUTO_SOURCE_DIR)/extern \
--pa "$(EXTERN_PARAMETERS)" --managed


# autogenerated source files
#------------------------------------------------------------------------------
# problem specific parameters
#------------------------------------------------------------------------------

# runtime parameter support for extern/ routines
ifeq ($(USE_PROB_PARAMS), TRUE)
F90EXE_sources += prob_params_auto.F90
DEFINES += -DPROB_PARAMS
endif

PROB_PARAMS_TEMPLATE := $(TOP)/Util/scripts/prob_params.template
PROB_PARAMETERS := ./_prob_params

$(CASTRO_AUTO_SOURCE_DIR)/prob_params_auto.F90: $(PROB_PARAMETERS) $(PROB_PARAMS_TEMPLATE)
@if [ ! -d $(CASTRO_AUTO_SOURCE_DIR) ]; then mkdir -p $(CASTRO_AUTO_SOURCE_DIR); fi
$(TOP)/Util/scripts/write_probdata.py \
-t $(PROB_PARAMS_TEMPLATE) -o $(CASTRO_AUTO_SOURCE_DIR)/prob_params_auto.F90 -p $(PROB_PARAMETERS)

#------------------------------------------------------------------------------
# Castro C++ parameters
#------------------------------------------------------------------------------

F90EXE_sources += meth_params.F90

CPP_PARAMETERS := $(TOP)/Source/driver/_cpp_parameters
METH_PARAMS_TEMPLATE := $(TOP)/Source/driver/meth_params.template

$(CASTRO_AUTO_SOURCE_DIR)/meth_params.F90: $(CPP_PARAMETERS) $(METH_PARAMS_TEMPLATE)
@if [ ! -d $(CASTRO_AUTO_SOURCE_DIR) ]; then mkdir -p $(CASTRO_AUTO_SOURCE_DIR); fi
$(TOP)/Source/driver/parse_castro_params.py -m $(METH_PARAMS_TEMPLATE) -o $(CASTRO_AUTO_SOURCE_DIR) $(CPP_PARAMETERS)

#------------------------------------------------------------------------------
# state variable info
#-------------------------------------------------------------------------------
$(CASTRO_AUTO_SOURCE_DIR)/state_indices.H: $(CASTRO_AUTO_SOURCE_DIR)/state_indices.F90
echo "state_indices.H will be generated at the same time as state_indices.F90"

$(CASTRO_AUTO_SOURCE_DIR)/state_indices.F90:
$(CASTRO_HOME)/Source/driver/set_variables.py \
--defines "$(DEFINES)" \
--nadv $(NUMADV) \
--ngroups $(NGROUPS) \
--odir $(CASTRO_AUTO_SOURCE_DIR) \
$(CASTRO_HOME)/Source/driver/_variables

# for debugging
test_variables: $(CASTRO_AUTO_SOURCE_DIR)/state_indices.F90


#------------------------------------------------------------------------------
# build info
#------------------------------------------------------------------------------

# job_info support
CEXE_headers += $(AMREX_HOME)/Tools/C_scripts/AMReX_buildInfo.H
INCLUDE_LOCATIONS += $(AMREX_HOME)/Tools/C_scripts


MNAMES := EOS=$(EOS_PATH) NETWORK=$(NETWORK_PATH)
ifeq ($(USE_DIFFUSION), TRUE)
MNAMES += CONDUCTIVITY=$(COND_PATH)
endif

ifeq ($(USE_RAD), TRUE)
MNAMES += OPACITY=$(OPAC_PATH)
endif

# we make AMReX_buildInfo.cpp as we make the .o file, so we can delete
# it immediately. this way if the build is interrupted, we are
# guaranteed to remake it

objForExecs += $(objEXETempDir)/AMReX_buildInfo.o

.FORCE:
.PHONE: .FORCE

# set BUILD_GIT_NAME and BUILD_GIT_DIR if you are building in a
# git-controlled dir not under Castro/
EXTRA_BUILD_INFO :=
ifdef BUILD_GIT_NAME
EXTRA_BUILD_INFO := --build_git_name "$(BUILD_GIT_NAME)" \
--build_git_dir "$(BUILD_GIT_DIR)"
endif

$(objEXETempDir)/AMReX_buildInfo.o: .FORCE
$(AMREX_HOME)/Tools/C_scripts/makebuildinfo_C.py \
--amrex_home "$(AMREX_HOME)" \
--COMP "$(COMP)" --COMP_VERSION "$(COMP_VERSION)" \
--CXX_comp_name "$(CXX)" --CXX_flags "$(CXXFLAGS) $(CPPFLAGS) $(includes)" \
--F_comp_name "$(F90)" --F_flags "$(F90FLAGS)" \
--link_flags "$(LDFLAGS)" --libraries "$(libraries)" \
--MODULES "$(MNAMES)" $(EXTRA_BUILD_INFO) \
--GIT "$(TOP) $(AMREX_HOME) $(MICROPHYSICS_HOME)"
$(SILENT) $(CCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(CXXEXEFLAGS) AMReX_buildInfo.cpp -o $(objEXETempDir)/AMReX_buildInfo.o
$(SILENT) $(RM) AMReX_buildInfo.cpp

include $(TOP)/Exec/Make.auto_source

#------------------------------------------------------------------------------
# finish up
Expand Down
126 changes: 126 additions & 0 deletions Exec/Make.auto_source
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@

#------------------------------------------------------------------------------
# make generated source files location
#------------------------------------------------------------------------------
VPATH_LOCATIONS += $(CASTRO_AUTO_SOURCE_DIR)
INCLUDE_LOCATIONS += $(CASTRO_AUTO_SOURCE_DIR)


#------------------------------------------------------------------------------
# runtime parameters
#------------------------------------------------------------------------------

# runtime parameter support for extern/ routines
F90EXE_sources += extern.F90

EXTERN_TEMPLATE := $(TOP)/Source/driver/extern_probin.template

# these are for finding runtime parameters
EXTERN_SEARCH += $(EXTERN_CORE) $(TOP)/constants $(TOP)/Util/model_parser $(TOP)/Util/conservative_interpolate
EXTERN_SEARCH += $(MICROPHYSICS_HOME)/networks/

EXTERN_PARAMETERS := $(shell $(AMREX_HOME)/Tools/F_scripts/findparams.py $(EXTERN_SEARCH))

$(CASTRO_AUTO_SOURCE_DIR)/extern.F90: $(EXTERN_PARAMETERS) $(EXTERN_TEMPLATE)
@if [ ! -d $(CASTRO_AUTO_SOURCE_DIR) ]; then mkdir -p $(CASTRO_AUTO_SOURCE_DIR); fi
$(AMREX_HOME)/Tools/F_scripts/write_probin.py \
-t $(EXTERN_TEMPLATE) -o $(CASTRO_AUTO_SOURCE_DIR)/extern.F90 -n extern \
--cxx_prefix $(CASTRO_AUTO_SOURCE_DIR)/extern \
--pa "$(EXTERN_PARAMETERS)" --managed


#------------------------------------------------------------------------------
# problem specific parameters
#------------------------------------------------------------------------------

# runtime parameter support for extern/ routines
ifeq ($(USE_PROB_PARAMS), TRUE)
F90EXE_sources += prob_params_auto.F90
DEFINES += -DPROB_PARAMS
endif

PROB_PARAMS_TEMPLATE := $(TOP)/Util/scripts/prob_params.template
PROB_PARAMETERS := ./_prob_params

$(CASTRO_AUTO_SOURCE_DIR)/prob_params_auto.F90: $(PROB_PARAMETERS) $(PROB_PARAMS_TEMPLATE)
@if [ ! -d $(CASTRO_AUTO_SOURCE_DIR) ]; then mkdir -p $(CASTRO_AUTO_SOURCE_DIR); fi
$(TOP)/Util/scripts/write_probdata.py \
-t $(PROB_PARAMS_TEMPLATE) -o $(CASTRO_AUTO_SOURCE_DIR)/prob_params_auto.F90 -p $(PROB_PARAMETERS)

#------------------------------------------------------------------------------
# Castro C++ parameters
#------------------------------------------------------------------------------

F90EXE_sources += meth_params.F90

CPP_PARAMETERS := $(TOP)/Source/driver/_cpp_parameters
METH_PARAMS_TEMPLATE := $(TOP)/Source/driver/meth_params.template

$(CASTRO_AUTO_SOURCE_DIR)/meth_params.F90: $(CPP_PARAMETERS) $(METH_PARAMS_TEMPLATE)
@if [ ! -d $(CASTRO_AUTO_SOURCE_DIR) ]; then mkdir -p $(CASTRO_AUTO_SOURCE_DIR); fi
$(TOP)/Source/driver/parse_castro_params.py -m $(METH_PARAMS_TEMPLATE) -o $(CASTRO_AUTO_SOURCE_DIR) $(CPP_PARAMETERS)

#------------------------------------------------------------------------------
# state variable info
#-------------------------------------------------------------------------------
$(CASTRO_AUTO_SOURCE_DIR)/state_indices.H: $(CASTRO_AUTO_SOURCE_DIR)/state_indices.F90
echo "state_indices.H will be generated at the same time as state_indices.F90"

$(CASTRO_AUTO_SOURCE_DIR)/state_indices.F90:
$(CASTRO_HOME)/Source/driver/set_variables.py \
--defines "$(DEFINES)" \
--nadv $(NUMADV) \
--ngroups $(NGROUPS) \
--odir $(CASTRO_AUTO_SOURCE_DIR) \
$(CASTRO_HOME)/Source/driver/_variables

# for debugging
test_variables: $(CASTRO_AUTO_SOURCE_DIR)/state_indices.F90


#------------------------------------------------------------------------------
# build info
#------------------------------------------------------------------------------

# job_info support
CEXE_headers += $(AMREX_HOME)/Tools/C_scripts/AMReX_buildInfo.H
INCLUDE_LOCATIONS += $(AMREX_HOME)/Tools/C_scripts


MNAMES := EOS=$(EOS_PATH) NETWORK=$(NETWORK_PATH)
ifeq ($(USE_DIFFUSION), TRUE)
MNAMES += CONDUCTIVITY=$(CONDUCTIVITY_PATH)
endif

ifeq ($(USE_RAD), TRUE)
MNAMES += OPACITY=$(OPAC_PATH)
endif

# we make AMReX_buildInfo.cpp as we make the .o file, so we can delete
# it immediately. this way if the build is interrupted, we are
# guaranteed to remake it

objForExecs += $(objEXETempDir)/AMReX_buildInfo.o

.FORCE:
.PHONE: .FORCE

# set BUILD_GIT_NAME and BUILD_GIT_DIR if you are building in a
# git-controlled dir not under Castro/
EXTRA_BUILD_INFO :=
ifdef BUILD_GIT_NAME
EXTRA_BUILD_INFO := --build_git_name "$(BUILD_GIT_NAME)" \
--build_git_dir "$(BUILD_GIT_DIR)"
endif

$(objEXETempDir)/AMReX_buildInfo.o: .FORCE
$(AMREX_HOME)/Tools/C_scripts/makebuildinfo_C.py \
--amrex_home "$(AMREX_HOME)" \
--COMP "$(COMP)" --COMP_VERSION "$(COMP_VERSION)" \
--CXX_comp_name "$(CXX)" --CXX_flags "$(CXXFLAGS) $(CPPFLAGS) $(includes)" \
--F_comp_name "$(F90)" --F_flags "$(F90FLAGS)" \
--link_flags "$(LDFLAGS)" --libraries "$(libraries)" \
--MODULES "$(MNAMES)" $(EXTRA_BUILD_INFO) \
--GIT "$(TOP) $(AMREX_HOME) $(MICROPHYSICS_HOME)"
$(SILENT) $(CCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(CXXEXEFLAGS) AMReX_buildInfo.cpp -o $(objEXETempDir)/AMReX_buildInfo.o
$(SILENT) $(RM) AMReX_buildInfo.cpp
2 changes: 1 addition & 1 deletion external/Microphysics