diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 549dd9b8a..14c89c344 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -110,7 +110,7 @@ if(MSVC) # Avoid GCC/Clang-specific flags on MSVC. # C++17 is already enforced via CMAKE_CXX_STANDARD/target features. else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror=unused-variable") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra -Wno-unused-parameter -Wno-empty-body") endif() if (APPLE) @@ -191,7 +191,7 @@ endmacro() macro(install_graphar_target target) # install - install(TARGETS ${target} + install(TARGETS ${target} graphar_thirdparty EXPORT graphar-targets ARCHIVE DESTINATION lib LIBRARY DESTINATION lib @@ -288,8 +288,19 @@ function(graphar_create_merged_static_lib output_target) add_dependencies(${output_target} ${output_target}_merge) endfunction() +macro(build_graphar_thirdparty) + file(GLOB_RECURSE THIRDPARTY_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/mini-yaml/yaml/*.cpp) + add_library(graphar_thirdparty STATIC ${THIRDPARTY_SRC_FILES}) + target_include_directories(graphar_thirdparty PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty) + target_compile_features(graphar_thirdparty PRIVATE cxx_std_17) + if(NOT MSVC) + target_compile_options(graphar_thirdparty PRIVATE -fPIC -w) + endif() +endmacro() + macro(build_graphar) - file(GLOB_RECURSE CORE_SRC_FILES "src/graphar/*.cc" ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/mini-yaml/yaml/*.cpp) + build_graphar_thirdparty() + file(GLOB_RECURSE CORE_SRC_FILES "src/graphar/*.cc") if(GRAPHAR_BUILD_STATIC) add_library(graphar STATIC ${CORE_SRC_FILES}) else() @@ -298,7 +309,11 @@ macro(build_graphar) install_graphar_target(graphar) target_compile_features(graphar PRIVATE cxx_std_${GAR_CXX_STANDARD}) target_include_directories(graphar PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty) - target_link_libraries(graphar PRIVATE ${CMAKE_DL_LIBS}) + if(GRAPHAR_BUILD_STATIC) + target_link_libraries(graphar PUBLIC graphar_thirdparty ${CMAKE_DL_LIBS}) + else() + target_link_libraries(graphar PRIVATE graphar_thirdparty ${CMAKE_DL_LIBS}) + endif() if(APPLE) if(USE_STATIC_ARROW) @@ -346,7 +361,8 @@ macro(build_graphar) endmacro() macro(build_graphar_with_arrow_bundled) - file(GLOB_RECURSE CORE_SRC_FILES "src/graphar/*.cc" ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/mini-yaml/yaml/*.cpp) + build_graphar_thirdparty() + file(GLOB_RECURSE CORE_SRC_FILES "src/graphar/*.cc") if(GRAPHAR_BUILD_STATIC) add_library(graphar STATIC ${CORE_SRC_FILES}) else() @@ -356,7 +372,11 @@ macro(build_graphar_with_arrow_bundled) target_compile_features(graphar PRIVATE cxx_std_${GAR_CXX_STANDARD}) target_include_directories(graphar PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty) target_include_directories(graphar SYSTEM BEFORE PRIVATE ${GAR_ARROW_INCLUDE_DIR}) - target_link_libraries(graphar PRIVATE ${CMAKE_DL_LIBS}) + if(GRAPHAR_BUILD_STATIC) + target_link_libraries(graphar PUBLIC graphar_thirdparty ${CMAKE_DL_LIBS}) + else() + target_link_libraries(graphar PRIVATE graphar_thirdparty ${CMAKE_DL_LIBS}) + endif() set(GAR_BUNDLED_DEPS_STATIC_LIBS) list(APPEND GAR_BUNDLED_DEPS_STATIC_LIBS diff --git a/cpp/examples/mid_level_reader_example.cc b/cpp/examples/mid_level_reader_example.cc index 1299afd85..ead6a8f9d 100644 --- a/cpp/examples/mid_level_reader_example.cc +++ b/cpp/examples/mid_level_reader_example.cc @@ -131,7 +131,8 @@ void vertex_property_chunk_reader( specific_table = specific_result.value(); std::cout << "rows number of specified vertex properties chunk: " << specific_table->num_rows() << std::endl; - ASSERT(specific_table->num_columns() == specific_cols.size() + 1); + ASSERT(specific_table->num_columns() == + static_cast(specific_cols.size()) + 1); std::cout << "schema of specified vertex properties chunk: " << std::endl << specific_table->schema()->ToString() << std::endl; index_col = @@ -159,7 +160,8 @@ void vertex_property_chunk_reader( specific_table = specific_result.value(); std::cout << "rows number of specified vertex properties chunk (V2): " << specific_table->num_rows() << std::endl; - ASSERT(specific_table->num_columns() == specific_cols.size() + 1); + ASSERT(specific_table->num_columns() == + static_cast(specific_cols.size()) + 1); std::cout << "schema of specified vertex properties chunk (V2): " << std::endl << specific_table->schema()->ToString() << std::endl; index_col = diff --git a/cpp/src/graphar/arrow/chunk_reader.cc b/cpp/src/graphar/arrow/chunk_reader.cc index f47d1374f..030d595d4 100644 --- a/cpp/src/graphar/arrow/chunk_reader.cc +++ b/cpp/src/graphar/arrow/chunk_reader.cc @@ -549,6 +549,23 @@ AdjListArrowChunkReader::AdjListArrowChunkReader( base_dir_(other.base_dir_), fs_(other.fs_) {} +AdjListArrowChunkReader& AdjListArrowChunkReader::operator=( + const AdjListArrowChunkReader& other) { + if (this != &other) { + edge_info_ = other.edge_info_; + adj_list_type_ = other.adj_list_type_; + vertex_chunk_index_ = other.vertex_chunk_index_; + chunk_index_ = other.chunk_index_; + seek_offset_ = other.seek_offset_; + chunk_table_ = nullptr; + vertex_chunk_num_ = other.vertex_chunk_num_; + chunk_num_ = other.chunk_num_; + base_dir_ = other.base_dir_; + fs_ = other.fs_; + } + return *this; +} + Status AdjListArrowChunkReader::seek_src(IdType id) { if (adj_list_type_ != AdjListType::unordered_by_source && adj_list_type_ != AdjListType::ordered_by_source) { @@ -879,6 +896,27 @@ AdjListPropertyArrowChunkReader::AdjListPropertyArrowChunkReader( base_dir_(other.base_dir_), fs_(other.fs_) {} +AdjListPropertyArrowChunkReader& AdjListPropertyArrowChunkReader::operator=( + const AdjListPropertyArrowChunkReader& other) { + if (this != &other) { + edge_info_ = other.edge_info_; + property_group_ = other.property_group_; + adj_list_type_ = other.adj_list_type_; + prefix_ = other.prefix_; + vertex_chunk_index_ = other.vertex_chunk_index_; + chunk_index_ = other.chunk_index_; + seek_offset_ = other.seek_offset_; + schema_ = other.schema_; + chunk_table_ = nullptr; + filter_options_ = other.filter_options_; + vertex_chunk_num_ = other.vertex_chunk_num_; + chunk_num_ = other.chunk_num_; + base_dir_ = other.base_dir_; + fs_ = other.fs_; + } + return *this; +} + Status AdjListPropertyArrowChunkReader::seek_src(IdType id) { if (adj_list_type_ != AdjListType::unordered_by_source && adj_list_type_ != AdjListType::ordered_by_source) { diff --git a/cpp/src/graphar/arrow/chunk_reader.h b/cpp/src/graphar/arrow/chunk_reader.h index de2cf41f9..779f85968 100644 --- a/cpp/src/graphar/arrow/chunk_reader.h +++ b/cpp/src/graphar/arrow/chunk_reader.h @@ -292,6 +292,11 @@ class AdjListArrowChunkReader { */ AdjListArrowChunkReader(const AdjListArrowChunkReader& other); + /** + * @brief Copy assignment operator. + */ + AdjListArrowChunkReader& operator=(const AdjListArrowChunkReader& other); + /** * @brief Sets chunk position indicator for reader by source vertex id. * @@ -494,6 +499,12 @@ class AdjListPropertyArrowChunkReader { */ AdjListPropertyArrowChunkReader(const AdjListPropertyArrowChunkReader& other); + /** + * @brief Copy assignment operator. + */ + AdjListPropertyArrowChunkReader& operator=( + const AdjListPropertyArrowChunkReader& other); + /** * @brief Sets chunk position indicator for reader by source vertex id. * diff --git a/cpp/src/graphar/status.h b/cpp/src/graphar/status.h index 941ef22fc..ae89fde83 100644 --- a/cpp/src/graphar/status.h +++ b/cpp/src/graphar/status.h @@ -164,8 +164,7 @@ class Status { template static Status FromArgs(StatusCode code, Args... args) { - return Status(code, - std::move(util::StringBuilder(std::forward(args)...))); + return Status(code, util::StringBuilder(std::forward(args)...)); } /** Returns an error status when some IO-related operation failed. */ diff --git a/rust/build.rs b/rust/build.rs index 4f3f45e0a..55e906363 100644 --- a/rust/build.rs +++ b/rust/build.rs @@ -30,6 +30,7 @@ fn link_libraries() { .expect("Arrow development files not found via pkg-config. Set PKG_CONFIG_PATH if needed."); println!("cargo:rustc-link-lib=graphar"); + println!("cargo:rustc-link-lib=graphar_thirdparty"); } fn build_ffi(bridge_file: &str, out_name: &str, source_file: &str, include_paths: &[PathBuf]) {