forked from FluidNumerics/SELF
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
81 lines (63 loc) · 2.45 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#cmake_minimum_required(VERSION 3.5)
#cmake_policy(VERSION 3.5...3.27)
#
# Invoke with
# FC=gfortran \
# AMDDeviceLibs_DIR=/opt/rocm/lib/cmake/AMDDeviceLibs \
# amd_comgr_DIR=/opt/rocm/lib/cmake/amd_comgr/ \
# cmake ../
#
cmake_minimum_required(VERSION 3.21) # HIP language support requires 3.21 or gretater
cmake_policy(VERSION 3.21...3.27)
if(NOT DEFINED ROCM_PATH)
if(NOT DEFINED ENV{ROCM_PATH})
set(ROCM_PATH "/opt/rocm/" CACHE PATH "Path to which ROCm has been installed")
else()
set(ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to which ROCm has been installed")
endif()
endif()
find_program(CMAKE_CXX_COMPILER "hipcc" PATHS ${ROCM_PATH})
# C Language is needed in order to verify Fortran compiler is C-interoperable
# CXX language is needed to properly find "hip" package
project(self VERSION 1.0.0
DESCRIPTION "Spectral Element Library in Fortran"
LANGUAGES Fortran HIP C CXX)
# Fortran compiler requirements
INCLUDE(FortranCInterface)
FortranCInterface_VERIFY()
IF(NOT FortranCInterface_VERIFIED_C)
MESSAGE(FATAL_ERROR "Fortran compiler must support C Interface")
ENDIF(NOT FortranCInterface_VERIFIED_C)
IF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90)
MESSAGE(FATAL_ERROR "Fortran compiler does not support F90")
ENDIF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90)
# Default Fortran compiler flags
# Fortran compiler flags
if( "${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" )
set( CMAKE_Fortran_FLAGS "-cpp -ffree-line-length-512" )
set( CMAKE_Fortran_FLAGS_DEBUG "-g -O0 -C -Wall -fbounds-check -fbacktrace -ffpe-trap=invalid,zero,overflow" )
set( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_DEBUG} --coverage")
set( CMAKE_Fortran_FLAGS_PROFILE "-pg -O3")
set( CMAKE_Fortran_FLAGS_RELEASE "-O3" )
set( CMAKE_C_FLAGS_COVERAGE "-g -O0 --coverage")
endif()
# ------ dependencies ------ #
# HIP
find_package(hip REQUIRED)
# MPI
find_package(MPI COMPONENTS Fortran REQUIRED)
# HDF5 : See https://cmake.org/cmake/help/latest/module/FindHDF5.html
find_package(HDF5 REQUIRED Fortran)
# JSON-Fortran
find_library(JSONFORTRAN_LIBRARIES NAMES jsonfortran REQUIRED)
find_path(JSONFORTRAN_INCLUDE_DIRS json_module.mod)
# FEQ-Parse
find_library(FEQPARSE_LIBRARIES NAMES feqparse REQUIRED)
find_path(FEQPARSE_INCLUDE_DIRS feqparse.mod)
# ----- end dependencies ----- #
# Libraries
add_subdirectory(${CMAKE_SOURCE_DIR}/src)
# Driver programs
add_subdirectory(${CMAKE_SOURCE_DIR}/bin)
# Tests
add_subdirectory(${CMAKE_SOURCE_DIR}/test)