forked from flexi-framework/hopr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeListsMachine.txt
139 lines (122 loc) · 6.35 KB
/
CMakeListsMachine.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# =========================================================================
# Detect machine environements
# =========================================================================
MARK_AS_ADVANCED(FORCE CMAKE_HOSTNAME)
SITE_NAME(CMAKE_HOSTNAME)
# HLRS HAWK / SuperMUC
IF ("${CMAKE_HOSTNAME}" MATCHES "login")
SET(CMAKE_C_COMPILER mpicc)
SET(CMAKE_CXX_COMPILER mpicxx)
SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue
MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH)
# HAWK and SuperMUC name their login nodes identically, so use OS distribution to identify
find_program(LSB_RELEASE_EXEC lsb_release)
execute_process(COMMAND ${LSB_RELEASE_EXEC} -is OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
# HLRS HAWK
IF (LSB_RELEASE_ID_SHORT MATCHES "CentOS")
MESSAGE(STATUS "Compiling on Hawk")
# Overwrite compiler target architecture
IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang")
SET(HOPR_INSTRUCTION "-march=znver2")
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
SET(HOPR_INSTRUCTION "-xCORE-AVX2")
ENDIF()
# Use AMD Optimized Lapack/BLAS
# SET(BLA_VENDOR "FLAME")
# SuperMUC
ELSEIF (LSB_RELEASE_ID_SHORT MATCHES "SUSE")
MESSAGE(STATUS "Compiling on SuperMUC")
# Overwrite compiler target architecture
IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang")
SET(HOPR_INSTRUCTION "-march=skylake-avx512")
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
SET(HOPR_INSTRUCTION "-xSKYLAKE-AVX512")
# Explicitely enable usage of AVX512 registers
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopt-zmm-usage=high")
ENDIF()
ENDIF()
# IAG Prandtl
ELSEIF("${CMAKE_HOSTNAME}" MATCHES "^prandtl")
MESSAGE(STATUS "Compiling on Prandtl")
SET(CMAKE_C_COMPILER gcc)
SET(CMAKE_CXX_COMPILER c++)
SET(CMAKE_Fortran_COMPILER gfortran)
MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH)
# IAG Grafik01/Grafik02
ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^grafik0")
MESSAGE(STATUS "Compiling on ${CMAKE_HOSTNAME}")
SET(CMAKE_C_COMPILER gcc)
SET(CMAKE_CXX_COMPILER c++)
SET(CMAKE_Fortran_COMPILER gfortran)
MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH)
ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^ilahead1")
MESSAGE(STATUS "Compiling on ILA cluster")
SET(CMAKE_C_COMPILER mpicc)
SET(CMAKE_CXX_COMPILER mpicxx)
SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue
MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH)
# Overwrite compiler target architecture
IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang")
SET(HOPR_INSTRUCTION "-march=core-avx2")
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
SET(HOPR_INSTRUCTION "-xCORE-AVX2")
ENDIF()
ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^xenon")
MESSAGE(STATUS "Compiling on ILA student cluster")
SET(CMAKE_C_COMPILER mpicc)
SET(CMAKE_CXX_COMPILER mpicxx)
SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue
MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH)
ELSE()
# Set compiler target architecture
IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang" )
SET(HOPR_INSTRUCTION "-march=native")
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
SET(HOPR_INSTRUCTION "-xHost")
ENDIF()
ENDIF()
# =========================================================================
# COMPILER FLAGS
# =========================================================================
ENABLE_LANGUAGE(Fortran C)
# FFLAGS depend on the compiler
GET_FILENAME_COMPONENT (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
# GNU Compiler Collection (GCC)
IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
# set Flags
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-real-8 -fdefault-double-8 -fbackslash -ffree-line-length-0 -DGNU")
SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O3 ${HOPR_INSTRUCTION} -finline-functions")
SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -pg -O3 ${HOPR_INSTRUCTION} -finline-functions")
SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -O0 -ggdb3 -fbounds-check -finit-real=nan -fbacktrace -Wall")
# add flags only for compiling not linking!
SET (HOPR_COMPILE_FLAGS "-xf95-cpp-input -fPIC")
# Intel Compiler
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
# set Flags
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -r8 -i4 -traceback -warn all -shared-intel -DINTEL")
SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O2 ${HOPR_INSTRUCTION} -qopt-report0 -qopt-report-phase=vec")
SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -p -O2 ${HOPR_INSTRUCTION} -qopt-report0 -qopt-report-phase=vec")
SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -O0 -fpe0 -traceback -check all,noarg_temp_created,noformat,nooutput_conversion,pointer,uninit -init=snan -init=arrays")
# add flags only for compiling not linking!
SET (HOPR_COMPILE_FLAGS "-fpp -allow nofpp_comments -assume bscc")
# Cray Compiler
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Cray")
# set Flags
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -f free -s real64 -em -DCRAY")
SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O2 -hfp3 -p . -rm")
SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -O2 -hfp3 -h profile_generate -p . -rm")
SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -O0 -eD -rm")
# add flags only for compiling not linking!
SET (HOPR_COMPILE_FLAGS "-F")
ELSE()
MESSAGE(SEND_ERROR "Unknown compiler")
ENDIF()
# Save the current compiler flags to the cache every time cmake configures the project.
MARK_AS_ADVANCED(CMAKE_Fortran_FLAGS)
MARK_AS_ADVANCED(CMAKE_Fortran_FLAGS_RELEASE)
MARK_AS_ADVANCED(CMAKE_Fortran_FLAGS_PROFILE)
MARK_AS_ADVANCED(CMAKE_Fortran_FLAGS_DEBUG)
SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" CACHE STRING "Default compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" CACHE STRING "Release compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE}" CACHE STRING "Profile compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" CACHE STRING "Debug compiler flags" FORCE)