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