xref: /phasta/CMakeLists.txt (revision 50a6f6340c649c1738186cf6fd8c42a882135a5f)
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} -g -ffixed-form -ffixed-line-length-132 " )
35ENDIF(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
36
37IF(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
38
39SET(CMAKE_Fortran_FLAGS "-g -O3 -W0 -ip -80 -fpp ${CMAKE_Fortran_FLAGS}" )
40message(STATUS "Found ifort")
41message(STATUS ${CMAKE_Fortran_FLAGS})
42ENDIF(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
43
44if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
45	set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mextend")
46endif(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
47
48if(CMAKE_Fortran_COMPILER_ID MATCHES XL)
49	#set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qstrict -qnullterm -qfixed=132")
50	set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qnullterm -qfixed=132")
51endif(CMAKE_Fortran_COMPILER_ID MATCHES XL)
52
53IF(${CMAKE_BUILD_TYPE} MATCHES "Debug" )
54  ADD_DEFINITIONS( -DDEBUG )
55ENDIF(${CMAKE_BUILD_TYPE} MATCHES "Debug" )
56
57# set archos "like" options for things like c calling fortran bindings
58# later on we may want to do it dependent on behavior (e.g.
59# C_FORTRAN_CALL == uppercase, underline, nochange)
60#OPTION(ARCHOS_OPTION "ArchOS dependent defines (e.g. -DLINUX)" )
61SET(ARCHOS_OPTION "-DLINUX" CACHE STRING "ArchOS dependent defines (e.g. -DLINUX)" )
62ADD_DEFINITIONS( ${ARCHOS_OPTION} )
63
64
65SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
66  ${PHASTA_BINARY_DIR}/lib)
67
68SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY
69  ${PHASTA_BINARY_DIR}/bin)
70
71OPTION(PHASTA_USE_MPI "Build MPI components" ON)
72IF(PHASTA_USE_MPI)
73  ADD_DEFINITIONS( -DPARALLEL -DMPI -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX )
74  FIND_PACKAGE(MPI REQUIRED)
75#  SET(CMAKE_MODULE_PATH ${PHASTA_SOURCE_DIR}/CMakeFiles)
76  # bug in FIND_PACKAGE for Threads -- ignore for now (bug has been reported)...
77  FIND_PACKAGE(Threads)
78  IF(Threads_FOUND)
79    INCLUDE(FindThreads)
80  ENDIF(Threads_FOUND)
81ENDIF(PHASTA_USE_MPI)
82
83OPTION(PHASTA_BUILD_PHASTAIO "Build PhastaIO" ON)
84if(PHASTA_BUILD_PHASTAIO)
85	add_subdirectory(phastaIO)
86	list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phastaIO")
87endif(PHASTA_BUILD_PHASTAIO)
88
89OPTION(PHASTA_BUILD_SHAPEFUNCTION "Build shapeFunction" ON)
90if(PHASTA_BUILD_SHAPEFUNCTION)
91	list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/shapeFunction/src")
92	add_subdirectory(shapeFunction)
93endif(PHASTA_BUILD_SHAPEFUNCTION)
94
95if(EXISTS ${PHASTA_SOURCE_DIR}/phShape)
96OPTION(PHASTA_BUILD_PHSHAPE "Build phShape" OFF)
97if(PHASTA_BUILD_PHSHAPE)
98	list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phShape/src")
99	add_subdirectory(phShape)
100endif(PHASTA_BUILD_PHSHAPE)
101endif(EXISTS ${PHASTA_SOURCE_DIR}/phShape)
102
103OPTION(PHASTA_BUILD_SVLS "Build svLS Linear Solver" ON)
104if(PHASTA_BUILD_SVLS)
105	list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/svLS")
106	add_subdirectory(svLS)
107endif(PHASTA_BUILD_SVLS)
108
109OPTION(PHASTA_BUILD_SOLVERS "Build Solvers" ON)
110if(PHASTA_BUILD_SOLVERS)
111	set(PHASTA_BUILD_PHASTAIO ON)
112	if(PHASTA_USE_MPI)
113		set(PHASTA_BUILD_METIS ON)
114	endif(PHASTA_USE_MPI)
115	list(APPEND PHASTA_INCLUDES "${PHASTA_SOURCE_DIR}/phSolver/common")
116	include_directories(${PHASTA_INCLUDES})
117	add_subdirectory(phSolver)
118#TODO
119endif(PHASTA_BUILD_SOLVERS)
120
121OPTION(PHASTA_BUILD_CONVERTERIO "Build IO converter" ON)
122if(PHASTA_BUILD_CONVERTERIO)
123	add_subdirectory(converterIO)
124endif(PHASTA_BUILD_CONVERTERIO)
125
126OPTION(PHASTA_BUILD_ACUSTAT "Build AcuStat" ON)
127if(PHASTA_BUILD_ACUSTAT)
128	add_subdirectory(AcuStat)
129endif(PHASTA_BUILD_ACUSTAT)
130
131OPTION(PHASTA_BUILD_M2N "Build M2N" ON)
132if(PHASTA_BUILD_M2N)
133	add_subdirectory(M2N)
134endif(PHASTA_BUILD_M2N)
135
136OPTION(PHASTA_BUILD_M2NFixBnd "Build M2NFixBnd" ON)
137if(PHASTA_BUILD_M2NFixBnd)
138	add_subdirectory(M2NFixBnd)
139endif(PHASTA_BUILD_M2NFixBnd)
140
141if(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre)
142	add_subdirectory(phNSpre)
143endif(EXISTS ${PHASTA_SOURCE_DIR}/phNSpre)
144
145add_subdirectory(checkphasta)
146
147