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) 10option(IS_TESTING "Build for Ctest" OFF) 11set(MPIRUN "mpirun" 12 CACHE string 13 "the mpirun or srun executable") 14set(MPIRUN_PROCFLAG "-np" 15 CACHE string 16 "the command line flag to give process count to MPIRUN") 17 18list(APPEND CMAKE_MODULE_PATH ${PHASTA_SOURCE_DIR}/CMakeFiles) 19 20#Handle Fortran name mangling 21include(FortranCInterface) 22FortranCInterface_VERIFY(CXX) 23FortranCInterface_Header(FCMangle.h SYMBOLS write_restart write_error write_displ write_field write_hessian) 24include_directories("${PHASTA_BINARY_DIR}") 25 26# Force static linking 27IF(CMAKE_SYSTEM_NAME MATCHES BlueGeneQ-static) 28 SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") 29ENDIF(CMAKE_SYSTEM_NAME MATCHES BlueGeneQ-static) 30 31#MESSAGE(ERROR ${CMAKE_Fortran_SOURCE_FILE_EXTENSIONS}) 32#SET(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f90 f F90 F) 33# stuff for C/C++ calls to Fortran -- still needs to be done properly... 34IF(CMAKE_Fortran_COMPILER_ID MATCHES GNU) 35 SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffixed-form -ffixed-line-length-132 -x f95-cpp-input" ) 36ENDIF(CMAKE_Fortran_COMPILER_ID MATCHES GNU) 37 38IF(CMAKE_Fortran_COMPILER_ID MATCHES Intel) 39 40SET(CMAKE_Fortran_FLAGS "-g -O3 -W0 -ip -80 -fpp ${CMAKE_Fortran_FLAGS}" ) 41message(STATUS "Found ifort") 42message(STATUS ${CMAKE_Fortran_FLAGS}) 43ENDIF(CMAKE_Fortran_COMPILER_ID MATCHES Intel) 44 45if(CMAKE_Fortran_COMPILER_ID MATCHES PGI) 46 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mextend") 47endif(CMAKE_Fortran_COMPILER_ID MATCHES PGI) 48 49if(CMAKE_Fortran_COMPILER_ID MATCHES XL) 50 #set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qstrict -qnullterm -qfixed=132") 51 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qnullterm -qfixed=132") 52endif(CMAKE_Fortran_COMPILER_ID MATCHES XL) 53 54IF(${CMAKE_BUILD_TYPE} MATCHES "Debug" ) 55 ADD_DEFINITIONS( -DDEBUG ) 56ENDIF(${CMAKE_BUILD_TYPE} MATCHES "Debug" ) 57 58# set archos "like" options for things like c calling fortran bindings 59# later on we may want to do it dependent on behavior (e.g. 60# C_FORTRAN_CALL == uppercase, underline, nochange) 61#OPTION(ARCHOS_OPTION "ArchOS dependent defines (e.g. -DLINUX)" ) 62SET(ARCHOS_OPTION "-DLINUX" CACHE STRING "ArchOS dependent defines (e.g. -DLINUX)" ) 63ADD_DEFINITIONS( ${ARCHOS_OPTION} ) 64 65 66SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY 67 ${PHASTA_BINARY_DIR}/lib) 68 69SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY 70 ${PHASTA_BINARY_DIR}/bin) 71 72OPTION(PHASTA_USE_MPI "Build MPI components" ON) 73IF(PHASTA_USE_MPI) 74 ADD_DEFINITIONS( -DPARALLEL -DMPI -DMPICH_SKIP_MPICXX ) 75 FIND_PACKAGE(MPI REQUIRED) 76# SET(CMAKE_MODULE_PATH ${PHASTA_SOURCE_DIR}/CMakeFiles) 77 # bug in FIND_PACKAGE for Threads -- ignore for now (bug has been reported)... 78 FIND_PACKAGE(Threads) 79 IF(Threads_FOUND) 80 INCLUDE(FindThreads) 81 ENDIF(Threads_FOUND) 82ENDIF(PHASTA_USE_MPI) 83 84OPTION(PHASTA_BUILD_PHASTAIO "Build PhastaIO" ON) 85if(PHASTA_BUILD_PHASTAIO) 86 add_subdirectory(phastaIO) 87 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phastaIO") 88endif(PHASTA_BUILD_PHASTAIO) 89 90OPTION(PHASTA_BUILD_SHAPEFUNCTION "Build shapeFunction" ON) 91if(PHASTA_BUILD_SHAPEFUNCTION) 92 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/shapeFunction/src") 93 add_subdirectory(shapeFunction) 94endif(PHASTA_BUILD_SHAPEFUNCTION) 95 96if(EXISTS ${PHASTA_SOURCE_DIR}/phShape) 97OPTION(PHASTA_BUILD_PHSHAPE "Build phShape" OFF) 98if(PHASTA_BUILD_PHSHAPE) 99 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phShape/src") 100 add_subdirectory(phShape) 101endif(PHASTA_BUILD_PHSHAPE) 102endif(EXISTS ${PHASTA_SOURCE_DIR}/phShape) 103 104OPTION(PHASTA_BUILD_SOLVERS "Build Solvers" ON) 105if(PHASTA_BUILD_SOLVERS) 106 set(PHASTA_BUILD_PHASTAIO ON) 107 if(PHASTA_USE_MPI) 108 set(PHASTA_BUILD_METIS ON) 109 endif(PHASTA_USE_MPI) 110 list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phSolver/common") 111 include_directories(${PHASTA_INCLUDES}) 112 add_subdirectory(phSolver) 113#TODO 114endif(PHASTA_BUILD_SOLVERS) 115 116OPTION(PHASTA_BUILD_CONVERTERIO "Build IO converter" ON) 117if(PHASTA_BUILD_CONVERTERIO) 118 add_subdirectory(converterIO) 119endif(PHASTA_BUILD_CONVERTERIO) 120 121OPTION(PHASTA_BUILD_ACUSTAT "Build AcuStat" ON) 122if(PHASTA_BUILD_ACUSTAT) 123 add_subdirectory(AcuStat) 124endif(PHASTA_BUILD_ACUSTAT) 125 126OPTION(PHASTA_BUILD_M2N "Build M2N" ON) 127if(PHASTA_BUILD_M2N) 128 add_subdirectory(M2N) 129endif(PHASTA_BUILD_M2N) 130 131OPTION(PHASTA_BUILD_M2NFixBnd "Build M2NFixBnd" ON) 132if(PHASTA_BUILD_M2NFixBnd) 133 add_subdirectory(M2NFixBnd) 134endif(PHASTA_BUILD_M2NFixBnd) 135 136if(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre) 137 add_subdirectory(phNSpre) 138endif(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre) 139 140