Skip to content

Commit 2e025eb

Browse files
committed
improve cmake support for charm on top of reconverse
1 parent dba0437 commit 2e025eb

File tree

5 files changed

+113
-21
lines changed

5 files changed

+113
-21
lines changed

.github/workflows/ci.yaml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,3 +443,32 @@ jobs:
443443
run: |
444444
make -C netlrts-win-x86_64/tests test TESTOPTS="++local"
445445
446+
multicore-linux-x86_64_reconverse:
447+
timeout-minutes: 60
448+
runs-on: ubuntu-latest
449+
steps:
450+
- uses: actions/checkout@v4
451+
- name: Install Dependencies
452+
run: |
453+
sudo apt-get update
454+
sudo apt-get install -y cmake libfabric-bin libfabric-dev
455+
- name: build
456+
run: ./build charm++ multicore-linux-x86_64 -j3 --with-production
457+
- name: test
458+
run: |
459+
multicore-linux-x86_64/_deps/lci-src/lcrun -n 2 multicore-linux-x86_64/bin/ckhello +pe 4
460+
461+
multicore-darwin-x86_64_reconverse:
462+
timeout-minutes: 60
463+
runs-on: macos-13
464+
steps:
465+
- uses: actions/checkout@v4
466+
- name: Install Dependencies
467+
run: |
468+
brew update
469+
brew install cmake libfabric
470+
- name: build
471+
run: ./build charm++ multicore-darwin-x86_64 -j3 --with-production
472+
- name: test
473+
run: |
474+
multicore-darwin-x86_64/_deps/lci-src/lcrun -n 2 multicore-darwin-x86_64/bin/ckhello +pe 4

CMakeLists.txt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ option(DRONE_MODE "Enable drone mode" OFF)
187187
option(TASK_QUEUE "Enable task queue" OFF)
188188
option(RECONVERSE "Use the Reconverse communication layer" OFF)
189189

190-
191190
if(TRACING STREQUAL "")
192191
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
193192
set(TRACING 1)
@@ -273,7 +272,6 @@ else()
273272
set(CMK_RECONVERSE 0)
274273
endif()
275274

276-
277275
if(${AMPI_MPICH_TESTS})
278276
add_definitions(-DAMPI_ERRHANDLER_RETURN=1)
279277
set(BUILD_MPICH_TESTS true)
@@ -457,7 +455,11 @@ file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/)
457455
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include/cklibs)
458456

459457
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
460-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib_so)
458+
if(BUILD_SHARED)
459+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib_so)
460+
else()
461+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
462+
endif()
461463
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
462464

463465
if (NOT CMAKE_INSTALL_PREFIX)
@@ -469,6 +471,12 @@ if (NOT CMAKE_BUILD_TYPE)
469471
set(CMAKE_BUILD_TYPE "Release")
470472
endif()
471473

474+
if(RECONVERSE)
475+
# This needs to be include before we set charmc as the linker
476+
# but after CMAKE_LIBRARY_OUTPUT_DIRECTORY has been set
477+
add_subdirectory(cmake/fetch_reconverse)
478+
endif()
479+
472480
if (NOT CMK_MEMPOOL_CUTOFFNUM)
473481
set(CMK_MEMPOOL_CUTOFFNUM 28)
474482
endif()
@@ -1017,6 +1025,9 @@ if(${TARGET} STREQUAL "charm4py")
10171025
else()
10181026
# Check that we are able to build and link an executable
10191027
add_executable(ckhello ${CMAKE_SOURCE_DIR}/tests/charm++/simplearrayhello/hello.C)
1028+
if(RECONVERSE)
1029+
target_link_libraries(ckhello PRIVATE reconverse)
1030+
endif()
10201031
add_dependencies(ckhello ck ckqt conv-static
10211032
converse ckmain
10221033
moduleNDMeshStreamer modulecompletion)

buildcmake

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,10 @@ opt_shmem=0
131131
opt_xpmem=0
132132
opt_qlogic=0
133133
opt_randomized_msgq=0
134-
opt_reconverse=0
134+
opt_reconverse=1 # fake argument for now
135+
opt_fetch_reconverse_tag=""
136+
opt_fetch_reconverse_dir=""
137+
opt_reconverse_fetch_lci=1
135138
opt_refnum_type="unsigned short"
136139
opt_replay=0
137140
opt_shrinkexpand=0
@@ -144,6 +147,7 @@ opt_tcp=0
144147
opt_tracing= #undef
145148
opt_tracing_commthread=0
146149
opt_zlib=1
150+
declare -a opt_cmake_extra_args=()
147151

148152
# default to not building ROMIO on AMPI due to GCC 14 cascade failures
149153
case "$actual_triplet" in
@@ -352,6 +356,15 @@ function processArgs() {
352356
--enable-reconverse)
353357
opt_reconverse=1
354358
;;
359+
--with-fetch-reconverse-tag=*)
360+
opt_fetch_reconverse_tag=${arg#*=}
361+
;;
362+
--with-fetch-reconverse-dir=*)
363+
opt_fetch_reconverse_dir=${arg#*=}
364+
;;
365+
--without-reconverse-fetch-lci)
366+
opt_reconverse_fetch_lci=0
367+
;;
355368
--enable-controlpoint)
356369
opt_controlpoint=1
357370
;;
@@ -466,6 +479,11 @@ function processArgs() {
466479
--incdir=*)
467480
opt_incdir+=("-I${arg#*=}")
468481
;;
482+
--with-cmake-args=*)
483+
# Split the value into words (quotes preserved by the shell before this point)
484+
read -r -a _vals <<< "${arg#*=}"
485+
opt_cmake_extra_args+=("${_vals[@]}")
486+
;;
469487
*)
470488
echo "*** Note: Adding unknown option '$arg' to compiler flags."
471489
opt_extra_opts+=("$arg")
@@ -638,6 +656,17 @@ fi
638656

639657
# Run configure step
640658

659+
CMAKE_EXTRA_ARGS=()
660+
if [[ -n "$opt_fetch_reconverse_tag" ]]; then
661+
CMAKE_EXTRA_ARGS+=(-DAUTOFETCH_RECONVERSE_TAG="$opt_fetch_reconverse_tag")
662+
fi
663+
if [[ -n "$opt_fetch_reconverse_dir" ]]; then
664+
CMAKE_EXTRA_ARGS+=(-DFETCHCONTENT_SOURCE_DIR_RECONVERSE="$opt_fetch_reconverse_dir")
665+
fi
666+
if (( ${#opt_cmake_extra_args[@]} > 0 )); then
667+
CMAKE_EXTRA_ARGS+=("${opt_cmake_extra_args[@]}")
668+
fi
669+
641670
CC=$opt_CC CXX=$opt_CXX FC=$opt_FC cmake "$my_srcdir" \
642671
-G "Unix Makefiles" \
643672
-DARCH="$opt_arch" \
@@ -675,6 +704,7 @@ CC=$opt_CC CXX=$opt_CXX FC=$opt_FC cmake "$my_srcdir" \
675704
-DQLOGIC="$opt_qlogic" \
676705
-DRANDOMIZED_MSGQ="$opt_randomized_msgq" \
677706
-DRECONVERSE="$opt_reconverse" \
707+
-DRECONVERSE_AUTOFETCH_LCI2="$opt_reconverse_fetch_lci" \
678708
-DREFNUM_TYPE="$opt_refnum_type" \
679709
-DREPLAY="$opt_replay" \
680710
-DSHRINKEXPAND="$opt_shrinkexpand" \
@@ -688,7 +718,8 @@ CC=$opt_CC CXX=$opt_CXX FC=$opt_FC cmake "$my_srcdir" \
688718
-DTRACING_COMMTHREAD="$opt_tracing_commthread" \
689719
-DCXI="$opt_cxi" \
690720
-DCMK_BUILD_OFI="$opt_build_ofi" \
691-
-DZLIB="$opt_zlib"
721+
-DZLIB="$opt_zlib" \
722+
"${CMAKE_EXTRA_ARGS[@]}"
692723

693724

694725
# Run build step

cmake/converse.cmake

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ set(conv-core-cxx-sources
5959
src/conv-core/hrctimer.C
6060
)
6161

62-
set(reconverse-h-sources
63-
reconverse/include/converse.h)
64-
6562
#set(reconverse-comm-backend-sources
6663
# reconverse/comm_backend/comm_backend_internal.h
6764
# reconverse/comm_backend/comm_backend.h)
@@ -237,13 +234,9 @@ file(WRITE ${CMAKE_BINARY_DIR}/include/topomanager_config.h "// empty\n" )
237234
# )
238235
# add_dependencies(converse hwloc)
239236

240-
add_subdirectory(reconverse)
241-
# add_dependencies(converse reconverse)
242-
243237
add_library(charm_cxx_utils STATIC
244238
${conv-util-cxx-sources})
245239

246-
add_library(converse INTERFACE)
247240

248241
add_library(topomanager STATIC
249242
${tmgr-cxx-sources}
@@ -253,12 +246,14 @@ target_include_directories(topomanager PUBLIC
253246
src/util/topomanager
254247
${CMAKE_BINARY_DIR}/include)
255248

256-
target_link_libraries(converse INTERFACE
257-
reconverse
258-
topomanager
259-
charm_cxx_utils
260-
hwloc
261-
)
249+
# add_library(converse INTERFACE)
250+
# target_link_libraries(converse INTERFACE
251+
# reconverse
252+
# topomanager
253+
# charm_cxx_utils
254+
# )
255+
add_custom_target(converse)
256+
add_dependencies(converse reconverse topomanager charm_cxx_utils)
262257

263258
#file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include/comm_backend)
264259

@@ -276,13 +271,10 @@ foreach(filename
276271
${conv-util-h-sources}
277272
${conv-ldb-h-sources}
278273
${tmgr-h-sources}
279-
${reconverse-h-sources}
280274
)
281275
configure_file(${filename} ${CMAKE_BINARY_DIR}/include/ COPYONLY)
282276
endforeach()
283277

284-
285-
286278
# target_include_directories(converse PRIVATE src/arch/util) # for machine*.*
287279
# target_include_directories(converse PRIVATE src/util) # for sockRoutines.C
288280
# target_include_directories(converse PRIVATE src/conv-core src/util/topomanager src/ck-ldb src/ck-perf src/ck-cp)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# This directory is solely for fetching reconverse.
2+
3+
set_directory_properties(PROPERTIES
4+
RULE_LAUNCH_COMPILE ""
5+
COMPILE_OPTIONS ""
6+
COMPILE_DEFINITIONS ""
7+
INCLUDE_DIRECTORIES ""
8+
)
9+
10+
set(AUTOFETCH_RECONVERSE_TAG
11+
main
12+
CACHE STRING "The tag to fetch for reconverse")
13+
14+
include(FetchContent)
15+
FetchContent_Declare(
16+
reconverse
17+
GIT_REPOSITORY https://github.com/charmplusplus/reconverse.git
18+
GIT_TAG ${AUTOFETCH_RECONVERSE_TAG}
19+
)
20+
21+
# Set cmake variables for reconverse
22+
set(_save_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
23+
set(BUILD_SHARED_LIBS ON CACHE INTERNAL "")
24+
25+
FetchContent_MakeAvailable(reconverse)
26+
27+
set(BUILD_SHARED_LIBS ${_save_BUILD_SHARED_LIBS} CACHE INTERNAL "")
28+
29+
configure_file(${reconverse_SOURCE_DIR}/include/converse.h ${CMAKE_BINARY_DIR}/include/ COPYONLY)

0 commit comments

Comments
 (0)