From 1ae4de362d5581e778298711870e43880773b9d7 Mon Sep 17 00:00:00 2001 From: Rahul Mahajan Date: Wed, 14 Oct 2020 21:24:48 -0400 Subject: [PATCH 1/2] skip creating OBJECT library and directly create static library. Bugfix on PIO order of C and Fortran in CMEPS --- CICE-interface/CMakeLists.txt | 24 ++++++------------------ CMEPS-interface/CMakeLists.txt | 27 +++------------------------ 2 files changed, 9 insertions(+), 42 deletions(-) diff --git a/CICE-interface/CMakeLists.txt b/CICE-interface/CMakeLists.txt index d35ee68e4b..db4bf3a02b 100644 --- a/CICE-interface/CMakeLists.txt +++ b/CICE-interface/CMakeLists.txt @@ -67,24 +67,9 @@ elseif(CICE_IO MATCHES "Binary") list(APPEND lib_src_files ${cice_binary_io_files}) endif() -### Use common object library for building target library -add_library(cice_obj OBJECT ${lib_src_files}) -set_target_properties(cice_obj PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) -target_include_directories(cice_obj PRIVATE $) -target_compile_definitions(cice_obj PRIVATE "${_cice_defs}") -target_link_libraries(cice_obj PRIVATE esmf) -if(CICE_IO MATCHES "^(NetCDF|PIO)$") - target_link_libraries(cice_obj PRIVATE NetCDF::NetCDF_Fortran) - if(CICE_IO MATCHES "PIO") - target_link_libraries(cice_obj PRIVATE PIO::PIO_Fortran) - endif() -endif() -if(OpenMP_Fortran_FOUND) - target_link_libraries(cice_obj PRIVATE OpenMP::OpenMP_Fortran) -endif() - ### Create target library and set PUBLIC interfaces on the library -add_library(cice STATIC $) +add_library(cice STATIC ${lib_src_files}) +set_target_properties(cice PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) target_compile_definitions(cice PUBLIC "${_cice_defs}") target_include_directories(cice PUBLIC $ $) @@ -95,6 +80,9 @@ if(CICE_IO MATCHES "^(NetCDF|PIO)$") target_link_libraries(cice PUBLIC PIO::PIO_Fortran) endif() endif() +if(OpenMP_Fortran_FOUND) + target_link_libraries(cice PRIVATE OpenMP::OpenMP_Fortran) +endif() ############################################################################### ### Install @@ -102,7 +90,7 @@ endif() install( TARGETS cice - EXPORT cice-config + EXPORT cice-config LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT Library) diff --git a/CMEPS-interface/CMakeLists.txt b/CMEPS-interface/CMakeLists.txt index 96c254cb7e..e41d8c177d 100644 --- a/CMEPS-interface/CMakeLists.txt +++ b/CMEPS-interface/CMakeLists.txt @@ -61,35 +61,14 @@ list(APPEND _mediator_defs ESMF_VERSION_MAJOR=${ESMF_VERSION_MAJOR} ESMF_VERSION_MINOR=${ESMF_VERSION_MINOR} INTERNAL_PIO_INIT) -### Use common object library for building target library -add_library(nems_util_obj OBJECT ${_nems_util_files}) -set_target_properties(nems_util_obj PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) -target_include_directories(nems_util_obj PRIVATE $) -target_link_libraries(nems_util_obj PRIVATE esmf - PIO::PIO_C PIO::PIO_Fortran) -if(OpenMP_Fortran_FOUND) - target_link_libraries(nems_util_obj PRIVATE OpenMP::OpenMP_Fortran) -endif() - -add_library(mediator_obj OBJECT ${_mediator_files}) -set_target_properties(mediator_obj PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) -target_include_directories(mediator_obj PRIVATE $) -target_compile_definitions(mediator_obj PRIVATE "${_mediator_defs}") -target_link_libraries(mediator_obj PRIVATE nems_util_obj - esmf - PIO::PIO_C PIO::PIO_Fortran) -if(OpenMP_Fortran_FOUND) - target_link_libraries(mediator_obj PRIVATE OpenMP::OpenMP_Fortran) -endif() - ### Create target library and set PUBLIC interfaces on the library -add_library(cmeps STATIC $ - $) +add_library(cmeps STATIC ${_nems_util_files} ${_mediator_files}) +set_target_properties(cmeps PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) target_compile_definitions(cmeps PUBLIC "${_mediator_defs}") target_include_directories(cmeps PUBLIC $ $) target_link_libraries(cmeps PUBLIC esmf - PIO::PIO_C PIO::PIO_Fortran) + PIO::PIO_Fortran PIO::PIO_C) if(OpenMP_Fortran_FOUND) target_link_libraries(cmeps PRIVATE OpenMP::OpenMP_Fortran) endif() From 62e0461558116b7926609eab2a38c391bd67ea27 Mon Sep 17 00:00:00 2001 From: Rahul Mahajan Date: Wed, 14 Oct 2020 20:53:16 -0500 Subject: [PATCH 2/2] PIO_C library is not necessary in CMEPS-interface CMakeLists.txt --- CMEPS-interface/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMEPS-interface/CMakeLists.txt b/CMEPS-interface/CMakeLists.txt index e41d8c177d..27c98fd52d 100644 --- a/CMEPS-interface/CMakeLists.txt +++ b/CMEPS-interface/CMakeLists.txt @@ -68,7 +68,7 @@ target_compile_definitions(cmeps PUBLIC "${_mediator_defs}") target_include_directories(cmeps PUBLIC $ $) target_link_libraries(cmeps PUBLIC esmf - PIO::PIO_Fortran PIO::PIO_C) + PIO::PIO_Fortran) if(OpenMP_Fortran_FOUND) target_link_libraries(cmeps PRIVATE OpenMP::OpenMP_Fortran) endif()