diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b2c72f1..734d1dac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,7 +99,7 @@ endif() message(STATUS "win? ${WIN32};") -if(TRUE )#NOT ${WIN32}) +if(TRUE)#NOT ${WIN32}) #previous check did not work if WIN32 is empty string #---------------------------------------------- # Determine system endian-ness and pointer size @@ -118,18 +118,37 @@ if(TRUE )#NOT ${WIN32}) add_compile_options(-DPtr64Bits) endif() message(STATUS "Have 64bit pointers") + - #add define values for integer size (IPKx) and long size (LPKx) - CHECK_TYPE_SIZE("int" INT_SIZE LANGUAGE C) - CHECK_TYPE_SIZE("long" LONG_SIZE LANGUAGE C) - message(STATUS "INT SIZE ${INT_SIZE}") +endif() - add_compile_options(-DIPK${INT_SIZE}) - add_compile_options(-DLPK${LONG_SIZE}) - + +# Set default values for IPK_SIZE and LPK_SIZE +set(DEFAULT_IPK_SIZE 4) +set(DEFAULT_LPK_SIZE 8) + +# Allow user to override with command line definitions +if(NOT DEFINED IPK_SIZE) + set(IPK_SIZE ${DEFAULT_IPK_SIZE} CACHE STRING "Size of IPK (default: 4)") +endif() + +if(NOT DEFINED LPK_SIZE) + set(LPK_SIZE ${DEFAULT_LPK_SIZE} CACHE STRING "Size of LPK (default: 8)") endif() +# Define IPKDEF and LPKDEF based on the sizes +set(IPKDEF "#define IPK${IPK_SIZE}") +set(LPKDEF "#define LPK${LPK_SIZE}") + +# Output the definitions for verification +message(STATUS "Using IPKDEF: ${IPKDEF}") +message(STATUS "Using LPKDEF: ${LPKDEF}") + +add_compile_options(-DIPK${IPK_SIZE}) +add_compile_options(-DLPK${LPK_SIZE}) + + @@ -319,6 +338,7 @@ else() add_compile_options(-DSERIAL_MPI) add_compile_options(-DMPI_MOD) set(SERIAL_MPI ON) + set(CSERIALMPI "#define SERIAL_MPI") endif() #------------------------------------------------------- @@ -347,6 +367,31 @@ add_compile_options(-DHAVE_LAPACK) include(${CMAKE_CURRENT_LIST_DIR}/cmake/FindMETIS.cmake) find_package(METIS) +if(METIS_FOUND) + + set(METIS_INDEX 64 CACHE STRING "Index size for METIS (default: 64)") + + # Check conditions for LPK_SIZE and METIS_INDEX + if(LPK_SIZE STREQUAL "4") + if(METIS_INDEX STREQUAL "64") + # Mismatch between METIS size and PSBLAS LPK + message(FATAL " Mismatch between metis ${METIS_INDEX} size and psblas LPK size ${LPK_SIZE}") + endif() + endif() + + if(LPK_SIZE STREQUAL "8") + if(METIS_INDEX STREQUAL "32") + # Mismatch between METIS size and PSBLAS LPK + message(FATAL " Mismatch between metis ${METIS_INDEX} size and psblas LPK size ${LPK_SIZE}") + endif() + endif() + + + set(CHAVEMETIS "#define HAVE_METIS") + set(CINTMETIS "#define METIS_${IPK_SIZE}") + set(CREALMETIS "#define METIS_REAL_${LPK_SIZE}") +endif() + #--------------------------------------------------- # Use standardized GNU install directory conventions #---------------------------------------------------