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]


Reply via email to