@@ -104,11 +104,13 @@ if(NOT (CMAKE_CXX_COMPILER_LAUNCHER MATCHES "ccache") AND NOT (CMAKE_C_COMPILER_
104104 endif (ccache_EXECUTABLE )
105105endif ()
106106
107+ set (GAR_CXX_STANDARD 17)
108+
107109if (MSVC )
108110 # Avoid GCC/Clang-specific flags on MSVC.
109111 # C++17 is already enforced via CMAKE_CXX_STANDARD/target features.
110112else ()
111- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 - Wall -Werror=unused-variable" )
113+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror=unused-variable" )
112114endif ()
113115
114116if (APPLE )
@@ -147,7 +149,6 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
147149set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /cmake)
148150include_directories (${CMAKE_CURRENT_SOURCE_DIR} )
149151add_library (${PROJECT_NAME} INTERFACE )
150- target_compile_features (${PROJECT_NAME} INTERFACE cxx_std_17 )
151152target_include_directories (
152153 ${PROJECT_NAME}
153154 INTERFACE
@@ -295,7 +296,7 @@ macro(build_graphar)
295296 add_library (graphar SHARED ${CORE_SRC_FILES} )
296297 endif ()
297298 install_graphar_target (graphar )
298- target_compile_features (graphar PRIVATE cxx_std_17 )
299+ target_compile_features (graphar PRIVATE cxx_std_${GAR_CXX_STANDARD} )
299300 target_include_directories (graphar PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /thirdparty )
300301 target_link_libraries (graphar PRIVATE ${CMAKE_DL_LIBS} )
301302
@@ -352,7 +353,7 @@ macro(build_graphar_with_arrow_bundled)
352353 add_library (graphar SHARED ${CORE_SRC_FILES} )
353354 endif ()
354355 install_graphar_target (graphar )
355- target_compile_features (graphar PRIVATE cxx_std_17 )
356+ target_compile_features (graphar PRIVATE cxx_std_${GAR_CXX_STANDARD} )
356357 target_include_directories (graphar PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /thirdparty )
357358 target_include_directories (graphar SYSTEM BEFORE PRIVATE ${GAR_ARROW_INCLUDE_DIR} )
358359 target_link_libraries (graphar PRIVATE ${CMAKE_DL_LIBS} )
@@ -426,7 +427,13 @@ if (BUILD_ARROW_FROM_SOURCE)
426427 endif ()
427428 endif ()
428429 find_package (CURL REQUIRED )
429-
430+ if (DEFINED ENV{GRAPHAR_ARROW_VERSION})
431+ if ($ENV{GRAPHAR_ARROW_VERSION} VERSION_GREATER_EQUAL "23.0.0" )
432+ set (GAR_CXX_STANDARD 20)
433+ endif ()
434+ else ()
435+ set (GAR_CXX_STANDARD 20) # Default Arrow version is 23.0.0 need C++20
436+ endif ()
430437 include (apache-arrow )
431438 build_arrow ()
432439 add_definitions (-DARROW_ORC ) # Add macro, otherwise inconsistent in build phase with not from source.
@@ -460,9 +467,17 @@ else()
460467 message (FATAL_ERROR "parquet is required, please install it and retry" )
461468 endif ()
462469
470+ # Update C++ standard based on detected system Arrow version
471+ if (Arrow_VERSION VERSION_GREATER_EQUAL "23.0.0" )
472+ set (GAR_CXX_STANDARD 20)
473+ message (STATUS "Arrow ${Arrow_VERSION} detected" )
474+ endif ()
475+
463476 build_graphar ()
464477endif ()
465478
479+ message (STATUS "[graphar] using C++ standard: ${GAR_CXX_STANDARD} " )
480+
466481# ------------------------------------------------------------------------------
467482# build examples
468483# ------------------------------------------------------------------------------
@@ -564,7 +579,7 @@ if (BUILD_TESTS)
564579 set (multiValueArgs SRCS)
565580 cmake_parse_arguments (add_test "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
566581 add_executable (${target} ${add_test_SRCS} )
567- target_compile_features (${target} PRIVATE cxx_std_17 )
582+ target_compile_features (${target} PRIVATE cxx_std_${GAR_CXX_STANDARD} )
568583 target_include_directories (${target} PRIVATE ${PROJECT_SOURCE_DIR} /thirdparty )
569584 target_link_libraries (${target} PRIVATE Catch2::Catch2WithMain graphar ${CMAKE_DL_LIBS} )
570585 if (BUILD_ARROW_FROM_SOURCE)
@@ -630,7 +645,7 @@ if (BUILD_BENCHMARKS)
630645 set (multiValueArgs SRCS)
631646 cmake_parse_arguments (add_test "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
632647 add_executable (${target} ${add_test_SRCS} )
633- target_compile_features (${target} PRIVATE cxx_std_17 )
648+ target_compile_features (${target} PRIVATE cxx_std_${GAR_CXX_STANDARD} )
634649 target_include_directories (${target} PRIVATE ${PROJECT_SOURCE_DIR} /thirdparty )
635650 target_link_libraries (${target} PRIVATE benchmark::benchmark_main graphar ${CMAKE_DL_LIBS} )
636651 if (BUILD_ARROW_FROM_SOURCE)
0 commit comments