1
2# Set the std
3SET(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} -c99")
4
5# Enable OpenMP
6# If just -mp is specified, OMP_NUM_THREADS must be set in order to run in parallel
7# Specifying 'allcores' will run on all cores if OMP_NUM_THREADS is not set (which seems
8#  to be the default for other OpenMP implementations)
9IF(QMC_OMP)
10  SET(ENABLE_OPENMP 1)
11  SET(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} -mp=allcores")
12  IF(ENABLE_OFFLOAD AND NOT CMAKE_SYSTEM_NAME STREQUAL "CrayLinuxEnvironment")
13    MESSAGE(WARNING "QMCPACK OpenMP offload is not ready for NVIDIA HPC compiler.")
14    IF(NOT DEFINED OFFLOAD_ARCH)
15      MESSAGE(FATAL_ERROR "NVIDIA HPC compiler requires -gpu=ccXX option set based on the target GPU architecture! "
16                          "Please add -DOFFLOAD_ARCH=ccXX to cmake. For example, cc70 is for Volta.")
17    ENDIF()
18    SET(OPENMP_OFFLOAD_COMPILE_OPTIONS "-mp=gpu -gpu=${OFFLOAD_ARCH}")
19  ELSE()
20    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mp=allcores")
21  ENDIF()
22ENDIF(QMC_OMP)
23
24ADD_DEFINITIONS( -Drestrict=__restrict__ )
25
26SET(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} ")
27SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__forceinline=inline")
28
29
30# Set extra optimization specific flags
31SET( CMAKE_C_FLAGS_RELEASE     "${CMAKE_C_FLAGS_RELEASE} -fast" )
32SET( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fast" )
33SET( CMAKE_C_FLAGS_RELWITHDEBINFO     "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fast" )
34SET( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fast" )
35
36
37# Setting this to 'OFF' adds the -A flag, which enforces strict standard compliance
38#  and causes the compilation to fail with some GNU header files
39SET(CMAKE_CXX_EXTENSIONS ON)
40
41
42# Add static flags if necessary
43IF(QMC_BUILD_STATIC)
44    SET(CMAKE_CXX_LINK_FLAGS " -Bstatic")
45ENDIF(QMC_BUILD_STATIC)
46