AMREX_HOME ?= ../../../amrex PICSAR_HOME ?= ../../../picsar OPENBC_HOME ?= ../../../openbc_poisson USE_MPI = TRUE USE_PARTICLES = TRUE USE_RPATH = TRUE ifeq ($(USE_GPU),TRUE) USE_OMP = FALSE USE_CUDA = TRUE USE_ACC = FALSE NVCC_HOST_COMP = gnu endif ifeq ($(USE_RZ),TRUE) # DIM is set here so that it is properly set for # all of the included files. DIM = 2 endif ifeq ($(USE_ASCENT_INSITU),TRUE) ASCENT_HOME ?= NOT_SET ifneq ($(ASCENT_HOME),NOT_SET) include $(ASCENT_HOME)/share/ascent/ascent_config.mk endif USE_CONDUIT = TRUE USE_ASCENT = TRUE endif ifndef USE_PYTHON_MAIN USE_PYTHON_MAIN = FALSE endif ifeq ($(USE_PYTHON_MAIN),TRUE) XTRA_CXXFLAGS += -fPIC ifeq ($(USE_OMP),TRUE) LDFLAGS += -fopenmp endif XTRA_CFLAGS += -fPIC XTRA_FFLAGS += -fPIC XTRA_F90FLAGS += -fPIC USERSuffix := .Lib DEFINES += -DWARPX_USE_PY endif include $(AMREX_HOME)/Tools/GNUMake/Make.defs ifeq ($(DIM),3) DEFINES += -DWARPX_DIM_3D else ifeq ($(USE_RZ),TRUE) DEFINES += -DWARPX_DIM_RZ else DEFINES += -DWARPX_DIM_XZ endif endif -include Make.package include $(WARPX_HOME)/Source/Make.package include $(WARPX_HOME)/Source/BoundaryConditions/Make.package include $(WARPX_HOME)/Source/Diagnostics/Make.package include $(WARPX_HOME)/Source/FieldSolver/Make.package include $(WARPX_HOME)/Source/Filter/Make.package include $(WARPX_HOME)/Source/FortranInterface/Make.package include $(WARPX_HOME)/Source/Initialization/Make.package include $(WARPX_HOME)/Source/Laser/Make.package include $(WARPX_HOME)/Source/Parallelization/Make.package include $(WARPX_HOME)/Source/Parser/Make.package include $(WARPX_HOME)/Source/Particles/Make.package include $(WARPX_HOME)/Source/Python/Make.package include $(WARPX_HOME)/Source/Utils/Make.package include $(WARPX_HOME)/Source/Evolve/Make.package include $(AMREX_HOME)/Src/Base/Make.package include $(AMREX_HOME)/Src/Particle/Make.package include $(AMREX_HOME)/Src/Boundary/Make.package include $(AMREX_HOME)/Src/AmrCore/Make.package ifeq ($(USE_SENSEI_INSITU),TRUE) include $(AMREX_HOME)/Src/Amr/Make.package include $(AMREX_HOME)/Src/Extern/SENSEI/Make.package endif ifeq ($(QED),TRUE) INCLUDE_LOCATIONS += $(PICSAR_HOME)/src/multi_physics/QED/src CXXFLAGS += -DWARPX_QED CFLAGS += -DWARPX_QED FFLAGS += -DWARPX_QED F90FLAGS += -DWARPX_QED include $(WARPX_HOME)/Source/QED/Make.package USERSuffix := $(USERSuffix).QED ifeq ($(QED_TABLE_GEN),TRUE) BOOST_ROOT ?= NOT_SET ifneq ($(BOOST_ROOT),NOT_SET) VPATH_LOCATIONS += $(BOOST_ROOT) INCLUDE_LOCATIONS += $(BOOST_ROOT) endif CXXFLAGS += -DWARPX_QED_TABLE_GEN CFLAGS += -DWARPX_QED_TABLE_GEN FFLAGS += -DWARPX_QED_TABLE_GEN F90FLAGS += -DWARPX_QED_TABLE_GEN USERSuffix := $(USERSuffix).GENTABLES endif endif include $(PICSAR_HOME)/src/Make.package WARPX_GIT_VERSION := $(shell cd $(WARPX_HOME); git describe --abbrev=12 --dirty --always --tags) PICSAR_GIT_VERSION := $(shell cd $(PICSAR_HOME); git describe --abbrev=12 --dirty --always --tags) DEFINES += -DWARPX_GIT_VERSION=\"$(WARPX_GIT_VERSION)\" DEFINES += -DPICSAR_GIT_VERSION=\"$(PICSAR_GIT_VERSION)\" DEFINES += -DPICSAR_NO_ASSUMED_ALIGNMENT DEFINES += -DWARPX ifeq ($(USE_OPENBC_POISSON),TRUE) include $(OPENBC_HOME)/Make.package DEFINES += -DFFT_FFTW -DMPIPARALLEL -DUSE_OPENBC_POISSON endif ifeq ($(USE_OPENPMD), TRUE) # try pkg-config query ifeq (0, $(shell pkg-config "openPMD >= 0.9.0"; echo $$?)) CXXFLAGS += $(shell pkg-config --cflags openPMD) LIBRARY_LOCATIONS += $(shell pkg-config --variable=libdir openPMD) libraries += $(shell pkg-config --libs-only-l openPMD) # fallback to manual settings else OPENPMD_LIB_PATH ?= NOT_SET ifneq ($(OPENPMD_LIB_PATH),NOT_SET) LIBRARY_LOCATIONS += $(OPENPMD_LIB_PATH) endif OPENPMD_INCLUDE_PATH ?= NOT_SET ifneq ($(OPENPMD_INCLUDE_PATH),NOT_SET) INCLUDE_LOCATIONS += $(OPENPMD_INCLUDE_PATH) endif libraries += -lopenPMD endif DEFINES += -DWARPX_USE_OPENPMD endif ifeq ($(USE_PSATD),TRUE) USERSuffix := $(USERSuffix).PSATD DEFINES += -DWARPX_USE_PSATD ifeq ($(USE_CUDA),FALSE) # Running on CPU # Use FFTW libraries += -lfftw3_mpi -lfftw3 -lfftw3_threads FFTW_HOME ?= NOT_SET ifneq ($(FFTW_HOME),NOT_SET) VPATH_LOCATIONS += $(FFTW_HOME)/include INCLUDE_LOCATIONS += $(FFTW_HOME)/include LIBRARY_LOCATIONS += $(FFTW_HOME)/lib endif ifeq ($(USE_PSATD_PICSAR),TRUE) # Compile with PICSAR's Hybrid-MPI PSATD DEFINES += -DWARPX_USE_PSATD_HYBRID DEFINES += -DFFTW # PICSAR uses it endif else # Use cuFFT libraries += -lcufft endif endif ifeq ($(USE_RZ),TRUE) USERSuffix := $(USERSuffix).RZ endif ifeq ($(DO_ELECTROSTATIC),TRUE) include $(AMREX_HOME)/Src/LinearSolvers/C_to_F_MG/Make.package include $(AMREX_HOME)/Src/LinearSolvers/F_MG/FParallelMG.mak include $(AMREX_HOME)/Src/F_BaseLib/FParallelMG.mak DEFINES += -DWARPX_DO_ELECTROSTATIC endif ifeq ($(USE_HDF5),TRUE) HDF5_HOME ?= NOT_SET ifneq ($(HDF5_HOME),NOT_SET) VPATH_LOCATIONS += $(HDF5_HOME)/include INCLUDE_LOCATIONS += $(HDF5_HOME)/include LIBRARY_LOCATIONS += $(HDF5_HOME)/lib endif DEFINES += -DWARPX_USE_HDF5 libraries += -lhdf5 -lz endif # job_info support CEXE_sources += AMReX_buildInfo.cpp CEXE_headers += $(AMREX_HOME)/Tools/C_scripts/AMReX_buildInfo.H INCLUDE_LOCATIONS += $(AMREX_HOME)/Tools/C_scripts ifeq ($(USE_PYTHON_MAIN),TRUE) ifeq ($(shell uname),Darwin) SHARED_OPTION = -dynamiclib else SHARED_OPTION = -shared endif ifeq ($(USE_RZ),TRUE) PYDIM = rz else PYDIM = $(DIM)d endif installwarpx: libwarpx$(PYDIM).so mv libwarpx$(PYDIM).so Python/pywarpx cd Python; python setup.py install --with-libwarpx $(PYDIM) $(PYINSTALLOPTIONS) libwarpx$(PYDIM).a: $(objForExecs) @echo Making static library $@ ... $(SILENT) $(AR) -crv $@ $^ $(SILENT) $(RM) AMReX_buildInfo.cpp @echo SUCCESS libwarpx$(PYDIM).so: $(objForExecs) @echo Making dynamic library $@ ... ifeq ($(USE_CUDA),TRUE) $(SILENT) $(CXX) $(LINKFLAGS) $(SHARED_OPTION) -Xlinker=$(SHARED_OPTION) -Xlinker=-fPIC -o $@ $^ $(LDFLAGS) $(libraries) else $(SILENT) $(CXX) $(SHARED_OPTION) -fPIC -o $@ $^ $(LDFLAGS) $(libraries) endif $(SILENT) $(RM) AMReX_buildInfo.cpp @echo SUCCESS clean:: $(SILENT) $(RM) -rf build $(SILENT) $(RM) -f libwarpx?d.a $(SILENT) $(RM) -f libwarpx?d.so $(SILENT) $(RM) -f pywarpx/libwarpx?d.so else ifdef WarpxBinDir all: $(executable) $(SILENT) $(RM) AMReX_buildInfo.cpp @if [ ! -d $(WarpxBinDir) ]; then mkdir -p $(WarpxBinDir); fi $(SILENT) mv -f $(executable) $(WarpxBinDir)/ @if [ -d $(executable).dSYM ]; then $(RM) -r $(WarpxBinDir)/$(executable).dSYM; mv -f $(executable).dSYM $(WarpxBinDir)/; fi @echo SUCCESS else all: $(executable) $(SILENT) $(RM) AMReX_buildInfo.cpp @echo SUCCESS endif endif AMReX_buildInfo.cpp: $(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)" \ --GIT ". $(AMREX_HOME) $(PICSAR_HOME)" include $(AMREX_HOME)/Tools/GNUMake/Make.rules clean:: $(SILENT) $(RM) AMReX_buildInfo.cpp