From 783a0db592c6d080952b4521c06ffe96e4b45502 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 7 Apr 2026 16:44:31 +0200 Subject: [PATCH] Fix generation of psb_config.h with CMAKE --- CMakeLists.txt | 16 +++++----- cmake/readPSBConst.cmake | 64 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 9 deletions(-) create mode 100644 cmake/readPSBConst.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 91005a79..84eed7b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,12 +132,10 @@ include("${CMAKE_CURRENT_LIST_DIR}/cmake/CapitalizeString.cmake") message(STATUS "Using compiler ${CMAKE_C_COMPILER};") -# Define Major and Minor Version and Patch Level, String Version -set(PSBLASMAJOR "3") -set(PSBLASMINOR "9") -set(PSBLASPATCH "0") -set(PSBLASSTRING "\"3.9.0\"") - +# Find PSBLAS constants +include(${CMAKE_CURRENT_LIST_DIR}/cmake/readPSBConst.cmake) +_psb_read_const() +_psb_read_desc_const() # Set default values for IPK_SIZE and LPK_SIZE set(DEFAULT_IPK_SIZE 4) @@ -430,7 +428,7 @@ if(METIS_FOUND) include(CheckTypeSize) message(STATUS "METIS PATH ${METIS_INCLUDES} and metis libraries ${METIS_LIBRARIES}") # Make sure this path is correct -# set(METISINCFILE "metis.h") # Adjust this to your actual path + set(CMAKE_METIS_INCFILE "metis.h") # Adjust this to your actual path # Specify the configuration file # set(HEADER_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/util/psb_metis_int.h.in") @@ -511,7 +509,7 @@ if(METIS_FOUND) # 1. Tell CMake where to find metis.h for the check -set(CMAKE_EXTRA_INCLUDE_FILES "${METIS_INCLUDES}/metis.h") +set(CMAKE_EXTRA_INCLUDE_FILES "${METIS_INCLUDES}/${CMAKE_METIS_INCFILE}") # 2. Check the size of Metis's own type: real_t # This replaces checking 'float' and 'double' separately @@ -853,7 +851,7 @@ set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules) -message(STATUS "fortran module direcotry ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_INCLUDEDIR}") +message(STATUS "fortran module directory ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_INCLUDEDIR}") include_directories(${MPI_Fortran_INCLUDE_PATH}) diff --git a/cmake/readPSBConst.cmake b/cmake/readPSBConst.cmake new file mode 100644 index 00000000..207c60da --- /dev/null +++ b/cmake/readPSBConst.cmake @@ -0,0 +1,64 @@ + +macro(_psb_read_const) +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/base/modules/psb_const_mod.F90" _psb_const_mod) +string(REGEX MATCH "psb_version_major_[ \t]+=[ \t]+([0-9]+)" _psb_version_major_match "${_psb_const_mod}") +set(PSBLASMAJOR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_version_minor_[ \t]+=[ \t]+([0-9]+)" _psb_version_minor_match "${_psb_const_mod}") +set(PSBLASMINOR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_patchlevel_[ \t]+=[ \t]+([0-9]+)" _psb_patchlevel_match "${_psb_const_mod}") +set(PSBLASPATCH "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_version_string_[ \t]+=[ \t]+([^ \t]+)" _psb_version_string_match "${_psb_const_mod}") +set(PSBLASSTRING "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_dupl_null_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_null_match "${_psb_const_mod}") +set(PSBLASDUPNUL "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_dupl_add_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_add_match "${_psb_const_mod}") +set(PSBLASDUPADD "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_dupl_err_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_err_match "${_psb_const_mod}") +set(PSBLASDUPERR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_dupl_def_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_def_match "${_psb_const_mod}") +set(PSBLASDUPDEF "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_upd_srch_[ \t]+=[ \t]+([0-9]+)" _psb_upd_srch_match "${_psb_const_mod}") +set(PSBLASUPDSRC "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_upd_perm_[ \t]+=[ \t]+([0-9]+)" _psb_upd_perm_match "${_psb_const_mod}") +set(PSBLASUPDPRM "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_upd_dflt_[ \t]+=[ \t]+([0-9]+)" _psb_upd_dflt_match "${_psb_const_mod}") +set(PSBLASUPDDEF "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_matbld_noremote_[ \t]+=[ \t]+([0-9]+)" _psb_matbld_noremote_match "${_psb_const_mod}") +set(PSBLASBLDNOR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_matbld_remote_[ \t]+=[ \t]+([0-9]+)" _psb_matbld_remote_match "${_psb_const_mod}") +set(PSBLASBLDRMT "${CMAKE_MATCH_1}") +endmacro(_psb_read_const) + +macro(_psb_read_desc_const) +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/base/modules/desc/psb_desc_const_mod.f90" _psb_const_mod) + +string(REGEX MATCH "psb_swap_send_[ \t]+=[ \t]+([0-9]+)" _psb_swap_send_match "${_psb_const_mod}") +set(PSBSWPSND "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_swap_recv_[ \t]+=[ \t]+([0-9]+)" _psb_swap_recv_match "${_psb_const_mod}") +set(PSBSWPRCV "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_swap_sync_[ \t]+=[ \t]+([0-9]+)" _psb_swap_sync_match "${_psb_const_mod}") +set(PSBSWPSYN "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_swap_mpi_[ \t]+=[ \t]+([0-9]+)" _psb_swap_mpi_match "${_psb_const_mod}") +set(PSBSWPMPI "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_collective_start_[ \t]+=[ \t]+([0-9]+)" _psb_collective_start_match "${_psb_const_mod}") +set(PSBCLCSTR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_collective_end_[ \t]+=[ \t]+([0-9]+)" _psb_collective_end_match "${_psb_const_mod}") +set(PSBCLCEND "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_collective_sync_[ \t]+=[ \t]+([0-9]+)" _psb_collective_sync_match "${_psb_const_mod}") +set(PSBCLCSYN "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_none_[ \t]+=[ \t]+([0-9]+)" _psb_none_match "${_psb_const_mod}") +set(PSBNONE "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_sum_[ \t]+=[ \t]+([0-9]+)" _psb_sum_match "${_psb_const_mod}") +set(PSBSUM "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_avg_[ \t]+=[ \t]+([0-9]+)" _psb_avg_match "${_psb_const_mod}") +set(PSBAVG "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_square_root_[ \t]+=[ \t]+([0-9]+)" _psb_square_root_match "${_psb_const_mod}") +set(PSBSQRT "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_setzero_[ \t]+=[ \t]+([0-9]+)" _psb_setzero_match "${_psb_const_mod}") +set(PSBSETZ "${CMAKE_MATCH_1}") + +endmacro(_psb_read_desc_const)