@@ -215,6 +215,10 @@ ifndef ESMF_TRACE_LIB_BUILD
215215export ESMF_TRACE_LIB_BUILD = default
216216endif
217217
218+ ifndef ESMF_TRACE_PRELOAD_LINKED
219+ export ESMF_TRACE_PRELOAD_LINKED = default
220+ endif
221+
218222ifndef ESMF_FORTRANSYMBOLS
219223export ESMF_FORTRANSYMBOLS = default
220224endif
@@ -445,6 +449,10 @@ ifneq ($(ESMF_TRACE_LIB_BUILD),OFF)
445449export ESMF_TRACE_LIB_BUILD = ON
446450endif
447451
452+ ifneq ($(ESMF_TRACE_PRELOAD_LINKED ) ,ON)
453+ export ESMF_TRACE_PRELOAD_LINKED = OFF
454+ endif
455+
448456ifneq ($(ESMF_TESTCOMPTUNNEL ) ,OFF)
449457export ESMF_TESTCOMPTUNNEL = ON
450458endif
@@ -987,6 +995,7 @@ ESMF_F90LINKLIBS = $(ESMF_F90LINKLIBS_ENV)
987995endif
988996ESMF_F90LINKLIBS +=
989997ESMF_F90ESMFLINKLIBS += -lesmf $(ESMF_F90LINKLIBS )
998+ ESMF_F90ESMFPRELOADLINKLIBS += -lesmf $(ESMF_TRACE_DYNAMICLINKLIBS ) $(ESMF_F90LINKLIBS )
990999
9911000# - CXXLINKER
9921001ifneq ($(origin ESMF_CXXLINKER ) , environment)
@@ -1794,6 +1803,38 @@ ESMF_F90LINKRPATHSTHIRD += $(ESMF_F90RPATHPREFIX)$(ESMF_BABELTRACE_LIBPATH)
17941803endif
17951804endif
17961805
1806+ # -------------------------------------------------------------------------------
1807+ # NVML
1808+ # -------------------------------------------------------------------------------
1809+ ifeq ($(ESMF_NVML ) ,ON)
1810+ ESMF_NVML = standard
1811+ endif
1812+ ifeq ($(ESMF_NVML ) ,standard)
1813+ ifneq ($(origin ESMF_NVML_LIBS ) , environment)
1814+ ESMF_NVML_LIBS = -lnvidia-ml
1815+ endif
1816+ endif
1817+
1818+ ifdef ESMF_NVML
1819+ ESMF_CPPFLAGS += -DESMF_NVML=1
1820+ ifdef ESMF_NVML_INCLUDE
1821+ ESMF_CXXCOMPILEPATHSTHIRD += -I$(ESMF_NVML_INCLUDE )
1822+ ESMF_F90COMPILEPATHSTHIRD += -I$(ESMF_NVML_INCLUDE )
1823+ endif
1824+ ifdef ESMF_NVML_LIBS
1825+ ESMF_CXXLINKLIBS += $(ESMF_NVML_LIBS )
1826+ ESMF_CXXLINKRPATHSTHIRD += $(addprefix $(ESMF_CXXRPATHPREFIX ) ,$(subst -L,,$(filter -L% ,$(ESMF_NVML_LIBS ) ) ) )
1827+ ESMF_F90LINKLIBS += $(ESMF_NVML_LIBS )
1828+ ESMF_F90LINKRPATHSTHIRD += $(addprefix $(ESMF_F90RPATHPREFIX ) ,$(subst -L,,$(filter -L% ,$(ESMF_NVML_LIBS ) ) ) )
1829+ endif
1830+ ifdef ESMF_NVML_LIBPATH
1831+ ESMF_CXXLINKPATHSTHIRD += -L$(ESMF_NVML_LIBPATH )
1832+ ESMF_F90LINKPATHSTHIRD += -L$(ESMF_NVML_LIBPATH )
1833+ ESMF_CXXLINKRPATHSTHIRD += $(ESMF_CXXRPATHPREFIX )$(ESMF_NVML_LIBPATH )
1834+ ESMF_F90LINKRPATHSTHIRD += $(ESMF_F90RPATHPREFIX )$(ESMF_NVML_LIBPATH )
1835+ endif
1836+ endif
1837+
17971838# -------------------------------------------------------------------------------
17981839# Set the correct MPIRUN command with appropriate options
17991840# -------------------------------------------------------------------------------
@@ -1820,7 +1861,11 @@ ifeq ($(ESMF_OPENMP),OFF)
18201861ESMF_CPPFLAGS += -DESMF_NO_OPENMP
18211862endif
18221863
1823- ifeq ($(ESMF_OPENMP ) ,ON)
1864+ ifeq ($(ESMF_OPENMP ) ,OMP4)
1865+ ESMF_CPPFLAGS += -DESMF_OPENMP4
1866+ endif
1867+
1868+ ifneq ($(ESMF_OPENMP ) ,OFF)
18241869ESMF_F90COMPILEOPTS += $(ESMF_OPENMP_F90COMPILEOPTS )
18251870ESMF_F90LINKOPTS += $(ESMF_OPENMP_F90LINKOPTS )
18261871ESMF_CXXCOMPILEOPTS += $(ESMF_OPENMP_CXXCOMPILEOPTS )
@@ -1986,32 +2031,52 @@ ifeq ($(ESMF_TRACE_BUILD_SHARED),ON)
19862031ESMF_TRACE_LDPRELOAD := $(ESMF_LIBDIR ) /libesmftrace_preload.$(ESMF_SL_SUFFIX )
19872032ESMF_PRELOADSCRIPT = $(ESMF_LIBDIR ) /preload.sh
19882033
1989- ifneq ($(ESMF_OS ) ,Darwin)
1990- ESMF_ENV_PRELOAD = LD_PRELOAD
2034+ ESMF_SL_PRELOAD_LIBLINKER = $(ESMF_CXXCOMPILER )
2035+
2036+ ifeq ($(ESMF_OS ) ,Darwin)
2037+ ESMF_ENV_PRELOAD = DYLD_INSERT_LIBRARIES
2038+ ESMF_ENV_PRELOAD_DELIMIT = ':'
2039+ ifeq ($(ESMF_COMM ) ,openmpi)
2040+ # make sure to link in the Fortran MPI bindings
2041+ ESMF_SL_PRELOAD_LIBLINKER = $(ESMF_F90COMPILER )
2042+ endif
19912043else
1992- ESMF_ENV_PRELOAD = DYLD_INSERT_LIBRARIES
2044+ ESMF_ENV_PRELOAD = LD_PRELOAD
2045+ ESMF_ENV_PRELOAD_DELIMIT = ' '
19932046endif
19942047
19952048# MPI implementations do not pick up LD_PRELOAD
19962049# so we pass a small script to each MPI task
19972050ifneq (,$(findstring mpich,$(ESMF_COMM ) ) )
19982051ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
19992052endif
2053+ ifeq ($(ESMF_COMM ) ,openmpi)
2054+ ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
2055+ endif
20002056ifeq ($(ESMF_COMM ) ,mpi)
20012057ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
20022058endif
20032059ifeq ($(ESMF_COMM ) ,mpt)
20042060ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
20052061endif
2062+ ifneq (,$(findstring srun,$(ESMF_MPIRUN ) ) )
2063+ ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
2064+ endif
20062065
20072066endif
20082067
20092068build_preload_script :
20102069 -@echo " #!/bin/sh" > $(ESMF_PRELOADDIR ) /preload.sh
20112070 -@echo " # Script to preload ESMF dynamic trace library" >> $(ESMF_PRELOADDIR ) /preload.sh
2012- -@echo ' env LD_PRELOAD="$$LD_PRELOAD $(ESMF_PRELOADDIR)/libesmftrace_preload.$(ESMF_SL_SUFFIX)" $$*' >> $(ESMF_PRELOADDIR ) /preload.sh
2071+ -@echo ' if [ "$$$(ESMF_ENV_PRELOAD)" != "" ]; then' >> $(ESMF_PRELOADDIR ) /preload.sh
2072+ -@echo ' env $(ESMF_ENV_PRELOAD)="$$$(ESMF_ENV_PRELOAD)$(ESMF_ENV_PRELOAD_DELIMIT)$(ESMF_PRELOADDIR)/libesmftrace_preload.$(ESMF_SL_SUFFIX)" $$*' >> $(ESMF_PRELOADDIR ) /preload.sh
2073+ -@echo ' else' >> $(ESMF_PRELOADDIR ) /preload.sh
2074+ -@echo ' env $(ESMF_ENV_PRELOAD)="$(ESMF_PRELOADDIR)/libesmftrace_preload.$(ESMF_SL_SUFFIX)" $$*' >> $(ESMF_PRELOADDIR ) /preload.sh
2075+ -@echo ' fi' >> $(ESMF_PRELOADDIR ) /preload.sh
20132076 chmod 755 $(ESMF_PRELOADDIR ) /preload.sh
20142077
2078+ ESMF_TRACE_DYNAMICLINKLIBS := -lesmftrace_preload
2079+
20152080ESMF_TRACE_STATICLINKLIBS := -lesmftrace_static
20162081
20172082ESMF_TRACE_WRAPPERS_IO := write writev pwrite read open
0 commit comments