@@ -215,6 +215,10 @@ ifndef ESMF_TRACE_LIB_BUILD
215
215
export ESMF_TRACE_LIB_BUILD = default
216
216
endif
217
217
218
+ ifndef ESMF_TRACE_PRELOAD_LINKED
219
+ export ESMF_TRACE_PRELOAD_LINKED = default
220
+ endif
221
+
218
222
ifndef ESMF_FORTRANSYMBOLS
219
223
export ESMF_FORTRANSYMBOLS = default
220
224
endif
@@ -445,6 +449,10 @@ ifneq ($(ESMF_TRACE_LIB_BUILD),OFF)
445
449
export ESMF_TRACE_LIB_BUILD = ON
446
450
endif
447
451
452
+ ifneq ($(ESMF_TRACE_PRELOAD_LINKED ) ,ON)
453
+ export ESMF_TRACE_PRELOAD_LINKED = OFF
454
+ endif
455
+
448
456
ifneq ($(ESMF_TESTCOMPTUNNEL ) ,OFF)
449
457
export ESMF_TESTCOMPTUNNEL = ON
450
458
endif
@@ -987,6 +995,7 @@ ESMF_F90LINKLIBS = $(ESMF_F90LINKLIBS_ENV)
987
995
endif
988
996
ESMF_F90LINKLIBS +=
989
997
ESMF_F90ESMFLINKLIBS += -lesmf $(ESMF_F90LINKLIBS )
998
+ ESMF_F90ESMFPRELOADLINKLIBS += -lesmf $(ESMF_TRACE_DYNAMICLINKLIBS ) $(ESMF_F90LINKLIBS )
990
999
991
1000
# - CXXLINKER
992
1001
ifneq ($(origin ESMF_CXXLINKER ) , environment)
@@ -1794,6 +1803,38 @@ ESMF_F90LINKRPATHSTHIRD += $(ESMF_F90RPATHPREFIX)$(ESMF_BABELTRACE_LIBPATH)
1794
1803
endif
1795
1804
endif
1796
1805
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
+
1797
1838
# -------------------------------------------------------------------------------
1798
1839
# Set the correct MPIRUN command with appropriate options
1799
1840
# -------------------------------------------------------------------------------
@@ -1820,7 +1861,11 @@ ifeq ($(ESMF_OPENMP),OFF)
1820
1861
ESMF_CPPFLAGS += -DESMF_NO_OPENMP
1821
1862
endif
1822
1863
1823
- ifeq ($(ESMF_OPENMP ) ,ON)
1864
+ ifeq ($(ESMF_OPENMP ) ,OMP4)
1865
+ ESMF_CPPFLAGS += -DESMF_OPENMP4
1866
+ endif
1867
+
1868
+ ifneq ($(ESMF_OPENMP ) ,OFF)
1824
1869
ESMF_F90COMPILEOPTS += $(ESMF_OPENMP_F90COMPILEOPTS )
1825
1870
ESMF_F90LINKOPTS += $(ESMF_OPENMP_F90LINKOPTS )
1826
1871
ESMF_CXXCOMPILEOPTS += $(ESMF_OPENMP_CXXCOMPILEOPTS )
@@ -1986,32 +2031,52 @@ ifeq ($(ESMF_TRACE_BUILD_SHARED),ON)
1986
2031
ESMF_TRACE_LDPRELOAD := $(ESMF_LIBDIR ) /libesmftrace_preload.$(ESMF_SL_SUFFIX )
1987
2032
ESMF_PRELOADSCRIPT = $(ESMF_LIBDIR ) /preload.sh
1988
2033
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
1991
2043
else
1992
- ESMF_ENV_PRELOAD = DYLD_INSERT_LIBRARIES
2044
+ ESMF_ENV_PRELOAD = LD_PRELOAD
2045
+ ESMF_ENV_PRELOAD_DELIMIT = ' '
1993
2046
endif
1994
2047
1995
2048
# MPI implementations do not pick up LD_PRELOAD
1996
2049
# so we pass a small script to each MPI task
1997
2050
ifneq (,$(findstring mpich,$(ESMF_COMM ) ) )
1998
2051
ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
1999
2052
endif
2053
+ ifeq ($(ESMF_COMM ) ,openmpi)
2054
+ ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
2055
+ endif
2000
2056
ifeq ($(ESMF_COMM ) ,mpi)
2001
2057
ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
2002
2058
endif
2003
2059
ifeq ($(ESMF_COMM ) ,mpt)
2004
2060
ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
2005
2061
endif
2062
+ ifneq (,$(findstring srun,$(ESMF_MPIRUN ) ) )
2063
+ ESMF_PRELOAD_SH = $(ESMF_PRELOADSCRIPT )
2064
+ endif
2006
2065
2007
2066
endif
2008
2067
2009
2068
build_preload_script :
2010
2069
-@echo " #!/bin/sh" > $(ESMF_PRELOADDIR ) /preload.sh
2011
2070
-@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
2013
2076
chmod 755 $(ESMF_PRELOADDIR ) /preload.sh
2014
2077
2078
+ ESMF_TRACE_DYNAMICLINKLIBS := -lesmftrace_preload
2079
+
2015
2080
ESMF_TRACE_STATICLINKLIBS := -lesmftrace_static
2016
2081
2017
2082
ESMF_TRACE_WRAPPERS_IO := write writev pwrite read open
0 commit comments