1CMAKE_MINIMUM_REQUIRED(VERSION 2.8.5) 2#SET(CMAKE_FORTRAN_COMPILER gfortran gfortran) 3PROJECT(PHASTA Fortran C CXX ) 4enable_language(Fortran) 5enable_language(C) 6enable_language(CXX) 7 8enable_testing() 9include(CTest) 10set(MPIRUN "mpirun" 11 CACHE string 12 "the mpirun or srun executable") 13set(MPIRUN_PROCFLAG "-np" 14 CACHE string 15 "the command line flag to give process count to MPIRUN") 16 17list(APPEND CMAKE_MODULE_PATH ${PHASTA_SOURCE_DIR}/CMakeFiles) 18 19#Handle Fortran name mangling 20include(FortranCInterface) 21FortranCInterface_VERIFY(CXX) 22FortranCInterface_Header(FCMangle.h SYMBOLS write_restart write_error write_displ write_field write_hessian) 23include_directories("${PHASTA_BINARY_DIR}") 24 25# Force static linking 26IF(CMAKE_SYSTEM_NAME MATCHES BlueGeneQ-static) 27 SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") 28ENDIF(CMAKE_SYSTEM_NAME MATCHES BlueGeneQ-static) 29 30#MESSAGE(ERROR ${CMAKE_Fortran_SOURCE_FILE_EXTENSIONS}) 31#SET(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f90 f F90 F) 32# stuff for C/C++ calls to Fortran -- still needs to be done properly... 33IF(CMAKE_Fortran_COMPILER_ID MATCHES GNU) 34 SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffixed-form -ffixed-line-length-132 -cpp " ) 35ENDIF(CMAKE_Fortran_COMPILER_ID MATCHES GNU) 36 37IF(CMAKE_Fortran_COMPILER_ID MATCHES Intel) 38 39SET(CMAKE_Fortran_FLAGS "-W0 -132 -fixed -fpp ${CMAKE_Fortran_FLAGS}" ) 40if((CMAKE_BUILD_TYPE MATCHES "Release") OR 41 (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")) 42 set(CMAKE_Fortran_FLAGS "-O3 -ip ${CMAKE_Fortran_FLAGS}" ) 43endif() 44message(STATUS "Found ifort") 45message(STATUS ${CMAKE_Fortran_FLAGS}) 46ENDIF(CMAKE_Fortran_COMPILER_ID MATCHES Intel) 47 48if(CMAKE_Fortran_COMPILER_ID MATCHES PGI) 49 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mextend") 50endif(CMAKE_Fortran_COMPILER_ID MATCHES PGI) 51 52if(CMAKE_Fortran_COMPILER_ID MATCHES XL) 53 #set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qstrict -qnullterm -qfixed=132") 54 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qnullterm -qfixed=132") 55endif(CMAKE_Fortran_COMPILER_ID MATCHES XL) 56 57IF(${CMAKE_BUILD_TYPE} MATCHES "Debug" ) 58 ADD_DEFINITIONS( -DDEBUG ) 59ENDIF(${CMAKE_BUILD_TYPE} MATCHES "Debug" ) 60 61# set archos "like" options for things like c calling fortran bindings 62# later on we may want to do it dependent on behavior (e.g. 63# C_FORTRAN_CALL == uppercase, underline, nochange) 64#OPTION(ARCHOS_OPTION "ArchOS dependent defines (e.g. -DLINUX)" ) 65SET(ARCHOS_OPTION "-DLINUX" CACHE STRING "ArchOS dependent defines (e.g. -DLINUX)" ) 66ADD_DEFINITIONS( ${ARCHOS_OPTION} ) 67 68 69SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY 70 ${PHASTA_BINARY_DIR}/lib) 71 72SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY 73 ${PHASTA_BINARY_DIR}/bin) 74 75OPTION(PHASTA_USE_MPI "Build MPI components" ON) 76IF(PHASTA_USE_MPI) 77 ADD_DEFINITIONS( -DPARALLEL -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX ) 78 option(PHASTA_SKIP_MPI_CHECK "Bypass CMake MPI code. Don't use this" OFF) 79 mark_as_advanced(FORCE PHASTA_SKIP_MPI_CHECK) 80 if(NOT PHASTA_SKIP_MPI_CHECK) 81 FIND_PACKAGE(MPI REQUIRED) 82 endif() 83# SET(CMAKE_MODULE_PATH ${PHASTA_SOURCE_DIR}/CMakeFiles) 84 # bug in FIND_PACKAGE for Threads -- ignore for now (bug has been reported)... 85 FIND_PACKAGE(Threads) 86 IF(Threads_FOUND) 87 INCLUDE(FindThreads) 88 ENDIF(Threads_FOUND) 89ENDIF(PHASTA_USE_MPI) 90 91OPTION(PHASTA_BUILD_PHASTAIO "Build PhastaIO" ON) 92if(PHASTA_BUILD_PHASTAIO) 93 add_subdirectory(phastaIO) 94 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phastaIO") 95 if(NOT PHASTA_CHEF_ENABLED) 96 list(APPEND PHASTA_INCLUDES 97 "${PHASTA_SOURCE_DIR}/phastaIO/phiotimer_empty") 98 endif(NOT PHASTA_CHEF_ENABLED) 99endif(PHASTA_BUILD_PHASTAIO) 100 101OPTION(PHASTA_BUILD_SHAPEFUNCTION "Build shapeFunction" ON) 102if(PHASTA_BUILD_SHAPEFUNCTION) 103 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/shapeFunction/src") 104 add_subdirectory(shapeFunction) 105endif(PHASTA_BUILD_SHAPEFUNCTION) 106 107if(EXISTS ${PHASTA_SOURCE_DIR}/phShape) 108OPTION(PHASTA_BUILD_PHSHAPE "Build phShape" OFF) 109if(PHASTA_BUILD_PHSHAPE) 110 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phShape/src") 111 add_subdirectory(phShape) 112endif(PHASTA_BUILD_PHSHAPE) 113endif(EXISTS ${PHASTA_SOURCE_DIR}/phShape) 114 115OPTION(PHASTA_USE_SVLS "Build svLS Linear Solver" OFF) 116if(PHASTA_USE_SVLS) 117 message(WARNING "\ 118svLS has a non-commercial license. \n \ 119by activating PHASTA_USE_SVLS in cmake \n \ 120you agree to the terms outlined in \ 121svLS/license.txt" 122 ) 123 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/svLS") 124 add_subdirectory(svLS) 125endif(PHASTA_USE_SVLS) 126 127OPTION(PHASTA_BUILD_SOLVERS "Build Solvers" ON) 128if(PHASTA_BUILD_SOLVERS) 129 if(PHASTA_CHEF_ENABLED) 130 message(STATUS "PHASTA_CHEF_ENABLED SCOREC_PREFIX ${SCOREC_PREFIX}") 131 find_package(SCOREC 2.1.0 REQUIRED CONFIG 132 PATHS ${SCOREC_PREFIX} NO_DEFAULT_PATH) 133 endif(PHASTA_CHEF_ENABLED) 134 set(PHASTA_BUILD_PHASTAIO ON) 135 if(PHASTA_USE_MPI) 136 set(PHASTA_BUILD_METIS ON) 137 endif(PHASTA_USE_MPI) 138 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phSolver/common") 139 include_directories(${PHASTA_INCLUDES}) 140 add_subdirectory(phSolver) 141 add_subdirectory(checkphasta) 142#TODO 143endif(PHASTA_BUILD_SOLVERS) 144 145OPTION(PHASTA_BUILD_CONVERTERIO "Build IO converter" ON) 146if(PHASTA_BUILD_CONVERTERIO) 147 add_subdirectory(converterIO) 148endif(PHASTA_BUILD_CONVERTERIO) 149 150OPTION(PHASTA_BUILD_ACUSTAT "Build AcuStat" ON) 151if(PHASTA_BUILD_ACUSTAT) 152 add_subdirectory(AcuStat) 153endif(PHASTA_BUILD_ACUSTAT) 154 155OPTION(PHASTA_BUILD_M2N "Build M2N" ON) 156if(PHASTA_BUILD_M2N) 157 add_subdirectory(M2N) 158endif(PHASTA_BUILD_M2N) 159 160OPTION(PHASTA_BUILD_M2NFixBnd "Build M2NFixBnd" ON) 161if(PHASTA_BUILD_M2NFixBnd) 162 add_subdirectory(M2NFixBnd) 163endif(PHASTA_BUILD_M2NFixBnd) 164 165if(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre) 166 add_subdirectory(phNSpre) 167endif(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre) 168 169