-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathFindCharm.cmake
163 lines (143 loc) · 4.78 KB
/
FindCharm.cmake
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
################################################################################
#
# \file FindCharm.cmake
# \copyright 2012-2015 J. Bakosi,
# 2016-2018 Los Alamos National Security, LLC.,
# 2019-2021 Triad National Security, LLC.
# All rights reserved. See the LICENSE file for details.
# \brief Find Charm++
#
################################################################################
# Charm++: http://charmplusplus.org
#
# CHARM_FOUND - True if the charmc compiler wrapper was found
# CHARM_INCLUDE_DIRS - Charm++ include files paths
#
# Set CHARM_ROOT before calling find_package to a path to add an additional
# search path, e.g.,
#
# Usage:
#
# set(CHARM_ROOT "/path/to/custom/charm") # prefer over system
# find_package(Charm)
# if(CHARM_FOUND)
# # Link executables with the charmc wrapper
# STRING(REGEX REPLACE "<CMAKE_CXX_COMPILER>" "${CHARM_COMPILER}"
# CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE}")
# endif()
function(_GET_CHARMINC _OUT_INC _charmc)
file(STRINGS ${_charmc} _contents REGEX "^CHARMINC=")
if(_contents)
string(REGEX REPLACE "^CHARMINC=\"(.*)\"" "\\1" ${_OUT_INC} "${_contents}")
set(${_OUT_INC} ${${_OUT_INC}} PARENT_SCOPE)
else()
message(FATAL_ERROR "file ${_charmc} does not exist")
endif()
endfunction()
# find out if Charm++ was built with randomzied message queues
function(GET_CHARM_QUEUE_TYPE CHARM_RNDQ conv_conf_hdr)
file( STRINGS ${conv_conf_hdr} _contents
REGEX ".*#define CMK_RANDOMIZED_MSGQ[ \t]+" )
if(_contents)
string(REGEX REPLACE ".*#define CMK_RANDOMIZED_MSGQ[ \t]+([01]+).*" "\\1" RNDQ "${_contents}")
if (RNDQ EQUAL 1)
set(CHARM_RNDQ true PARENT_SCOPE)
message(STATUS "Charm++ built with randomized message queues")
endif()
else()
message(FATAL_ERROR "Include file ${conv_conf_hdr} does not exist")
endif()
endfunction()
# If already in cache, be silent
if (CHARM_INCLUDE_DIRS AND CHARM_COMPILER AND CHARM_RUN)
set (CHARM_FIND_QUIETLY TRUE)
endif()
INCLUDE(FindCygwin)
FIND_PROGRAM(CHARM_COMPILER
NAMES charmc
PATHS ${CHARM_ROOT}
$ENV{CHARM_ROOT}
${CYGWIN_INSTALL_PATH}
${CMAKE_INSTALL_PREFIX}/charm
PATH_SUFFIXES bin
)
FIND_PROGRAM(CHARM_RUN
NAMES charmrun
PATHS ${CHARM_ROOT}
$ENV{CHARM_ROOT}
${CYGWIN_INSTALL_PATH}
${CMAKE_INSTALL_PREFIX}/charm
PATH_SUFFIXES bin
)
FIND_PROGRAM(AMPI_C_COMPILER
NAMES ampicc
PATHS ${CHARM_ROOT}
$ENV{CHARM_ROOT}
${CYGWIN_INSTALL_PATH}
${CMAKE_INSTALL_PREFIX}/charm
PATH_SUFFIXES bin
)
FIND_PROGRAM(AMPI_CXX_COMPILER
NAMES ampicxx
PATHS ${CHARM_ROOT}
$ENV{CHARM_ROOT}
${CYGWIN_INSTALL_PATH}
${CMAKE_INSTALL_PREFIX}/charm
PATH_SUFFIXES bin
)
FIND_PROGRAM(AMPI_RUN
NAMES ampirun
PATHS ${CHARM_ROOT}
$ENV{CHARM_ROOT}
${CYGWIN_INSTALL_PATH}
${CMAKE_INSTALL_PREFIX}/charm
PATH_SUFFIXES bin
)
if(CHARM_COMPILER)
_GET_CHARMINC(HINTS_CHARMINC ${CHARM_COMPILER})
endif()
FIND_PATH(CHARM_INCLUDE_DIR NAMES charm.h
HINTS ${HINTS_CHARMINC}
${CHARM_ROOT}/include
$ENV{CHARM_ROOT}/include
${CMAKE_INSTALL_PREFIX}/charm/include
PATH_SUFFIXES charm)
if(CHARM_INCLUDE_DIR)
FIND_PATH(CHARM_CONV_HDR NAMES conv-autoconfig.h
HINTS ${HINTS_CHARMINC}
${CHARM_INCLUDE_DIR}
PATH_SUFFIXES ../tmp)
GET_CHARM_QUEUE_TYPE(CHARM_QUEUE_TYPE ${CHARM_CONV_HDR}/conv-autoconfig.h)
endif()
if(CHARM_INCLUDE_DIR)
set(CHARM_INCLUDE_DIRS ${CHARM_INCLUDE_DIR})
else()
set(CHARM_INCLUDE_DIRS "")
endif()
# Handle the QUIETLY and REQUIRED arguments and set CHARM_FOUND to TRUE if all
# listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Charm DEFAULT_MSG CHARM_COMPILER
CHARM_INCLUDE_DIRS CHARM_RUN)
if(AMPI_C_COMPILER AND AMPI_CXX_COMPILER)
set(AMPI_FOUND true)
message(STATUS "Charm++ built with AMPI")
endif()
if(CHARM_COMPILER)
include(CheckIncludeFiles)
CHECK_INCLUDE_FILES("${CHARM_INCLUDE_DIR}/conv-mach-opt.h"
HAVE_CHARM_CONV_MACH_OPT)
if (HAVE_CHARM_CONV_MACH_OPT)
include(CheckSymbolExists)
CHECK_SYMBOL_EXISTS(CMK_SMP "${CHARM_INCLUDE_DIR}/conv-mach-opt.h"
CHARM_SMP)
if (CHARM_SMP)
message(STATUS "Charm++ built in SMP mode")
else()
message(STATUS "Charm++ built in non-SMP mode")
endif()
endif()
endif()
MARK_AS_ADVANCED(CHARM_COMPILER CHARM_INCLUDE_DIRS CHARM_RUN AMPI_FOUND
AMPI_C_COMPILER AMPI_CXX_COMPILER AMPI_RUN CHARM_SMP
CHARM_QUEUE_TYPE)