Skip to content

Commit a4a29a2

Browse files
authored
Merge pull request #2221 from DARMA-tasking/2216-fmt-library-incompatibilities
2216: Allow `fmt` to be used as external lib
2 parents 86a399f + 4a64c6e commit a4a29a2

File tree

68 files changed

+318
-54
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+318
-54
lines changed

ci/azure/azure-clang-10-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 4
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-clang-11-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 1

ci/azure/azure-clang-12-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-clang-13-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-clang-14-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-clang-9-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-clang-alpine-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 1
4950
VT_FCONTEXT: 0

ci/azure/azure-gcc-10-ubuntu-openmpi.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 4
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-gcc-11-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 0
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-gcc-12-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-gcc-8-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 0
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 0
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-gcc-9-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 1
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-intel-oneapi-icpc-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 1
4545
VT_EXTENDED_TESTS: 0
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-intel-oneapi-icpx-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 0
4545
VT_EXTENDED_TESTS: 0
4646
VT_TESTS_NUM_NODES: 2
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-nvidia-11-2-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 0
4545
VT_EXTENDED_TESTS: 0
4646
VT_TESTS_NUM_NODES: 4
47+
VT_EXTERNAL_FMT: 1
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/azure/azure-nvidia-12-ubuntu-mpich.yml

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ variables:
4444
VT_POOL: 0
4545
VT_EXTENDED_TESTS: 0
4646
VT_TESTS_NUM_NODES: 4
47+
VT_EXTERNAL_FMT: 0
4748
VT_UNITY_BUILD: 1
4849
VT_PRODUCTION_BUILD: 0
4950
VT_FCONTEXT: 0

ci/build_cpp.sh

+1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ cmake -G "${CMAKE_GENERATOR:-Ninja}" \
126126
-Dvt_ci_build="${VT_CI_BUILD:-0}" \
127127
-Dvt_debug_verbose="${VT_DEBUG_VERBOSE:-0}" \
128128
-Dvt_tests_num_nodes="${VT_TESTS_NUM_NODES:-}" \
129+
-Dvt_external_fmt="${VT_EXTERNAL_FMT:-0}" \
129130
-Dvt_no_color_enabled="${VT_NO_COLOR_ENABLED:-0}" \
130131
-DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \
131132
-DBUILD_SHARED_LIBS="${BUILD_SHARED_LIBS:-0}" \

ci/build_vt_sample.sh

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ then
5050
-Dvt_trace_only="1" \
5151
-Dvt_build_examples="0" \
5252
-Dvt_build_tests="0" \
53+
-Dvt_external_fmt="${VT_EXTERNAL_FMT:-0}" \
5354
-DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \
5455
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 \
5556
-DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-Release}" \

ci/deps/fmt.sh

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
3+
set -exo pipefail
4+
5+
if test $# -lt 1
6+
then
7+
echo "usage: ./$0 <fmt-version> <make_flags>"
8+
exit 1
9+
fi
10+
11+
fmt_version=$1
12+
13+
base_dir=$(pwd)
14+
15+
git clone https://github.com/fmtlib/fmt.git
16+
cd fmt
17+
git checkout ${fmt_version}
18+
mkdir build && cd build
19+
cmake .. -D FMT_TEST=OFF
20+
make ${make_flags}
21+
make install
22+
cd ${base_dir}
23+
rm -rf fmt

ci/docker/ubuntu-nvidia-cpp.dockerfile

+8
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ ENV LESSCHARSET=utf-8
5151
COPY ./ci/deps/mpich.sh mpich.sh
5252
RUN ./mpich.sh 3.3.2 -j4
5353

54+
ARG external_fmt
55+
COPY ./ci/deps/fmt.sh fmt.sh
56+
57+
RUN if test ${external_fmt} -eq 1; then \
58+
chmod +x ./fmt.sh && \
59+
./fmt.sh 7.1.3 -j4; \
60+
fi
61+
5462
RUN mkdir -p /nvcc_wrapper/build && \
5563
wget https://raw.githubusercontent.com/kokkos/kokkos/master/bin/nvcc_wrapper -P /nvcc_wrapper/build && \
5664
chmod +x /nvcc_wrapper/build/nvcc_wrapper

cmake/configure_options.cmake

+9
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,15 @@ define_option(vt_build_tests "tests" "Build VT tests" ON empty_feature)
151151
define_option(vt_build_tools "tools" "Build VT tools" ON empty_feature)
152152
define_option(vt_build_examples "examples" "Build VT examples" ON empty_feature)
153153

154+
option(vt_external_fmt "Build VT with external fmt" OFF)
155+
if(${vt_external_fmt})
156+
message(STATUS "Building vt with external fmt library")
157+
set(vt_feature_cmake_external_fmt "1")
158+
else()
159+
message(STATUS "Building vt with included fmt library")
160+
set(vt_feature_cmake_external_fmt "0")
161+
endif()
162+
154163
list(POP_BACK CMAKE_MESSAGE_INDENT)
155164

156165
##########################################################################################################

cmake/link_vt.cmake

+11-3
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,17 @@ function(link_target_with_vt)
170170
if (${ARG_DEBUG_LINK})
171171
message(STATUS "link_target_with_vt: fmt=${ARG_LINK_FMT}")
172172
endif()
173-
target_link_libraries(
174-
${ARG_TARGET} PUBLIC ${ARG_BUILD_TYPE} ${FMT_LIBRARY}
175-
)
173+
174+
if(${vt_external_fmt})
175+
target_link_libraries(
176+
${ARG_TARGET} PUBLIC ${ARG_BUILD_TYPE} fmt::fmt
177+
)
178+
else()
179+
target_link_libraries(
180+
${ARG_TARGET} PUBLIC ${ARG_BUILD_TYPE} ${FMT_LIBRARY}
181+
)
182+
endif()
183+
176184
endif()
177185

178186
if (NOT DEFINED ARG_LINK_ENG_FORMAT AND ${ARG_DEFAULT_LINK_SET} OR ARG_LINK_ENG_FORMAT)

cmake/load_bundled_libraries.cmake

+18-4
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,24 @@ endif()
2020
# CLI11 always included in the build
2121
add_subdirectory(${PROJECT_LIB_DIR}/CLI)
2222

23-
# fmt always included in the build
24-
set(FMT_LIBRARY fmt)
25-
add_subdirectory(${PROJECT_LIB_DIR}/fmt)
26-
set_darma_compiler_flags(${FMT_LIBRARY})
23+
# use included fmt or external one
24+
if(${vt_external_fmt})
25+
# user should provide 'fmt_DIR' or 'fmt_ROOT' to CMake (unless fmt is installed in system libs)
26+
if(fmt_ROOT)
27+
message(STATUS "vt_external_fmt = ON. Using fmt located at ${fmt_ROOT}")
28+
elseif(fmt_DIR)
29+
message(STATUS "vt_external_fmt = ON. Using fmt located at ${fmt_DIR}")
30+
else()
31+
message(STATUS "vt_external_fmt = ON but neither fmt_DIR nor fmt_ROOT is provided!")
32+
endif()
33+
find_package(fmt 7.1.0 REQUIRED)
34+
35+
else()
36+
set(FMT_LIBRARY fmt)
37+
add_subdirectory(${PROJECT_LIB_DIR}/fmt)
38+
set_darma_compiler_flags(${FMT_LIBRARY})
39+
endif()
40+
2741

2842
# EngFormat-Cpp always included in the build
2943
set(ENG_FORMAT_LIBRARY EngFormat-Cpp)

cmake/vtConfig.cmake.in

+5
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,9 @@ endif()
2626
set (VT_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include")
2727
set (VT_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
2828

29+
if (@vt_external_fmt@)
30+
set (fmt_DIR @fmt_DIR@)
31+
find_dependency(fmt REQUIRED HINTS @fmt_DIR@)
32+
endif()
33+
2934
set(VT_HAS_FMT "TRUE")

cmake_config.h.in

+17-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
#define vt_feature_cmake_production_build @vt_feature_cmake_production_build@
6666
#define vt_feature_cmake_debug_verbose @vt_feature_cmake_debug_verbose@
6767
#define vt_feature_cmake_rdma_tests @vt_feature_cmake_rdma_tests@
68-
68+
#define vt_feature_cmake_external_fmt @vt_feature_cmake_external_fmt@
6969

7070
#define vt_detected_max_num_nodes @cmake_detected_max_num_nodes@
7171

@@ -91,3 +91,19 @@
9191
#cmakedefine vt_has_sysconf
9292
#cmakedefine vt_has_libunwind_h
9393
#cmakedefine vt_has_execinfo_h
94+
95+
#if vt_feature_cmake_external_fmt
96+
#define INCLUDE_FMT_CORE <fmt/core.h>
97+
#define INCLUDE_FMT_FORMAT <fmt/format.h>
98+
#define INCLUDE_FMT_OSTREAM <fmt/ostream.h>
99+
100+
#define VT_FMT_NAMESPACE_BEGIN namespace fmt {
101+
#define VT_FMT_NAMESPACE_END }
102+
#else
103+
#define INCLUDE_FMT_CORE <fmt-vt/core.h>
104+
#define INCLUDE_FMT_FORMAT <fmt-vt/format.h>
105+
#define INCLUDE_FMT_OSTREAM <fmt-vt/ostream.h>
106+
107+
#define VT_FMT_NAMESPACE_BEGIN namespace fmt { inline namespace vt {
108+
#define VT_FMT_NAMESPACE_END } }
109+
#endif

docker-compose.yml

+2
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ x-vtopts: &vtopts
112112
VT_CI_BUILD: ${VT_CI_BUILD:-0}
113113
VT_DEBUG_VERBOSE: ${VT_DEBUG_VERBOSE:-0}
114114
VT_TESTS_NUM_NODES: ${VT_TESTS_NUM_NODES:-}
115+
VT_EXTERNAL_FMT: ${VT_EXTERNAL_FMT:-0}
115116
VT_NO_COLOR_ENABLED: ${VT_NO_COLOR:-0}
116117
BUILD_SHARED_LIBS: ${VT_BUILD_SHARED_LIBS:-0}
117118
VT_INCLUSION_TYPE: ${VT_INCLUSION:-TPL}
@@ -138,6 +139,7 @@ services:
138139
ubuntu: ${UBUNTU}
139140
ubsan_enabled: ${VT_UBSAN:-0}
140141
zoltan_enabled: ${VT_ZOLTAN:-0}
142+
external_fmt: ${VT_EXTERNAL_FMT:-0}
141143
cache_from:
142144
- ${REPO}:${ARCH}-ubuntu-${UBUNTU}-${HOST_COMPILER}-${COMPILER}-cpp
143145
ulimits: &ulimits

scripts/workflow-azure-template.yml

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ variables:
3232
VT_POOL: [% vt_pool %]
3333
VT_EXTENDED_TESTS: [% vt_extended_tests %]
3434
VT_TESTS_NUM_NODES: [% vt_tests_num_nodes %]
35+
VT_EXTERNAL_FMT: [% vt_external_fmt %]
3536
VT_UNITY_BUILD: [% vt_unity_build %]
3637
VT_PRODUCTION_BUILD: [% vt_production_build %]
3738
VT_FCONTEXT: [% vt_fcontext %]

scripts/workflows-azure.ini

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ vt_fcontext = 0
1717
vt_zoltan = 0
1818
vt_ci_build = 1
1919
vt_tests_num_nodes = 2
20+
vt_external_fmt = 0
2021
test_lb_schema = 0
2122
ulimit_core = 0
2223
vt_code_coverage = 0
@@ -93,6 +94,7 @@ vt_diagnostics = 0
9394
vt_trace = 1
9495
vt_pool = 0
9596
vt_tests_num_nodes = 4
97+
vt_external_fmt = 1
9698

9799
[PR-tests-gcc-8]
98100
test_configuration = "gcc-8, ubuntu, mpich, address sanitizer"

src/vt/collective/reduce/reduce_manager.h

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
#include "vt/collective/reduce/reduce_scope.h"
4848
#include "vt/collective/tree/tree.h"
4949

50+
#include <memory>
5051
namespace vt { namespace collective { namespace reduce {
5152

5253
struct Reduce;

src/vt/configs/debug/debug_fmt.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646

4747
#include "vt/config.h"
4848

49-
#include <fmt-vt/core.h>
49+
#include INCLUDE_FMT_CORE
5050

5151
#include <iosfwd>
5252

src/vt/configs/debug/debug_print.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
#include "vt/configs/debug/debug_colorize.h"
5050
#include "vt/configs/debug/debug_var_unused.h"
5151

52-
#include <fmt-vt/core.h>
52+
#include INCLUDE_FMT_CORE
5353

5454
/*
5555
=== Debug file/line/func functionality ===

src/vt/configs/error/assert_out.impl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
#include <string>
5757
#include <cassert>
5858

59-
#include <fmt-vt/core.h>
59+
#include INCLUDE_FMT_CORE
6060

6161
namespace vt { namespace debug { namespace assert {
6262

src/vt/configs/error/assert_out_info.impl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
#include <string>
5858
#include <sstream>
5959

60-
#include <fmt-vt/core.h>
60+
#include INCLUDE_FMT_CORE
6161

6262
namespace vt { namespace debug { namespace assert {
6363

src/vt/configs/error/error.impl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
#include <tuple>
5656
#include <type_traits>
5757

58-
#include <fmt-vt/core.h>
58+
#include INCLUDE_FMT_CORE
5959

6060
namespace vt { namespace error {
6161

src/vt/configs/error/keyval_printer.impl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
#include <string>
5454
#include <vector>
5555

56-
#include <fmt-vt/core.h>
56+
#include INCLUDE_FMT_CORE
5757

5858
namespace vt { namespace util { namespace error {
5959

src/vt/configs/error/pretty_print_message.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
#include <string>
5151
#include <unistd.h> // gethostname
5252

53-
#include <fmt-vt/core.h>
53+
#include INCLUDE_FMT_CORE
5454

5555
namespace vt { namespace debug {
5656

0 commit comments

Comments
 (0)