@@ -51,7 +51,9 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
5151 option (ARROW_PARQUET
5252 "Build the Parquet adapter and link to libparquet"
5353 OFF )
54-
54+ option (ARROW_TEST_MEMCHECK
55+ "Run the test suite using valgrind --tool=memcheck"
56+ OFF )
5557 option (ARROW_BUILD_TESTS
5658 "Build the Arrow googletest unit tests"
5759 ON )
@@ -60,6 +62,10 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
6062 "Build the Arrow micro benchmarks"
6163 OFF )
6264
65+ option (ARROW_IPC
66+ "Build the Arrow IPC extensions"
67+ ON )
68+
6369endif ()
6470
6571if (NOT ARROW_BUILD_TESTS)
@@ -260,17 +266,17 @@ set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}")
260266include_directories (src )
261267
262268############################################################
263- # Benchmarking
269+ # Benchmarking
264270############################################################
265271# Add a new micro benchmark, with or without an executable that should be built.
266272# If benchmarks are enabled then they will be run along side unit tests with ctest.
267- # 'make runbenchmark' and 'make unittest' to build/run only benchmark or unittests,
273+ # 'make runbenchmark' and 'make unittest' to build/run only benchmark or unittests,
268274# respectively.
269275#
270276# REL_BENCHMARK_NAME is the name of the benchmark app. It may be a single component
271277# (e.g. monotime-benchmark) or contain additional components (e.g.
272278# net/net_util-benchmark). Either way, the last component must be a globally
273- # unique name.
279+ # unique name.
274280
275281# The benchmark will registered as unit test with ctest with a label
276282# of 'benchmark'.
@@ -281,7 +287,7 @@ function(ADD_ARROW_BENCHMARK REL_BENCHMARK_NAME)
281287 return ()
282288 endif ()
283289 get_filename_component (BENCHMARK_NAME ${REL_BENCHMARK_NAME} NAME_WE )
284-
290+
285291 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /${REL_BENCHMARK_NAME} .cc)
286292 # This benchmark has a corresponding .cc file, set it up as an executable.
287293 set (BENCHMARK_PATH "${EXECUTABLE_OUTPUT_PATH} /${BENCHMARK_NAME} " )
@@ -294,7 +300,7 @@ function(ADD_ARROW_BENCHMARK REL_BENCHMARK_NAME)
294300 set (BENCHMARK_PATH ${CMAKE_CURRENT_SOURCE_DIR} /${REL_BENCHMARK_NAME} )
295301 set (NO_COLOR "" )
296302 endif ()
297-
303+
298304 add_test (${BENCHMARK_NAME}
299305 ${BUILD_SUPPORT_DIR} /run-test.sh ${CMAKE_BINARY_DIR} benchmark ${BENCHMARK_PATH} ${NO_COLOR} )
300306 set_tests_properties (${BENCHMARK_NAME} PROPERTIES LABELS "benchmark" )
@@ -345,9 +351,18 @@ function(ADD_ARROW_TEST REL_TEST_NAME)
345351 set (TEST_PATH ${CMAKE_CURRENT_SOURCE_DIR} /${REL_TEST_NAME} )
346352 endif ()
347353
348- add_test (${TEST_NAME}
349- ${BUILD_SUPPORT_DIR} /run-test.sh ${CMAKE_BINARY_DIR} test ${TEST_PATH} )
354+ if (ARROW_TEST_MEMCHECK)
355+ SET_PROPERTY (TARGET ${TEST_NAME}
356+ APPEND_STRING PROPERTY
357+ COMPILE_FLAGS " -DARROW_VALGRIND" )
358+ add_test (${TEST_NAME}
359+ valgrind --tool=memcheck --leak-check=full --error-exitcode=1 ${TEST_PATH} )
360+ else ()
361+ add_test (${TEST_NAME}
362+ ${BUILD_SUPPORT_DIR} /run-test.sh ${CMAKE_BINARY_DIR} test ${TEST_PATH} )
363+ endif ()
350364 set_tests_properties (${TEST_NAME} PROPERTIES LABELS "unittest" )
365+
351366 if (ARGN)
352367 set_tests_properties (${TEST_NAME} PROPERTIES ${ARGN} )
353368 endif ()
@@ -403,7 +418,7 @@ if ("$ENV{GTEST_HOME}" STREQUAL "")
403418 set (GTest_HOME ${THIRDPARTY_DIR} /googletest-release-1.7.0)
404419endif ()
405420
406- ## Google Benchmark
421+ ## Google Benchmark
407422if ("$ENV{GBENCHMARK_HOME} " STREQUAL "" )
408423 set (GBENCHMARK_HOME ${THIRDPARTY_DIR} /installed)
409424endif ()
@@ -487,24 +502,10 @@ if (UNIX)
487502 add_custom_target(lint ${BUILD_SUPPORT_DIR} /cpplint.py
488503 --verbose=2
489504 --linelength=90
490- --filter=-whitespace/comments,-readability/todo,-build/header_guard,-build/c++11
491- `find ${CMAKE_CURRENT_SOURCE_DIR} /src -name \\ *.cc -or -name \\ *.h`)
505+ --filter=-whitespace/comments,-readability/todo,-build/header_guard,-build/c++11,-runtime/references
506+ `find ${CMAKE_CURRENT_SOURCE_DIR} /src -name \\ *.cc -or -name \\ *.h | sed -e '/_generated/g' `)
492507endif (UNIX)
493508
494- #----------------------------------------------------------------------
495- # Parquet adapter
496-
497- if(ARROW_PARQUET)
498- find_package(Parquet REQUIRED)
499- include_directories(SYSTEM ${PARQUET_INCLUDE_DIR} )
500- ADD_THIRDPARTY_LIB(parquet
501- STATIC_LIB ${PARQUET_STATIC_LIB}
502- SHARED_LIB ${PARQUET_SHARED_LIB} )
503-
504- add_subdirectory(src/arrow/parquet)
505- list(APPEND LINK_LIBS arrow_parquet parquet)
506- endif()
507-
508509############################################################
509510# Subdirectories
510511############################################################
@@ -515,15 +516,18 @@ set(LIBARROW_LINK_LIBS
515516set(ARROW_SRCS
516517 src/arrow/array.cc
517518 src/arrow/builder.cc
519+ src/arrow/column.cc
520+ src/arrow/schema.cc
521+ src/arrow/table.cc
518522 src/arrow/type.cc
519523
520- src/arrow/table/column.cc
521- src/arrow/table/schema.cc
522- src/arrow/table/table.cc
524+ # IPC / Shared memory library; to be turned into an optional component
525+ src/arrow/ipc/adapter.cc
526+ src/arrow/ipc/memory.cc
527+ src/arrow/ipc/metadata.cc
528+ src/arrow/ipc/metadata-internal.cc
523529
524530 src/arrow/types/construct.cc
525- src/arrow/types/floating.cc
526- src/arrow/types/integer.cc
527531 src/arrow/types/json.cc
528532 src/arrow/types/list.cc
529533 src/arrow/types/primitive.cc
@@ -559,9 +563,39 @@ target_link_libraries(arrow ${LIBARROW_LINK_LIBS})
559563
560564add_subdirectory(src/arrow)
561565add_subdirectory(src/arrow/util)
562- add_subdirectory(src/arrow/table)
563566add_subdirectory(src/arrow/types)
564567
565568install(TARGETS arrow
566569 LIBRARY DESTINATION lib
567570 ARCHIVE DESTINATION lib)
571+
572+ #----------------------------------------------------------------------
573+ # Parquet adapter library
574+
575+ if(ARROW_PARQUET)
576+ find_package(Parquet REQUIRED)
577+ include_directories(SYSTEM ${PARQUET_INCLUDE_DIR} )
578+ ADD_THIRDPARTY_LIB(parquet
579+ STATIC_LIB ${PARQUET_STATIC_LIB}
580+ SHARED_LIB ${PARQUET_SHARED_LIB} )
581+
582+ add_subdirectory(src/arrow/parquet)
583+ list(APPEND LINK_LIBS arrow_parquet parquet)
584+ endif()
585+
586+ #----------------------------------------------------------------------
587+ # IPC library
588+
589+ ## Flatbuffers
590+ if(ARROW_IPC)
591+ find_package(Flatbuffers REQUIRED)
592+ message(STATUS " Flatbuffers include dir: ${FLATBUFFERS_INCLUDE_DIR} ")
593+ message(STATUS " Flatbuffers static library: ${FLATBUFFERS_STATIC_LIB} ")
594+ message(STATUS " Flatbuffers compiler: ${FLATBUFFERS_COMPILER} ")
595+ include_directories(SYSTEM ${FLATBUFFERS_INCLUDE_DIR} )
596+ add_library(flatbuffers STATIC IMPORTED)
597+ set_target_properties(flatbuffers PROPERTIES
598+ IMPORTED_LOCATION ${FLATBUFFERS_STATIC_LIB} )
599+
600+ add_subdirectory(src/arrow/ipc)
601+ endif()
0 commit comments