You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@parquet.apache.org by no...@apache.org on 2016/01/09 00:51:58 UTC
[7/7] parquet-cpp git commit: PARQUET-416: C++11 compilation,
code reorg, libparquet and installation targets
PARQUET-416: C++11 compilation, code reorg, libparquet and installation targets
Reorganize code into a top level src/parquet directly, add a libparquet shared library, and add install targets for libparquet and its header files. Add cpplint script and `make lint` target for code linting.
Replaces earlier PR #13
Author: Wes McKinney <we...@cloudera.com>
Closes #14 from wesm/libparquet-library and squashes the following commits:
2e356fd [Wes McKinney] PARQUET-416: Compile with C++11 and replace usages of boost::shared_ptr with std::shared_ptr and other C++11 fixes. Reorganize code into a top level src/parquet directly, add a libparquet shared library, and add install targets for libparquet and its header files. Add cpplint script and `make lint` target for code linting.
Project: http://git-wip-us.apache.org/repos/asf/parquet-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/parquet-cpp/commit/337cf584
Tree: http://git-wip-us.apache.org/repos/asf/parquet-cpp/tree/337cf584
Diff: http://git-wip-us.apache.org/repos/asf/parquet-cpp/diff/337cf584
Branch: refs/heads/master
Commit: 337cf584ea25a1c6397c4412a706c58e4bd5e58c
Parents: ea30dec
Author: Wes McKinney <we...@cloudera.com>
Authored: Fri Jan 8 15:49:25 2016 -0800
Committer: Nong Li <no...@gmail.com>
Committed: Fri Jan 8 15:49:25 2016 -0800
----------------------------------------------------------------------
.travis.yml | 43 +-
CMakeLists.txt | 127 +-
build-support/cpplint.py | 6323 ++++++++++++++++++
cmake_modules/clean-all.cmake | 14 +
example/CMakeLists.txt | 9 +-
example/decode_benchmark.cc | 7 +-
example/parquet_reader.cc | 26 +-
generated/gen-cpp/CMakeLists.txt | 20 -
generated/gen-cpp/parquet_constants.cpp | 17 -
generated/gen-cpp/parquet_constants.h | 24 -
generated/gen-cpp/parquet_types.cpp | 2006 ------
generated/gen-cpp/parquet_types.h | 1123 ----
src/CMakeLists.txt | 19 -
src/compression/CMakeLists.txt | 18 -
src/compression/codec.h | 72 -
src/compression/lz4-codec.cc | 38 -
src/compression/snappy-codec.cc | 40 -
src/encodings/bool-encoding.h | 47 -
src/encodings/delta-bit-pack-encoding.h | 114 -
src/encodings/delta-byte-array-encoding.h | 73 -
.../delta-length-byte-array-encoding.h | 62 -
src/encodings/dictionary-encoding.h | 146 -
src/encodings/encodings.h | 83 -
src/encodings/plain-encoding.h | 82 -
src/impala/bit-stream-utils.h | 145 -
src/impala/bit-stream-utils.inline.h | 164 -
src/impala/bit-util.h | 174 -
src/impala/compiler-util.h | 38 -
src/impala/logging.h | 31 -
src/impala/rle-encoding.h | 417 --
src/parquet.cc | 35 +-
src/parquet/CMakeLists.txt | 18 +
src/parquet/compression/CMakeLists.txt | 30 +
src/parquet/compression/codec.h | 71 +
src/parquet/compression/lz4-codec.cc | 40 +
src/parquet/compression/snappy-codec.cc | 42 +
src/parquet/encodings/CMakeLists.txt | 24 +
src/parquet/encodings/bool-encoding.h | 48 +
src/parquet/encodings/delta-bit-pack-encoding.h | 116 +
.../encodings/delta-byte-array-encoding.h | 74 +
.../delta-length-byte-array-encoding.h | 63 +
src/parquet/encodings/dictionary-encoding.h | 148 +
src/parquet/encodings/encodings.h | 82 +
src/parquet/encodings/plain-encoding.h | 83 +
src/parquet/parquet.h | 38 +-
src/parquet/thrift/CMakeLists.txt | 29 +
src/parquet/thrift/parquet_constants.cpp | 17 +
src/parquet/thrift/parquet_constants.h | 24 +
src/parquet/thrift/parquet_types.cpp | 2006 ++++++
src/parquet/thrift/parquet_types.h | 1123 ++++
src/parquet/util/CMakeLists.txt | 24 +
src/parquet/util/bit-stream-utils.h | 147 +
src/parquet/util/bit-stream-utils.inline.h | 164 +
src/parquet/util/bit-util.h | 174 +
src/parquet/util/compiler-util.h | 37 +
src/parquet/util/logging.h | 31 +
src/parquet/util/rle-encoding.h | 419 ++
src/parquet/util/stopwatch.h | 49 +
src/util/stopwatch.h | 49 -
59 files changed, 11630 insertions(+), 5077 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/parquet-cpp/blob/337cf584/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 58b7641..5da9a6f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,5 @@
+sudo: required
+dist: trusty
language: cpp
compiler:
@@ -9,38 +11,51 @@ os:
- osx
addons:
- apt:
- packages:
- - libboost-dev
- #- libsnappy-dev currently handled by thirdparty scipts.
- - libboost-program-options-dev #needed for thrift cpp compilation
- - libboost-test-dev #needed for thrift cpp compilation
- - libssl-dev #needed for thrift cpp compilation
- - libtool #needed for thrift cpp compilation
- - bison #needed for thrift cpp compilation
- - flex #needed for thrift cpp compilation
- - pkg-config #needed for thrift cpp compilation
+ apt:
+ sources:
+ - ubuntu-toolchain-r-test
+ - kalakris-cmake
+ packages:
+ - gcc-4.9
+ - g++-4.9
+ - cmake
+ - valgrind
+ - libboost-dev
+ #- libsnappy-dev currently handled by thirdparty scipts.
+ - libboost-program-options-dev #needed for thrift cpp compilation
+ - libboost-test-dev #needed for thrift cpp compilation
+ - libssl-dev #needed for thrift cpp compilation
+ - libtool #needed for thrift cpp compilation
+ - bison #needed for thrift cpp compilation
+ - flex #needed for thrift cpp compilation
+ - pkg-config #needed for thrift cpp compilation
before_install:
- pushd thirdparty
# thrift cpp
- >
+ if [ $TRAVIS_OS_NAME == osx ]; then
+ brew update &&
+ brew install thrift;
+ fi
+ - >
if [ $TRAVIS_OS_NAME == linux ]; then
- wget http://www.us.apache.org/dist/thrift/0.9.1/thrift-0.9.1.tar.gz &&
+ wget http://archive.apache.org/dist/thrift/0.9.1/thrift-0.9.1.tar.gz &&
tar xfz thrift-0.9.1.tar.gz &&
pushd thrift-0.9.1 &&
- ./configure --without-qt4 --without-c_glib --without-csharp --without-java --without-erlang --without-nodejs --without-lua --without-python --without-perl --without-php --without-php_extension --without-ruby --without-haskell --without-go --without-d --with-cpp --prefix=$HOME/local &&
+ ./configure CXXFLAGS='-fPIC' --without-qt4 --without-c_glib --without-csharp --without-java --without-erlang --without-nodejs --without-lua --without-python --without-perl --without-php --without-php_extension --without-ruby --without-haskell --without-go --without-d --with-cpp --prefix=$HOME/local &&
make clean &&
make install &&
popd;
fi
- - if [ $TRAVIS_OS_NAME == osx ]; then brew install thrift; fi
# snappy and lz4
- ./download_thirdparty.sh
- ./build_thirdparty.sh
- popd
before_script:
+ - export CC="gcc-4.9"
+ - export CXX="g++-4.9"
- mkdir build
- cd build
- THRIFT_HOME=$HOME/local cmake ..
http://git-wip-us.apache.org/repos/asf/parquet-cpp/blob/337cf584/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ad0ed5f..eb67f75 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,18 +12,64 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-
cmake_minimum_required(VERSION 2.6)
+project(parquet-cpp)
# generate CTest input files
enable_testing()
# where to find cmake modules
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules")
+set(BUILD_SUPPORT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build-support)
set(THIRDPARTY_PREFIX ${CMAKE_SOURCE_DIR}/thirdparty/installed)
set(CMAKE_PREFIX_PATH ${THIRDPARTY_PREFIX})
+if(APPLE)
+ set(CMAKE_MACOSX_RPATH 1)
+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)
+endif()
+
+if (NOT PARQUET_LINK)
+ set(PARQUET_LINK "a")
+elseif(NOT ("auto" MATCHES "^${PARQUET_LINK}" OR
+ "dynamic" MATCHES "^${PARQUET_LINK}" OR
+ "static" MATCHES "^${PARQUET_LINK}"))
+ message(FATAL_ERROR "Unknown value for PARQUET_LINK, must be auto|dynamic|static")
+else()
+ # Remove all but the first letter.
+ string(SUBSTRING "${PARQUET_LINK}" 0 1 PARQUET_LINK)
+endif()
+
+# if no build build type is specified, default to debug builds
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Debug)
+endif(NOT CMAKE_BUILD_TYPE)
+
+# set compile output directory
+string (TOLOWER ${CMAKE_BUILD_TYPE} BUILD_SUBDIR_NAME)
+
+# If build in-source, create the latest symlink. If build out-of-source, which is
+# preferred, simply output the binaries in the build folder
+if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
+ set(BUILD_OUTPUT_ROOT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/build/${BUILD_SUBDIR_NAME}/")
+ # Link build/latest to the current build directory, to avoid developers
+ # accidentally running the latest debug build when in fact they're building
+ # release builds.
+ FILE(MAKE_DIRECTORY ${BUILD_OUTPUT_ROOT_DIRECTORY})
+ if (NOT APPLE)
+ set(MORE_ARGS "-T")
+ endif()
+EXECUTE_PROCESS(COMMAND ln ${MORE_ARGS} -sf ${BUILD_OUTPUT_ROOT_DIRECTORY}
+ ${CMAKE_CURRENT_BINARY_DIR}/build/latest)
+else()
+ set(BUILD_OUTPUT_ROOT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${BUILD_SUBDIR_NAME}/")
+endif()
+
+############################################################
+# Dependencies
+############################################################
+
# find boost headers and libs
set(Boost_DEBUG TRUE)
set(Boost_USE_MULTITHREADED ON)
@@ -58,22 +104,83 @@ include_directories(SYSTEM ${LZ4_INCLUDE_DIR})
add_library(lz4static STATIC IMPORTED)
set_target_properties(lz4static PROPERTIES IMPORTED_LOCATION ${LZ4_STATIC_LIB})
-SET(CMAKE_CXX_FLAGS "-msse4.2 -Wall -Wno-unused-value -Wno-unused-variable -Wno-sign-compare -Wno-unknown-pragmas")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb")
-
# Thrift requires these definitions for some types that we use
add_definitions(-DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H -DHAVE_NETDB_H)
add_definitions(-fPIC)
-# where to put generated libraries
-set(LIBRARY_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build")
+# where to put generated archives (.a files)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
+set(ARCHIVE_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
+
+# where to put generated libraries (.so files)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
+set(LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
# where to put generated binaries
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin")
+set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}")
+
+SET(CMAKE_CXX_FLAGS "-std=c++11 -msse4.2 -Wall -Wno-unused-value -Wno-unused-variable -Wno-sign-compare -Wno-unknown-pragmas")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb")
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/generated)
-add_subdirectory(generated/gen-cpp)
-add_subdirectory(src)
+############################################################
+# "make lint" target
+############################################################
+if (UNIX)
+ # Full lint
+ add_custom_target(lint ${BUILD_SUPPORT_DIR}/cpplint.py
+ --verbose=4
+ --filter=-whitespace/comments,-readability/todo,-build/header_guard,-build/include_order
+ `find ${CMAKE_CURRENT_SOURCE_DIR}/src -name \\*.cc -or -name \\*.h | sed -e '/parquet\\/thrift/g'`)
+endif (UNIX)
+
+############################################################
+# Library config
+
+set(LIBPARQUET_SRCS
+ src/parquet.cc
+)
+
+set(LIBPARQUET_LINK_LIBS
+ parquet_compression
+ parquet_thrift
+ thriftstatic
+)
+
+if ("${PARQUET_LINK}" STREQUAL "d" OR "${PARQUET_LINK}" STREQUAL "a")
+ set(LIBPARQUET_LINKAGE "SHARED")
+else()
+ set(LIBPARQUET_LINKAGE "STATIC")
+endif()
+
+add_library(parquet
+ ${LIBPARQUET_LINKAGE}
+ ${LIBPARQUET_SRCS}
+)
+set_target_properties(parquet
+ PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
+target_link_libraries(parquet ${LIBPARQUET_LINK_LIBS})
+
+if(APPLE)
+ set_target_properties(parquet PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
+endif()
+
+add_subdirectory(src/parquet)
+add_subdirectory(src/parquet/compression)
+add_subdirectory(src/parquet/encodings)
+add_subdirectory(src/parquet/thrift)
+add_subdirectory(src/parquet/util)
+
add_subdirectory(example)
+
+add_custom_target(clean-all
+ COMMAND ${CMAKE_BUILD_TOOL} clean
+ COMMAND ${CMAKE_COMMAND} -P cmake_modules/clean-all.cmake
+)
+
+# installation
+
+install(TARGETS parquet
+ LIBRARY DESTINATION lib)