From 18c813b20bc6e5c8d0541ce1f35a2fd0627278d2 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 29 Sep 2023 15:42:19 +0100 Subject: [PATCH 1/3] CMake: Ensure all libraries link against MPI if needed --- libdap2/CMakeLists.txt | 4 ++++ libdap4/CMakeLists.txt | 4 ++++ libdispatch/CMakeLists.txt | 10 +++------- libhdf5/CMakeLists.txt | 6 +++--- liblib/CMakeLists.txt | 7 ++++--- libnczarr/CMakeLists.txt | 7 +++---- libsrc/CMakeLists.txt | 6 +++--- libsrc4/CMakeLists.txt | 6 +++--- oc2/CMakeLists.txt | 4 ++++ plugins/CMakeLists.txt | 4 ++++ 10 files changed, 35 insertions(+), 23 deletions(-) diff --git a/libdap2/CMakeLists.txt b/libdap2/CMakeLists.txt index 44f9bb2828..e58da10e63 100644 --- a/libdap2/CMakeLists.txt +++ b/libdap2/CMakeLists.txt @@ -8,6 +8,10 @@ SET(dap2_SOURCES constraints.c dapcvt.c dapodom.c daputil.c ncdaperr.c cdf.c cac add_library(dap2 OBJECT ${dap2_SOURCES}) +IF(STATUS_PARALLEL) + target_link_libraries(dap2 PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) + ### # Options related to the man page generation. ### diff --git a/libdap4/CMakeLists.txt b/libdap4/CMakeLists.txt index f08b2ea7b5..4b914de59f 100644 --- a/libdap4/CMakeLists.txt +++ b/libdap4/CMakeLists.txt @@ -8,6 +8,10 @@ SET(dap4_SOURCES d4curlfunctions.c d4fix.c d4data.c d4file.c d4parser.c d4meta.c add_library(dap4 OBJECT ${dap4_SOURCES}) +IF(STATUS_PARALLEL) + target_link_libraries(dap4 PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) + ### # Options related to the man page generation. ### diff --git a/libdispatch/CMakeLists.txt b/libdispatch/CMakeLists.txt index 730e877c92..98b90bc96c 100644 --- a/libdispatch/CMakeLists.txt +++ b/libdispatch/CMakeLists.txt @@ -32,13 +32,9 @@ IF(REGEDIT) ENDIF(REGEDIT) add_library(dispatch OBJECT ${libdispatch_SOURCES}) -IF(MPI_C_INCLUDE_PATH) - target_include_directories(dispatch PUBLIC ${MPI_C_INCLUDE_PATH}) -ENDIF(MPI_C_INCLUDE_PATH) - -IF(MPI_C_LIBRARIES) - target_link_libraries(dispatch PUBLIC ${MPI_C_LIBRARIES}) -ENDIF(MPI_C_LIBRARIES) +IF(STATUS_PARALLEL) + target_link_libraries(dispatch PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) IF(ENABLE_NCZARR) target_include_directories(dispatch PUBLIC ../libnczarr) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index 5cf4aa9267..f1195a0879 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -19,9 +19,9 @@ ENDIF() # the netCDF library. add_library(netcdfhdf5 OBJECT ${libnchdf5_SOURCES}) -IF(MPI_C_INCLUDE_PATH) - target_include_directories(netcdfhdf5 PUBLIC ${MPI_C_INCLUDE_PATH}) -ENDIF(MPI_C_INCLUDE_PATH) +IF(STATUS_PARALLEL) + target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) # Remember to package this file for CMake builds. ADD_EXTRA_DIST(${libnchdf5_SOURCES} CMakeLists.txt) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index ce2bd85af4..b9d8cc00a2 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -52,9 +52,10 @@ ENDFOREACH() ADD_LIBRARY(netcdf nc_initialize.c ${LARGS} ) -IF(MPI_C_INCLUDE_PATH) - target_include_directories(netcdf PUBLIC ${MPI_C_INCLUDE_PATH}) -ENDIF(MPI_C_INCLUDE_PATH) +IF(STATUS_PARALLEL) + # TODO: Make PUBLIC when other dependencies have PUBLIC/PRIVATE specified + target_link_libraries(netcdf MPI::MPI_C) +ENDIF(STATUS_PARALLEL) IF(MOD_NETCDF_NAME) SET_TARGET_PROPERTIES(netcdf PROPERTIES LIBRARY_OUTPUT_NAME ${NETCDF_LIB_NAME}) diff --git a/libnczarr/CMakeLists.txt b/libnczarr/CMakeLists.txt index a224c4f24d..1a6c5e951d 100644 --- a/libnczarr/CMakeLists.txt +++ b/libnczarr/CMakeLists.txt @@ -61,10 +61,9 @@ add_library(nczarr OBJECT ${libnczarr_SOURCES}) TARGET_INCLUDE_DIRECTORIES(nczarr PUBLIC ../libncpoco) -IF(MPI_C_INCLUDE_PATH) - target_include_directories(nczarr PUBLIC ${MPI_C_INCLUDE_PATH}) -ENDIF(MPI_C_INCLUDE_PATH) +IF(STATUS_PARALLEL) + target_link_libraries(nczarr PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) # Remember to package this file for CMake builds. ADD_EXTRA_DIST(${libnczarr_SOURCES} CMakeLists.txt) - diff --git a/libsrc/CMakeLists.txt b/libsrc/CMakeLists.txt index c7ae7762ff..4361f8c338 100644 --- a/libsrc/CMakeLists.txt +++ b/libsrc/CMakeLists.txt @@ -36,9 +36,9 @@ ENDIF(ENABLE_BYTERANGE) add_library(netcdf3 OBJECT ${libsrc_SOURCES}) -IF(MPI_C_INCLUDE_PATH) - target_include_directories(netcdf3 PUBLIC ${MPI_C_INCLUDE_PATH}) -ENDIF(MPI_C_INCLUDE_PATH) +IF(STATUS_PARALLEL) + target_link_libraries(netcdf3 PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) # The C API man page. diff --git a/libsrc4/CMakeLists.txt b/libsrc4/CMakeLists.txt index 3c88c8b37a..40c71ab6a5 100644 --- a/libsrc4/CMakeLists.txt +++ b/libsrc4/CMakeLists.txt @@ -11,9 +11,9 @@ nc4internal.c nc4type.c nc4var.c ncfunc.c ncindex.c nc4cache.c) add_library(netcdf4 OBJECT ${libsrc4_SOURCES}) -IF(MPI_C_INCLUDE_PATH) - target_include_directories(netcdf4 PUBLIC ${MPI_C_INCLUDE_PATH}) -ENDIF(MPI_C_INCLUDE_PATH) +IF(STATUS_PARALLEL) + target_link_libraries(netcdf4 PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) # Files for make dist FILE(GLOB libsrc4_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.sh) diff --git a/oc2/CMakeLists.txt b/oc2/CMakeLists.txt index 1b4b51f8aa..c938ea1454 100644 --- a/oc2/CMakeLists.txt +++ b/oc2/CMakeLists.txt @@ -9,6 +9,10 @@ SET(oc_SOURCES oc.c daplex.c dapparse.c dapy.c occompile.c occurlfunctions.c ocd add_library(oc2 OBJECT ${oc_SOURCES}) +IF(STATUS_PARALLEL) + target_link_libraries(oc2 PUBLIC MPI::MPI_C) +ENDIF(STATUS_PARALLEL) + # Apparently fails under cmake #set(ocprint_FILES ocprint.c ) #ADD_EXECUTABLE(ocprint ${ocprint_FILES}) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 65891d82ee..b0990baede 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -63,6 +63,10 @@ MACRO(buildplugin TARGET TARGETLIB) # Set file name & location set_target_properties(${TARGET} PROPERTIES COMPILE_PDB_NAME ${TARGET} COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR}) ENDIF() + + IF(STATUS_PARALLEL) + target_link_libraries(${TARGET} MPI::MPI_C) + ENDIF(STATUS_PARALLEL) ENDMACRO() buildplugin(h5misc "h5misc") From f71d05988e5a29b4a604317978b3c8f90110a98b Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 2 Oct 2023 10:29:33 +0100 Subject: [PATCH 2/3] CMake: Make plugin target links public --- plugins/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index b0990baede..8de26592f3 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -55,7 +55,7 @@ MACRO(buildplugin TARGET TARGETLIB) SET_TARGET_PROPERTIES(${TARGET} PROPERTIES RUNTIME_OUTPUT_NAME ${MANGLELIB}) SET_TARGET_PROPERTIES(${TARGET} PROPERTIES PREFIX "") # Critical that this be set to "" SET_TARGET_PROPERTIES(${TARGET} PROPERTIES SUFFIX ".${PLUGINEXT}") - TARGET_LINK_LIBRARIES(${TARGET} ${ALL_TLL_LIBS};${ARGN}) + TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${ALL_TLL_LIBS};${ARGN}) IF(MSVC) target_compile_options(${TARGET} PRIVATE /Zi) # Tell linker to include symbol data @@ -65,7 +65,7 @@ MACRO(buildplugin TARGET TARGETLIB) ENDIF() IF(STATUS_PARALLEL) - target_link_libraries(${TARGET} MPI::MPI_C) + target_link_libraries(${TARGET} PUBLIC MPI::MPI_C) ENDIF(STATUS_PARALLEL) ENDMACRO() From d4412df2dafcb06d2fd63fbc467adc04e2140081 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 2 Oct 2023 10:51:02 +0100 Subject: [PATCH 3/3] CMake: Ensure MPI dependency is found in installed config --- netCDFConfig.cmake.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/netCDFConfig.cmake.in b/netCDFConfig.cmake.in index 9d68eec5a2..3146bb7d7c 100644 --- a/netCDFConfig.cmake.in +++ b/netCDFConfig.cmake.in @@ -40,3 +40,8 @@ set(netCDF_HAS_DAP4 @HAS_DAP4@) set(netCDF_HAS_DISKLESS @HAS_DISKLESS@) set(netCDF_HAS_MMAP @HAS_MMAP@) set(netCDF_HAS_JNA @HAS_JNA@) + +if (@HAS_PARALLEL@) + include(CMakeFindDependencyMacro) + find_dependency(MPI @MPI_C_VERSION@ EXACT) +endif()