This is an automated email from the ASF dual-hosted git repository.
xiaokang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-graphar.git
The following commit(s) were added to refs/heads/main by this push:
new d1fe7f99 refactor(build): restructure CMake files into subdirectories
(#877)
d1fe7f99 is described below
commit d1fe7f997773fc0f0bfebcd2a55ea0ce7f5d084d
Author: Jason Yao <[email protected]>
AuthorDate: Mon Mar 2 14:47:27 2026 +0800
refactor(build): restructure CMake files into subdirectories (#877)
* refactor(build): restructure CMake files into subdirectories
Signed-off-by: syaojun <[email protected]>
* fix: enable rust compile success
Signed-off-by: syaojun <[email protected]>
* fix: explicit compile benchmark
Signed-off-by: syaojun <[email protected]>
* fix: add benchmark directory path
Signed-off-by: syaojun <[email protected]>
* fix: add double dash for link flags
Signed-off-by: syaojun <[email protected]>
* fix: remove reduandant test and benckmark
Signed-off-by: syaojun <[email protected]>
---------
Signed-off-by: syaojun <[email protected]>
---
.github/workflows/ci.yml | 6 +-
cpp/CMakeLists.txt | 335 +++---------------------------------------
cpp/benchmarks/CMakeLists.txt | 53 +++++++
cpp/examples/CMakeLists.txt | 69 +++++++++
cpp/src/CMakeLists.txt | 138 +++++++++++++++++
cpp/test/CMakeLists.txt | 83 +++++++++++
rust/build.rs | 2 +
7 files changed, 369 insertions(+), 317 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5d2cba9e..efc0d62d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -133,7 +133,7 @@ jobs:
ctest --output-on-failure
- name: Benchmark
- working-directory: "cpp/build"
+ working-directory: "cpp/build/benchmarks"
run: |
./graph_info_benchmark
./arrow_chunk_reader_benchmark
@@ -165,7 +165,7 @@ jobs:
popd
- name: Benchmark-release
- working-directory: "cpp/build-release"
+ working-directory: "cpp/build-release/benchmarks"
run: |
./graph_info_benchmark
./arrow_chunk_reader_benchmark
@@ -245,7 +245,7 @@ jobs:
popd
- name: Benchmark-release
- working-directory: "cpp/build-release"
+ working-directory: "cpp/build-release/benchmarks"
run: |
./graph_info_benchmark
./arrow_chunk_reader_benchmark
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index ef53c556..f1fa70e9 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -189,17 +189,6 @@ macro(find_yaml_cpp)
set(CMAKE_WARN_DEPRECATED ON CACHE BOOL "" FORCE)
endmacro()
-macro(install_graphar_target target)
- # install
- install(TARGETS ${target} graphar_thirdparty
- EXPORT graphar-targets
- ARCHIVE DESTINATION lib
- LIBRARY DESTINATION lib
- RUNTIME DESTINATION bin
- INCLUDES DESTINATION include
- )
-endmacro()
-
# Implementations of lisp "car" and "cdr" functions
macro(GRAPHAR_CAR var)
set(${var} ${ARGV1})
@@ -288,149 +277,6 @@ 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)
- build_graphar_thirdparty()
- file(GLOB_RECURSE CORE_SRC_FILES "src/graphar/*.cc")
- if(GRAPHAR_BUILD_STATIC)
- add_library(graphar STATIC ${CORE_SRC_FILES})
- else()
- add_library(graphar SHARED ${CORE_SRC_FILES})
- endif()
- install_graphar_target(graphar)
- target_compile_features(graphar PRIVATE cxx_std_${GAR_CXX_STANDARD})
- target_include_directories(graphar PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty)
- 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)
- target_link_libraries(graphar PRIVATE -Wl,-force_load
- Arrow::arrow_static
- Parquet::parquet_static
- ArrowDataset::arrow_dataset_static
- ArrowAcero::arrow_acero_static)
- else()
- target_link_libraries(graphar PRIVATE -Wl,-force_load
Arrow::arrow_shared
- Parquet::parquet_shared
- ArrowDataset::arrow_dataset_shared
- ArrowAcero::arrow_acero_shared)
- endif()
- elseif(MSVC)
- # MSVC doesn't support GNU ld-style -Wl flags. For shared libraries we
- # don't need whole-archive semantics.
- if(USE_STATIC_ARROW)
- target_link_libraries(graphar PRIVATE
- Arrow::arrow_static
- Parquet::parquet_static
- ArrowDataset::arrow_dataset_static
- ArrowAcero::arrow_acero_static)
- else()
- target_link_libraries(graphar PRIVATE
- Arrow::arrow_shared
- Parquet::parquet_shared
- ArrowDataset::arrow_dataset_shared
- ArrowAcero::arrow_acero_shared)
- endif()
- else()
- if(USE_STATIC_ARROW)
- target_link_libraries(graphar PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive
- Arrow::arrow_static
- Parquet::parquet_static
- ArrowDataset::arrow_dataset_static
- ArrowAcero::arrow_acero_static -Wl,--no-whole-archive)
- else()
- target_link_libraries(graphar PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive Arrow::arrow_shared
- Parquet::parquet_shared
- ArrowDataset::arrow_dataset_shared
- ArrowAcero::arrow_acero_shared -Wl,--no-whole-archive)
- endif()
- endif()
-endmacro()
-
-macro(build_graphar_with_arrow_bundled)
- build_graphar_thirdparty()
- file(GLOB_RECURSE CORE_SRC_FILES "src/graphar/*.cc")
- if(GRAPHAR_BUILD_STATIC)
- add_library(graphar STATIC ${CORE_SRC_FILES})
- else()
- add_library(graphar SHARED ${CORE_SRC_FILES})
- endif()
- 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_include_directories(graphar SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
- 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
- gar_arrow_static
- gar_arrow_compute_static
- gar_parquet_static
- gar_dataset_static
- gar_acero_static
- gar_arrow_bundled_dependencies_static)
- graphar_car(_FIRST_LIB ${GAR_BUNDLED_DEPS_STATIC_LIBS})
- graphar_cdr(_OTHER_LIBS ${GAR_BUNDLED_DEPS_STATIC_LIBS})
-
- graphar_create_merged_static_lib(graphar_bundled_dependencies
- NAME
- graphar_bundled_dependencies
- ROOT
- ${_FIRST_LIB}
- TO_MERGE
- ${_OTHER_LIBS})
- # We can't use install(TARGETS) here because
- # graphar_bundled_dependencies is an IMPORTED library.
- get_target_property(graphar_bundled_dependencies_path
graphar_bundled_dependencies
- IMPORTED_LOCATION)
- install(FILES ${CMAKE_BINARY_DIR}/${graphar_bundled_dependencies_path}
${INSTALL_IS_OPTIONAL}
- DESTINATION ${CMAKE_INSTALL_LIBDIR})
- string(APPEND ARROW_PC_LIBS_PRIVATE " -lgraphar_bundled_dependencies")
- list(INSERT ARROW_STATIC_INSTALL_INTERFACE_LIBS 0
"graphar_bundled_dependencies")
-
- if(APPLE)
- find_package(Protobuf REQUIRED)
- target_link_libraries(graphar PRIVATE -Wl,-force_load
- graphar_bundled_dependencies
- protobuf::libprotobuf
- "-framework CoreFoundation"
- "-framework Security"
- "-framework Network")
- elseif(MSVC)
- # MSVC doesn't support GNU ld-style -Wl flags.
- target_link_libraries(graphar PRIVATE graphar_bundled_dependencies)
- else()
- target_link_libraries(graphar PRIVATE -Wl,--exclude-libs,ALL
- graphar_bundled_dependencies)
- endif()
-
- # if OpenSSL library exists, link the OpenSSL library.
- # OpenSSL has to be linked after GAR_ARROW_BUNDLED_DEPS_STATIC_LIB
- if(OPENSSL_FOUND)
- target_link_libraries(graphar PUBLIC OpenSSL::SSL)
- endif()
- if (CURL_FOUND)
- target_link_libraries(graphar PUBLIC ${CURL_LIBRARIES})
- endif()
-endmacro()
-
#
------------------------------------------------------------------------------
# building or find third party library
#
------------------------------------------------------------------------------
@@ -455,7 +301,6 @@ if (BUILD_ARROW_FROM_SOURCE)
endif()
build_arrow()
add_definitions(-DARROW_ORC) # Add macro, otherwise inconsistent in build
phase with not from source.
- build_graphar_with_arrow_bundled()
else()
# check if arrow is installed
find_package(Arrow QUIET)
@@ -490,66 +335,35 @@ else()
set(GAR_CXX_STANDARD 20)
message(STATUS "Arrow ${Arrow_VERSION} detected")
endif()
-
- build_graphar()
endif()
message(STATUS "[graphar] using C++ standard: ${GAR_CXX_STANDARD}")
+#
------------------------------------------------------------------------------
+# Build core library
+#
------------------------------------------------------------------------------
+add_subdirectory(src)
+
#
------------------------------------------------------------------------------
# build examples
#
------------------------------------------------------------------------------
if (BUILD_EXAMPLES)
- find_package(Boost REQUIRED COMPONENTS graph)
-
- file(GLOB EXAMPLE_FILES RELATIVE "${PROJECT_SOURCE_DIR}/examples"
"${PROJECT_SOURCE_DIR}/examples/*.cc")
- foreach(f ${EXAMPLE_FILES})
- string(REGEX MATCH "^(.*)\\.[^.]*$" dummy ${f})
- set(E_NAME ${CMAKE_MATCH_1})
- message(STATUS "Found example - " ${E_NAME})
- add_executable(${E_NAME} examples/${E_NAME}.cc)
- target_include_directories(${E_NAME} PRIVATE examples
-
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty
- )
- target_include_directories(${E_NAME} SYSTEM PRIVATE
${Boost_INCLUDE_DIRS})
- target_link_libraries(${E_NAME} PRIVATE graphar ${Boost_LIBRARIES}
${CMAKE_DL_LIBS})
- if (BUILD_ARROW_FROM_SOURCE)
- target_include_directories(${E_NAME} SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
- if (APPLE)
- target_link_libraries(${E_NAME} PRIVATE -Wl,-force_load
${GAR_ARROW_STATIC_LIB}
- "${GAR_PARQUET_STATIC_LIB}"
- "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
- protobuf::libprotobuf
- "-framework CoreFoundation"
- "-framework Security"
- "-framework Network")
- else()
- target_link_libraries(${E_NAME} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive ${GAR_ARROW_STATIC_LIB}
- "${GAR_PARQUET_STATIC_LIB}"
- "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
-Wl,--no-whole-archive)
- endif()
- else()
- if(APPLE)
- if(USE_STATIC_ARROW)
- target_link_libraries(${E_NAME} PRIVATE -Wl,-force_load
- Arrow::arrow_static
- Parquet::parquet_static)
- else()
- target_link_libraries(${E_NAME} PRIVATE Arrow::arrow_shared
- Parquet::parquet_shared)
- endif()
- else()
- if(USE_STATIC_ARROW)
- target_link_libraries(${E_NAME} PRIVATE
-Wl,--exclude-libs,ALL -Wl,--whole-archive
- Arrow::arrow_static
- Parquet::parquet_static -Wl,--no-whole-archive)
- else()
- target_link_libraries(${E_NAME} PRIVATE Arrow::arrow_shared
- Parquet::parquet_shared)
- endif()
- endif()
- endif()
- endforeach()
+ add_subdirectory(examples)
+endif()
+
+#
------------------------------------------------------------------------------
+# Test targets
+#
------------------------------------------------------------------------------
+if (BUILD_TESTS)
+ enable_testing()
+ add_subdirectory(test)
+endif()
+
+#
------------------------------------------------------------------------------
+# Benchmark targets
+#
------------------------------------------------------------------------------
+if (BUILD_BENCHMARKS)
+ add_subdirectory(benchmarks)
endif()
#
------------------------------------------------------------------------------
@@ -585,113 +399,6 @@ install(EXPORT graphar-targets
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/graphar
)
-#
------------------------------------------------------------------------------
-# Test targets
-#
------------------------------------------------------------------------------
-if (BUILD_TESTS)
- find_package(Catch2 3 REQUIRED)
-
- macro(add_test target)
- set(options)
- set(oneValueArgs)
- set(multiValueArgs SRCS)
- cmake_parse_arguments(add_test "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
- add_executable(${target} ${add_test_SRCS})
- target_compile_features(${target} PRIVATE cxx_std_${GAR_CXX_STANDARD})
- target_include_directories(${target} PRIVATE
${PROJECT_SOURCE_DIR}/thirdparty)
- target_link_libraries(${target} PRIVATE Catch2::Catch2WithMain graphar
${CMAKE_DL_LIBS})
- if (BUILD_ARROW_FROM_SOURCE)
- target_include_directories(${target} SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
- if (APPLE)
- target_link_libraries(${target} PRIVATE -Wl,-force_load
gar_arrow_static
- "${GAR_PARQUET_STATIC_LIB}"
- "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
- protobuf::libprotobuf
- "-framework CoreFoundation"
- "-framework Security"
- "-framework Network")
- else()
- target_link_libraries(${target} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive gar_arrow_static
- "${GAR_PARQUET_STATIC_LIB}"
- "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
-Wl,--no-whole-archive)
- endif()
- else()
- if(APPLE)
- if(USE_STATIC_ARROW)
- target_link_libraries(${target} PRIVATE -Wl,-force_load
- Arrow::arrow_static
- Parquet::parquet_static)
- else()
- target_link_libraries(${target} PRIVATE Arrow::arrow_shared
- Parquet::parquet_shared)
- endif()
- else()
- if(USE_STATIC_ARROW)
- target_link_libraries(${target} PRIVATE
-Wl,--exclude-libs,ALL -Wl,--whole-archive
- Arrow::arrow_static
- Parquet::parquet_static -Wl,--no-whole-archive)
- else()
- target_link_libraries(${target} PRIVATE Arrow::arrow_shared
- Parquet::parquet_shared)
- endif()
- endif()
- endif()
- target_include_directories(${target} PRIVATE
${PROJECT_SOURCE_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Catch2/single_include>)
- include(CTest)
- include(Catch)
- catch_discover_tests(${target})
- endmacro()
-
- add_test(test_info SRCS test/test_info.cc)
- add_test(test_arrow_chunk_writer SRCS test/test_arrow_chunk_writer.cc)
- add_test(test_builder SRCS test/test_builder.cc)
- add_test(test_chunk_info_reader SRCS test/test_chunk_info_reader.cc)
- add_test(test_arrow_chunk_reader SRCS test/test_arrow_chunk_reader.cc)
- add_test(test_graph SRCS test/test_graph.cc)
- add_test(test_multi_label SRCS test/test_multi_label.cc)
- add_test(test_multi_property SRCS test/test_multi_property.cc)
-
- # enable_testing()
-endif()
-
-if (BUILD_BENCHMARKS)
- find_package(benchmark REQUIRED)
-
- macro(add_benchmark target)
- set(options)
- set(oneValueArgs)
- set(multiValueArgs SRCS)
- cmake_parse_arguments(add_test "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
- add_executable(${target} ${add_test_SRCS})
- target_compile_features(${target} PRIVATE cxx_std_${GAR_CXX_STANDARD})
- target_include_directories(${target} PRIVATE
${PROJECT_SOURCE_DIR}/thirdparty)
- if(APPLE)
- target_link_libraries(${target} PRIVATE benchmark::benchmark_main
graphar Arrow::arrow_shared Parquet::parquet_shared ${CMAKE_DL_LIBS})
- else()
- target_link_libraries(${target} PRIVATE benchmark::benchmark_main
graphar parquet arrow ${CMAKE_DL_LIBS})
- endif()
- if (BUILD_ARROW_FROM_SOURCE)
- target_include_directories(${target} SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
- if (APPLE)
- target_link_libraries(${target} PRIVATE -Wl,-force_load
${GAR_ARROW_STATIC_LIB}
- "${GAR_PARQUET_STATIC_LIB}"
- "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
- protobuf::libprotobuf
- "-framework CoreFoundation"
- "-framework Security"
- "-framework Network")
- else()
- target_link_libraries(${target} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive ${GAR_ARROW_STATIC_LIB}
- "${GAR_PARQUET_STATIC_LIB}"
- "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
-Wl,--no-whole-archive)
- endif()
- endif()
- endmacro()
- add_benchmark(arrow_chunk_reader_benchmark SRCS
benchmarks/arrow_chunk_reader_benchmark.cc)
- add_benchmark(label_filter_benchmark SRCS
benchmarks/label_filter_benchmark.cc)
- add_benchmark(graph_info_benchmark SRCS benchmarks/graph_info_benchmark.cc)
-endif()
-
#
------------------------------------------------------------------------------
# Format code & cpplint
#
------------------------------------------------------------------------------
diff --git a/cpp/benchmarks/CMakeLists.txt b/cpp/benchmarks/CMakeLists.txt
new file mode 100644
index 00000000..3927318b
--- /dev/null
+++ b/cpp/benchmarks/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+find_package(benchmark REQUIRED)
+
+macro(add_benchmark target)
+ set(options)
+ set(oneValueArgs)
+ set(multiValueArgs SRCS)
+ cmake_parse_arguments(add_test "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+ add_executable(${target} ${add_test_SRCS})
+ target_compile_features(${target} PRIVATE cxx_std_${GAR_CXX_STANDARD})
+ target_include_directories(${target} PRIVATE
${PROJECT_SOURCE_DIR}/thirdparty)
+ if(APPLE)
+ target_link_libraries(${target} PRIVATE benchmark::benchmark_main
graphar Arrow::arrow_shared Parquet::parquet_shared ${CMAKE_DL_LIBS})
+ else()
+ target_link_libraries(${target} PRIVATE benchmark::benchmark_main
graphar parquet arrow ${CMAKE_DL_LIBS})
+ endif()
+ if(BUILD_ARROW_FROM_SOURCE)
+ target_include_directories(${target} SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
+ if(APPLE)
+ target_link_libraries(${target} PRIVATE -Wl,-force_load
${GAR_ARROW_STATIC_LIB}
+ "${GAR_PARQUET_STATIC_LIB}"
+ "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
+ protobuf::libprotobuf
+ "-framework CoreFoundation"
+ "-framework Security"
+ "-framework Network")
+ else()
+ target_link_libraries(${target} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive ${GAR_ARROW_STATIC_LIB}
+ "${GAR_PARQUET_STATIC_LIB}"
+ "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}" -Wl,--no-whole-archive)
+ endif()
+ endif()
+endmacro()
+
+add_benchmark(arrow_chunk_reader_benchmark SRCS
arrow_chunk_reader_benchmark.cc)
+add_benchmark(label_filter_benchmark SRCS label_filter_benchmark.cc)
+add_benchmark(graph_info_benchmark SRCS graph_info_benchmark.cc)
diff --git a/cpp/examples/CMakeLists.txt b/cpp/examples/CMakeLists.txt
new file mode 100644
index 00000000..6a214333
--- /dev/null
+++ b/cpp/examples/CMakeLists.txt
@@ -0,0 +1,69 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+find_package(Boost REQUIRED COMPONENTS graph)
+
+file(GLOB EXAMPLE_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/*.cc")
+foreach(f ${EXAMPLE_FILES})
+ string(REGEX MATCH "^(.*)\\.[^.]*$" dummy ${f})
+ set(E_NAME ${CMAKE_MATCH_1})
+ message(STATUS "Found example - " ${E_NAME})
+ add_executable(${E_NAME} ${E_NAME}.cc)
+ target_include_directories(${E_NAME} PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${PROJECT_SOURCE_DIR}/thirdparty
+ )
+ target_include_directories(${E_NAME} SYSTEM PRIVATE ${Boost_INCLUDE_DIRS})
+ target_link_libraries(${E_NAME} PRIVATE graphar ${Boost_LIBRARIES}
${CMAKE_DL_LIBS})
+
+ if(BUILD_ARROW_FROM_SOURCE)
+ target_include_directories(${E_NAME} SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
+ if(APPLE)
+ target_link_libraries(${E_NAME} PRIVATE -Wl,-force_load
${GAR_ARROW_STATIC_LIB}
+ "${GAR_PARQUET_STATIC_LIB}"
+ "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
+ protobuf::libprotobuf
+ "-framework CoreFoundation"
+ "-framework Security"
+ "-framework Network")
+ else()
+ target_link_libraries(${E_NAME} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive ${GAR_ARROW_STATIC_LIB}
+ "${GAR_PARQUET_STATIC_LIB}"
+ "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}" -Wl,--no-whole-archive)
+ endif()
+ else()
+ if(APPLE)
+ if(USE_STATIC_ARROW)
+ target_link_libraries(${E_NAME} PRIVATE -Wl,-force_load
+ Arrow::arrow_static
+ Parquet::parquet_static)
+ else()
+ target_link_libraries(${E_NAME} PRIVATE Arrow::arrow_shared
+ Parquet::parquet_shared)
+ endif()
+ else()
+ if(USE_STATIC_ARROW)
+ target_link_libraries(${E_NAME} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive
+ Arrow::arrow_static
+ Parquet::parquet_static -Wl,--no-whole-archive)
+ else()
+ target_link_libraries(${E_NAME} PRIVATE Arrow::arrow_shared
+ Parquet::parquet_shared)
+ endif()
+ endif()
+ endif()
+endforeach()
diff --git a/cpp/src/CMakeLists.txt b/cpp/src/CMakeLists.txt
new file mode 100644
index 00000000..c4c35120
--- /dev/null
+++ b/cpp/src/CMakeLists.txt
@@ -0,0 +1,138 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+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()
+
+file(GLOB_RECURSE CORE_SRC_FILES "graphar/*.cc")
+if(GRAPHAR_BUILD_STATIC)
+ add_library(graphar STATIC ${CORE_SRC_FILES})
+else()
+ add_library(graphar SHARED ${CORE_SRC_FILES})
+endif()
+install(TARGETS graphar graphar_thirdparty
+ EXPORT graphar-targets
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION bin
+ INCLUDES DESTINATION include
+)
+target_compile_features(graphar PRIVATE cxx_std_${GAR_CXX_STANDARD})
+target_include_directories(graphar PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty)
+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(BUILD_ARROW_FROM_SOURCE)
+ target_include_directories(graphar SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
+
+ set(GAR_BUNDLED_DEPS_STATIC_LIBS)
+ list(APPEND GAR_BUNDLED_DEPS_STATIC_LIBS
+ gar_arrow_static
+ gar_arrow_compute_static
+ gar_parquet_static
+ gar_dataset_static
+ gar_acero_static
+ gar_arrow_bundled_dependencies_static)
+ graphar_car(_FIRST_LIB ${GAR_BUNDLED_DEPS_STATIC_LIBS})
+ graphar_cdr(_OTHER_LIBS ${GAR_BUNDLED_DEPS_STATIC_LIBS})
+
+ graphar_create_merged_static_lib(graphar_bundled_dependencies
+ NAME
+ graphar_bundled_dependencies
+ ROOT
+ ${_FIRST_LIB}
+ TO_MERGE
+ ${_OTHER_LIBS})
+ get_target_property(graphar_bundled_dependencies_path
graphar_bundled_dependencies
+ IMPORTED_LOCATION)
+ install(FILES ${CMAKE_BINARY_DIR}/${graphar_bundled_dependencies_path}
${INSTALL_IS_OPTIONAL}
+ DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ string(APPEND ARROW_PC_LIBS_PRIVATE " -lgraphar_bundled_dependencies")
+ list(INSERT ARROW_STATIC_INSTALL_INTERFACE_LIBS 0
"graphar_bundled_dependencies")
+
+ if(APPLE)
+ find_package(Protobuf REQUIRED)
+ target_link_libraries(graphar PRIVATE -Wl,-force_load
+ graphar_bundled_dependencies
+ protobuf::libprotobuf
+ "-framework CoreFoundation"
+ "-framework Security"
+ "-framework Network")
+ elseif(MSVC)
+ target_link_libraries(graphar PRIVATE graphar_bundled_dependencies)
+ else()
+ target_link_libraries(graphar PRIVATE -Wl,--exclude-libs,ALL
+ graphar_bundled_dependencies)
+ endif()
+
+ if(OPENSSL_FOUND)
+ target_link_libraries(graphar PUBLIC OpenSSL::SSL)
+ endif()
+ if(CURL_FOUND)
+ target_link_libraries(graphar PUBLIC ${CURL_LIBRARIES})
+ endif()
+else()
+ if(APPLE)
+ if(USE_STATIC_ARROW)
+ target_link_libraries(graphar PRIVATE -Wl,-force_load
+ Arrow::arrow_static
+ Parquet::parquet_static
+ ArrowDataset::arrow_dataset_static
+ ArrowAcero::arrow_acero_static)
+ else()
+ target_link_libraries(graphar PRIVATE -Wl,-force_load
Arrow::arrow_shared
+ Parquet::parquet_shared
+ ArrowDataset::arrow_dataset_shared
+ ArrowAcero::arrow_acero_shared)
+ endif()
+ elseif(MSVC)
+ if(USE_STATIC_ARROW)
+ target_link_libraries(graphar PRIVATE
+ Arrow::arrow_static
+ Parquet::parquet_static
+ ArrowDataset::arrow_dataset_static
+ ArrowAcero::arrow_acero_static)
+ else()
+ target_link_libraries(graphar PRIVATE
+ Arrow::arrow_shared
+ Parquet::parquet_shared
+ ArrowDataset::arrow_dataset_shared
+ ArrowAcero::arrow_acero_shared)
+ endif()
+ else()
+ if(USE_STATIC_ARROW)
+ target_link_libraries(graphar PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive
+ Arrow::arrow_static
+ Parquet::parquet_static
+ ArrowDataset::arrow_dataset_static
+ ArrowAcero::arrow_acero_static -Wl,--no-whole-archive)
+ else()
+ target_link_libraries(graphar PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive Arrow::arrow_shared
+ Parquet::parquet_shared
+ ArrowDataset::arrow_dataset_shared
+ ArrowAcero::arrow_acero_shared -Wl,--no-whole-archive)
+ endif()
+ endif()
+endif()
diff --git a/cpp/test/CMakeLists.txt b/cpp/test/CMakeLists.txt
new file mode 100644
index 00000000..35f25ce0
--- /dev/null
+++ b/cpp/test/CMakeLists.txt
@@ -0,0 +1,83 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+find_package(Catch2 3 REQUIRED)
+
+macro(add_graphar_test target)
+ set(options)
+ set(oneValueArgs)
+ set(multiValueArgs SRCS)
+ cmake_parse_arguments(add_test "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+ add_executable(${target} ${add_test_SRCS})
+ target_compile_features(${target} PRIVATE cxx_std_${GAR_CXX_STANDARD})
+ target_include_directories(${target} PRIVATE
+ ${PROJECT_SOURCE_DIR}/thirdparty
+ ${PROJECT_SOURCE_DIR}/include
+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/thirdparty/Catch2/single_include>
+ )
+ target_link_libraries(${target} PRIVATE Catch2::Catch2WithMain graphar
${CMAKE_DL_LIBS})
+
+ if(BUILD_ARROW_FROM_SOURCE)
+ target_include_directories(${target} SYSTEM BEFORE PRIVATE
${GAR_ARROW_INCLUDE_DIR})
+ if(APPLE)
+ target_link_libraries(${target} PRIVATE -Wl,-force_load
gar_arrow_static
+ "${GAR_PARQUET_STATIC_LIB}"
+ "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}"
+ protobuf::libprotobuf
+ "-framework CoreFoundation"
+ "-framework Security"
+ "-framework Network")
+ else()
+ target_link_libraries(${target} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive gar_arrow_static
+ "${GAR_PARQUET_STATIC_LIB}"
+ "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}" -Wl,--no-whole-archive)
+ endif()
+ else()
+ if(APPLE)
+ if(USE_STATIC_ARROW)
+ target_link_libraries(${target} PRIVATE -Wl,-force_load
+ Arrow::arrow_static
+ Parquet::parquet_static)
+ else()
+ target_link_libraries(${target} PRIVATE Arrow::arrow_shared
+ Parquet::parquet_shared)
+ endif()
+ else()
+ if(USE_STATIC_ARROW)
+ target_link_libraries(${target} PRIVATE -Wl,--exclude-libs,ALL
-Wl,--whole-archive
+ Arrow::arrow_static
+ Parquet::parquet_static -Wl,--no-whole-archive)
+ else()
+ target_link_libraries(${target} PRIVATE Arrow::arrow_shared
+ Parquet::parquet_shared)
+ endif()
+ endif()
+ endif()
+
+ include(CTest)
+ include(Catch)
+ catch_discover_tests(${target})
+endmacro()
+
+add_graphar_test(test_info SRCS test_info.cc)
+add_graphar_test(test_arrow_chunk_writer SRCS test_arrow_chunk_writer.cc)
+add_graphar_test(test_builder SRCS test_builder.cc)
+add_graphar_test(test_chunk_info_reader SRCS test_chunk_info_reader.cc)
+add_graphar_test(test_arrow_chunk_reader SRCS test_arrow_chunk_reader.cc)
+add_graphar_test(test_graph SRCS test_graph.cc)
+add_graphar_test(test_multi_label SRCS test_multi_label.cc)
+add_graphar_test(test_multi_property SRCS test_multi_property.cc)
diff --git a/rust/build.rs b/rust/build.rs
index 55e90636..40fce462 100644
--- a/rust/build.rs
+++ b/rust/build.rs
@@ -73,7 +73,9 @@ fn build_graphar() -> Vec<PathBuf> {
let build_dir = build.build();
let lib_path = build_dir.join("build");
+ let src_lib_path = lib_path.join("src");
println!("cargo:rustc-link-search=native={}", lib_path.display());
+ println!("cargo:rustc-link-search=native={}", src_lib_path.display());
println!("cargo:rerun-if-changed=include/graphar_rs.h");
println!("cargo:rerun-if-changed=src/graphar_rs.cc");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]