xref: /phasta/CMakeLists.txt (revision 262b347f18a0818df897ecf70aabdaf149691ed8)
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