159599516SKenneth E. JansenCMAKE_MINIMUM_REQUIRED(VERSION 2.8.5) 259599516SKenneth E. Jansen#SET(CMAKE_FORTRAN_COMPILER gfortran gfortran) 359599516SKenneth E. JansenPROJECT(PHASTA Fortran C CXX ) 459599516SKenneth E. Jansenenable_language(Fortran) 559599516SKenneth E. Jansenenable_language(C) 659599516SKenneth E. Jansenenable_language(CXX) 759599516SKenneth E. Jansen 83bee5793SCameron Smith#The following commit fixes an issue with imported targets and gfortran 93bee5793SCameron Smith#https://gitlab.kitware.com/cmake/cmake/commit/a8e7a1047ad3b61238f073ea3d2cd138f207c1ed 103bee5793SCameron Smithif(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 3.3.0) 113bee5793SCameron Smith #if the cmake version is too old then set the magic flag to use -I instead of 123bee5793SCameron Smith # -isystem for imported targets - we are importing a fortran module from 133bee5793SCameron Smith # SCOREC/core for phasta io timers 143bee5793SCameron Smith unset(CMAKE_INCLUDE_SYSTEM_FLAG_Fortran) 153bee5793SCameron Smithendif() 163bee5793SCameron Smith 17f3b67ec7SCameron Smithenable_testing() 18f3b67ec7SCameron Smithinclude(CTest) 19f3b67ec7SCameron Smithset(MPIRUN "mpirun" 203d4fccb8SCameron Smith CACHE STRING 21f3b67ec7SCameron Smith "the mpirun or srun executable") 22f3b67ec7SCameron Smithset(MPIRUN_PROCFLAG "-np" 233d4fccb8SCameron Smith CACHE STRING 24f3b67ec7SCameron Smith "the command line flag to give process count to MPIRUN") 25f3b67ec7SCameron Smith 2659599516SKenneth E. Jansenlist(APPEND CMAKE_MODULE_PATH ${PHASTA_SOURCE_DIR}/CMakeFiles) 2759599516SKenneth E. Jansen 2859599516SKenneth E. Jansen#Handle Fortran name mangling 2959599516SKenneth E. Janseninclude(FortranCInterface) 3059599516SKenneth E. JansenFortranCInterface_VERIFY(CXX) 3159599516SKenneth E. JansenFortranCInterface_Header(FCMangle.h SYMBOLS write_restart write_error write_displ write_field write_hessian) 3259599516SKenneth E. Janseninclude_directories("${PHASTA_BINARY_DIR}") 3359599516SKenneth E. Jansen 3459599516SKenneth E. Jansen# Force static linking 3559599516SKenneth E. JansenIF(CMAKE_SYSTEM_NAME MATCHES BlueGeneQ-static) 3659599516SKenneth E. Jansen SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") 3759599516SKenneth E. JansenENDIF(CMAKE_SYSTEM_NAME MATCHES BlueGeneQ-static) 3859599516SKenneth E. Jansen 3959599516SKenneth E. Jansen#MESSAGE(ERROR ${CMAKE_Fortran_SOURCE_FILE_EXTENSIONS}) 4059599516SKenneth E. Jansen#SET(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f90 f F90 F) 4159599516SKenneth E. Jansen# stuff for C/C++ calls to Fortran -- still needs to be done properly... 4259599516SKenneth E. JansenIF(CMAKE_Fortran_COMPILER_ID MATCHES GNU) 43b58995c2SBen Matthews SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffixed-form -ffixed-line-length-132 -cpp " ) 44*d5db6b4aSBen Matthews IF(CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER 9.5.0) 45*d5db6b4aSBen Matthews #This feature was introduced in gfortran 10 46*d5db6b4aSBen Matthews #the last public release prior was 9.5 and 47*d5db6b4aSBen Matthews #version_greater_equal was introduced recently so we implement 48*d5db6b4aSBen Matthews #for compatibility. 49*d5db6b4aSBen Matthews SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") 50*d5db6b4aSBen Matthews ENDIF(CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER 9.5.0) 5159599516SKenneth E. JansenENDIF(CMAKE_Fortran_COMPILER_ID MATCHES GNU) 5259599516SKenneth E. Jansen 5359599516SKenneth E. JansenIF(CMAKE_Fortran_COMPILER_ID MATCHES Intel) 5459599516SKenneth E. Jansen 55b58995c2SBen MatthewsSET(CMAKE_Fortran_FLAGS "-W0 -132 -fixed -fpp ${CMAKE_Fortran_FLAGS}" ) 56b58995c2SBen Matthewsif((CMAKE_BUILD_TYPE MATCHES "Release") OR 57b58995c2SBen Matthews (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")) 58b58995c2SBen Matthews set(CMAKE_Fortran_FLAGS "-O3 -ip ${CMAKE_Fortran_FLAGS}" ) 59b58995c2SBen Matthewsendif() 6059599516SKenneth E. Jansenmessage(STATUS "Found ifort") 6159599516SKenneth E. Jansenmessage(STATUS ${CMAKE_Fortran_FLAGS}) 6259599516SKenneth E. JansenENDIF(CMAKE_Fortran_COMPILER_ID MATCHES Intel) 6359599516SKenneth E. Jansen 6459599516SKenneth E. Jansenif(CMAKE_Fortran_COMPILER_ID MATCHES PGI) 6559599516SKenneth E. Jansen set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mextend") 6659599516SKenneth E. Jansenendif(CMAKE_Fortran_COMPILER_ID MATCHES PGI) 6759599516SKenneth E. Jansen 6859599516SKenneth E. Jansenif(CMAKE_Fortran_COMPILER_ID MATCHES XL) 6959599516SKenneth E. Jansen #set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qstrict -qnullterm -qfixed=132") 7059599516SKenneth E. Jansen set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qnullterm -qfixed=132") 7159599516SKenneth E. Jansenendif(CMAKE_Fortran_COMPILER_ID MATCHES XL) 7259599516SKenneth E. Jansen 7359599516SKenneth E. JansenIF(${CMAKE_BUILD_TYPE} MATCHES "Debug" ) 7459599516SKenneth E. Jansen ADD_DEFINITIONS( -DDEBUG ) 7559599516SKenneth E. JansenENDIF(${CMAKE_BUILD_TYPE} MATCHES "Debug" ) 7659599516SKenneth E. Jansen 7759599516SKenneth E. Jansen# set archos "like" options for things like c calling fortran bindings 7859599516SKenneth E. Jansen# later on we may want to do it dependent on behavior (e.g. 7959599516SKenneth E. Jansen# C_FORTRAN_CALL == uppercase, underline, nochange) 8059599516SKenneth E. Jansen#OPTION(ARCHOS_OPTION "ArchOS dependent defines (e.g. -DLINUX)" ) 8159599516SKenneth E. JansenSET(ARCHOS_OPTION "-DLINUX" CACHE STRING "ArchOS dependent defines (e.g. -DLINUX)" ) 8259599516SKenneth E. JansenADD_DEFINITIONS( ${ARCHOS_OPTION} ) 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansen 8559599516SKenneth E. JansenSET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY 8659599516SKenneth E. Jansen ${PHASTA_BINARY_DIR}/lib) 8759599516SKenneth E. Jansen 8859599516SKenneth E. JansenSET(CMAKE_RUNTIME_OUTPUT_DIRECTORY 8959599516SKenneth E. Jansen ${PHASTA_BINARY_DIR}/bin) 9059599516SKenneth E. Jansen 9159599516SKenneth E. JansenOPTION(PHASTA_USE_MPI "Build MPI components" ON) 9259599516SKenneth E. JansenIF(PHASTA_USE_MPI) 934087de32SBen Matthews ADD_DEFINITIONS( -DPARALLEL -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX ) 94e85dd27fSBen Matthews option(PHASTA_SKIP_MPI_CHECK "Bypass CMake MPI code. Don't use this" OFF) 95e85dd27fSBen Matthews mark_as_advanced(FORCE PHASTA_SKIP_MPI_CHECK) 96e85dd27fSBen Matthews if(NOT PHASTA_SKIP_MPI_CHECK) 9759599516SKenneth E. Jansen FIND_PACKAGE(MPI REQUIRED) 98e85dd27fSBen Matthews endif() 9959599516SKenneth E. Jansen# SET(CMAKE_MODULE_PATH ${PHASTA_SOURCE_DIR}/CMakeFiles) 10059599516SKenneth E. Jansen # bug in FIND_PACKAGE for Threads -- ignore for now (bug has been reported)... 10159599516SKenneth E. Jansen FIND_PACKAGE(Threads) 10259599516SKenneth E. Jansen IF(Threads_FOUND) 10359599516SKenneth E. Jansen INCLUDE(FindThreads) 10459599516SKenneth E. Jansen ENDIF(Threads_FOUND) 10559599516SKenneth E. JansenENDIF(PHASTA_USE_MPI) 10659599516SKenneth E. Jansen 10730d80da6SCameron Smithif(PHASTA_CHEF_ENABLED) 10830d80da6SCameron Smith message(STATUS "PHASTA_CHEF_ENABLED SCOREC_PREFIX ${SCOREC_PREFIX}") 10930d80da6SCameron Smith find_package(SCOREC 2.1.0 REQUIRED CONFIG 11030d80da6SCameron Smith PATHS ${SCOREC_PREFIX} NO_DEFAULT_PATH) 11130d80da6SCameron Smithendif(PHASTA_CHEF_ENABLED) 11230d80da6SCameron Smith 11359599516SKenneth E. JansenOPTION(PHASTA_BUILD_PHASTAIO "Build PhastaIO" ON) 11459599516SKenneth E. Jansenif(PHASTA_BUILD_PHASTAIO) 11559599516SKenneth E. Jansen add_subdirectory(phastaIO) 11659599516SKenneth E. Jansen list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phastaIO") 1178f9016f6SCameron Smith if(NOT PHASTA_CHEF_ENABLED) 1188f9016f6SCameron Smith list(APPEND PHASTA_INCLUDES 1198f9016f6SCameron Smith "${PHASTA_SOURCE_DIR}/phastaIO/phiotimer_empty") 1208f9016f6SCameron Smith endif(NOT PHASTA_CHEF_ENABLED) 12159599516SKenneth E. Jansenendif(PHASTA_BUILD_PHASTAIO) 12259599516SKenneth E. Jansen 12359599516SKenneth E. JansenOPTION(PHASTA_BUILD_SHAPEFUNCTION "Build shapeFunction" ON) 12459599516SKenneth E. Jansenif(PHASTA_BUILD_SHAPEFUNCTION) 12559599516SKenneth E. Jansen list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/shapeFunction/src") 12659599516SKenneth E. Jansen add_subdirectory(shapeFunction) 12759599516SKenneth E. Jansenendif(PHASTA_BUILD_SHAPEFUNCTION) 12859599516SKenneth E. Jansen 12959599516SKenneth E. Jansenif(EXISTS ${PHASTA_SOURCE_DIR}/phShape) 13059599516SKenneth E. JansenOPTION(PHASTA_BUILD_PHSHAPE "Build phShape" OFF) 13159599516SKenneth E. Jansenif(PHASTA_BUILD_PHSHAPE) 13259599516SKenneth E. Jansen list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phShape/src") 13359599516SKenneth E. Jansen add_subdirectory(phShape) 13459599516SKenneth E. Jansenendif(PHASTA_BUILD_PHSHAPE) 13559599516SKenneth E. Jansenendif(EXISTS ${PHASTA_SOURCE_DIR}/phShape) 13659599516SKenneth E. Jansen 13779f1763eSKenneth E. JansenOPTION(PHASTA_USE_SVLS "Build svLS Linear Solver" OFF) 13879f1763eSKenneth E. Jansenif(PHASTA_USE_SVLS) 139fdc430d9SBen Matthews message(WARNING "\ 140fdc430d9SBen MatthewssvLS has a non-commercial license. \n \ 14179f1763eSKenneth E. Jansenby activating PHASTA_USE_SVLS in cmake \n \ 142fdc430d9SBen Matthewsyou agree to the terms outlined in \ 143fdc430d9SBen MatthewssvLS/license.txt" 144fdc430d9SBen Matthews ) 1455fd60115SBen Matthews list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/svLS") 1465fd60115SBen Matthews add_subdirectory(svLS) 14779f1763eSKenneth E. Jansenendif(PHASTA_USE_SVLS) 1485fd60115SBen Matthews 14959599516SKenneth E. JansenOPTION(PHASTA_BUILD_SOLVERS "Build Solvers" ON) 15059599516SKenneth E. Jansenif(PHASTA_BUILD_SOLVERS) 15159599516SKenneth E. Jansen set(PHASTA_BUILD_PHASTAIO ON) 15259599516SKenneth E. Jansen if(PHASTA_USE_MPI) 15359599516SKenneth E. Jansen set(PHASTA_BUILD_METIS ON) 15459599516SKenneth E. Jansen endif(PHASTA_USE_MPI) 15559599516SKenneth E. Jansen list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phSolver/common") 15659599516SKenneth E. Jansen include_directories(${PHASTA_INCLUDES}) 15759599516SKenneth E. Jansen add_subdirectory(phSolver) 158b48de46dSCameron Smith add_subdirectory(checkphasta) 15959599516SKenneth E. Jansen#TODO 16059599516SKenneth E. Jansenendif(PHASTA_BUILD_SOLVERS) 16159599516SKenneth E. Jansen 16259599516SKenneth E. JansenOPTION(PHASTA_BUILD_CONVERTERIO "Build IO converter" ON) 16359599516SKenneth E. Jansenif(PHASTA_BUILD_CONVERTERIO) 16459599516SKenneth E. Jansen add_subdirectory(converterIO) 16559599516SKenneth E. Jansenendif(PHASTA_BUILD_CONVERTERIO) 16659599516SKenneth E. Jansen 16759599516SKenneth E. JansenOPTION(PHASTA_BUILD_ACUSTAT "Build AcuStat" ON) 16859599516SKenneth E. Jansenif(PHASTA_BUILD_ACUSTAT) 16959599516SKenneth E. Jansen add_subdirectory(AcuStat) 17059599516SKenneth E. Jansenendif(PHASTA_BUILD_ACUSTAT) 17159599516SKenneth E. Jansen 17259599516SKenneth E. JansenOPTION(PHASTA_BUILD_M2N "Build M2N" ON) 17359599516SKenneth E. Jansenif(PHASTA_BUILD_M2N) 17459599516SKenneth E. Jansen add_subdirectory(M2N) 17559599516SKenneth E. Jansenendif(PHASTA_BUILD_M2N) 17659599516SKenneth E. Jansen 17759599516SKenneth E. JansenOPTION(PHASTA_BUILD_M2NFixBnd "Build M2NFixBnd" ON) 17859599516SKenneth E. Jansenif(PHASTA_BUILD_M2NFixBnd) 17959599516SKenneth E. Jansen add_subdirectory(M2NFixBnd) 18059599516SKenneth E. Jansenendif(PHASTA_BUILD_M2NFixBnd) 18159599516SKenneth E. Jansen 18259599516SKenneth E. Jansenif(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre) 18359599516SKenneth E. Jansen add_subdirectory(phNSpre) 18459599516SKenneth E. Jansenendif(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre) 18559599516SKenneth E. Jansen 186