Repository: orc Updated Branches: refs/heads/master 831b2eca7 -> 2e1161f93
ORC-352: [C++] Update, cleanup and add support of MSVC to ThirdpartyToolchain Fixes #256 Signed-off-by: Deepak Majeti <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/orc/repo Commit: http://git-wip-us.apache.org/repos/asf/orc/commit/2e1161f9 Tree: http://git-wip-us.apache.org/repos/asf/orc/tree/2e1161f9 Diff: http://git-wip-us.apache.org/repos/asf/orc/diff/2e1161f9 Branch: refs/heads/master Commit: 2e1161f93557ea7e30c96de63628722bc23c56be Parents: 831b2ec Author: rip-nsk <[email protected]> Authored: Mon Apr 23 16:32:40 2018 -0700 Committer: Deepak Majeti <[email protected]> Committed: Sun Apr 29 19:37:06 2018 -0400 ---------------------------------------------------------------------- cmake_modules/FindZLIB.cmake | 9 +- cmake_modules/ThirdpartyToolchain.cmake | 197 ++++++++++++++------------- 2 files changed, 106 insertions(+), 100 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/orc/blob/2e1161f9/cmake_modules/FindZLIB.cmake ---------------------------------------------------------------------- diff --git a/cmake_modules/FindZLIB.cmake b/cmake_modules/FindZLIB.cmake index 6d29c55..6c09640 100644 --- a/cmake_modules/FindZLIB.cmake +++ b/cmake_modules/FindZLIB.cmake @@ -28,7 +28,11 @@ find_path (ZLIB_INCLUDE_DIR zlib.h HINTS NO_DEFAULT_PATH PATH_SUFFIXES "include") -find_library (ZLIB_LIBRARIES NAMES z HINTS +if (NOT ZLIB_STATIC_LIB_NAME) + set (ZLIB_STATIC_LIB_NAME z) +endif() + +find_library (ZLIB_LIBRARIES NAMES ${ZLIB_STATIC_LIB_NAME} HINTS ${_zlib_path} PATH_SUFFIXES "lib") @@ -37,8 +41,7 @@ if (ZLIB_INCLUDE_DIR AND ZLIB_LIBRARIES) get_filename_component (ZLIB_LIBS ${ZLIB_LIBRARIES} PATH ) set (ZLIB_HEADER_NAME zlib.h) set (ZLIB_HEADER ${ZLIB_INCLUDE_DIR}/${ZLIB_HEADER_NAME}) - set (ZLIB_LIB_NAME z) - set (ZLIB_STATIC_LIB ${ZLIB_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}) + set (ZLIB_STATIC_LIB ${ZLIB_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}) else () set (ZLIB_FOUND FALSE) endif () http://git-wip-us.apache.org/repos/asf/orc/blob/2e1161f9/cmake_modules/ThirdpartyToolchain.cmake ---------------------------------------------------------------------- diff --git a/cmake_modules/ThirdpartyToolchain.cmake b/cmake_modules/ThirdpartyToolchain.cmake index af5cc57..676ec7f 100644 --- a/cmake_modules/ThirdpartyToolchain.cmake +++ b/cmake_modules/ThirdpartyToolchain.cmake @@ -10,13 +10,21 @@ # See the License for the specific language governing permissions and # limitations under the License. -set (LZ4_VERSION "1.7.5") -set (SNAPPY_VERSION "1.1.4") -set (ZLIB_VERSION "1.2.11") -set (GTEST_VERSION "1.8.0") -set (PROTOBUF_VERSION "2.6.0") - -set (THIRDPARTY_DIR "${CMAKE_BINARY_DIR}/c++/libs/thirdparty") +set(LZ4_VERSION "1.7.5") +set(SNAPPY_VERSION "1.1.7") +set(ZLIB_VERSION "1.2.11") +set(GTEST_VERSION "1.8.0") +set(PROTOBUF_VERSION "3.5.1") + +set(THIRDPARTY_DIR "${CMAKE_BINARY_DIR}/c++/libs/thirdparty") +set(THIRDPARTY_LOG_OPTIONS LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + LOG_DOWNLOAD 1) +set(THIRDPARTY_CONFIGURE_COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}") +if (CMAKE_GENERATOR_TOOLSET) + list(APPEND THIRDPARTY_CONFIGURE_COMMAND -T "${CMAKE_GENERATOR_TOOLSET}") +endif () string(TOUPPER ${CMAKE_BUILD_TYPE} UPPERCASE_BUILD_TYPE) @@ -47,29 +55,19 @@ if (NOT "${SNAPPY_HOME}" STREQUAL "") find_package (Snappy REQUIRED) set(SNAPPY_VENDORED FALSE) else () - set (SNAPPY_PREFIX "${THIRDPARTY_DIR}/snappy_ep-install") - set (SNAPPY_HOME "${SNAPPY_PREFIX}") - set (SNAPPY_INCLUDE_DIR "${SNAPPY_PREFIX}/include") - set (SNAPPY_STATIC_LIB_NAME snappy) - set (SNAPPY_STATIC_LIB "${SNAPPY_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${SNAPPY_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") - set (SNAPPY_SRC_URL "https://github.com/google/snappy/releases/download/${SNAPPY_VERSION}/snappy-${SNAPPY_VERSION}.tar.gz") - if (${UPPERCASE_BUILD_TYPE} EQUAL "RELEASE") - set (SNAPPY_CXXFLAGS "CXXFLAGS='-DNDEBUG -O2'") - endif () + set(SNAPPY_HOME "${THIRDPARTY_DIR}/snappy_ep-install") + set(SNAPPY_INCLUDE_DIR "${SNAPPY_HOME}/include") + set(SNAPPY_STATIC_LIB "${SNAPPY_HOME}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}snappy${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(SNAPPY_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${SNAPPY_HOME} + -DBUILD_SHARED_LIBS=OFF) ExternalProject_Add (snappy_ep - CONFIGURE_COMMAND "./configure" "--disable-shared" "--prefix=${SNAPPY_PREFIX}" ${SNAPPY_CXXFLAGS} - BUILD_COMMAND ${MAKE} - BUILD_IN_SOURCE 1 - INSTALL_DIR ${SNAPPY_PREFIX} - URL ${SNAPPY_SRC_URL} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 + URL "https://github.com/google/snappy/archive/${SNAPPY_VERSION}.tar.gz" + CMAKE_ARGS ${SNAPPY_CMAKE_ARGS} + ${THIRDPARTY_LOG_OPTIONS} BUILD_BYPRODUCTS "${SNAPPY_STATIC_LIB}") - set (SNAPPY_VENDORED TRUE) + set(SNAPPY_VENDORED TRUE) endif () include_directories (SYSTEM ${SNAPPY_INCLUDE_DIR}) @@ -89,29 +87,29 @@ endif () if (NOT "${ZLIB_HOME}" STREQUAL "") find_package (ZLIB REQUIRED) - set (ZLIB_VENDORED FALSE) + set(ZLIB_VENDORED FALSE) else () - set (ZLIB_PREFIX "${THIRDPARTY_DIR}/zlib_ep-install") - set (ZLIB_HOME "${ZLIB_PREFIX}") - set (ZLIB_INCLUDE_DIR "${ZLIB_PREFIX}/include") - set (ZLIB_STATIC_LIB_NAME z) - set (ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") - set (ZLIB_SRC_URL "http://zlib.net/fossils/zlib-${ZLIB_VERSION}.tar.gz") - set (ZLIB_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX} - -DCMAKE_C_FLAGS=${EP_C_FLAGS} - -DBUILD_SHARED_LIBS=OFF) + set(ZLIB_PREFIX "${THIRDPARTY_DIR}/zlib_ep-install") + set(ZLIB_INCLUDE_DIR "${ZLIB_PREFIX}/include") + if (MSVC) + set(ZLIB_STATIC_LIB_NAME zlibstatic) + if (${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") + set(ZLIB_STATIC_LIB_NAME ${ZLIB_STATIC_LIB_NAME}d) + endif () + else () + set(ZLIB_STATIC_LIB_NAME z) + endif () + set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(ZLIB_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX} + -DBUILD_SHARED_LIBS=OFF) ExternalProject_Add (zlib_ep - URL ${ZLIB_SRC_URL} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 - BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}" - CMAKE_ARGS ${ZLIB_CMAKE_ARGS}) - - set (ZLIB_VENDORED TRUE) + URL "http://zlib.net/fossils/zlib-${ZLIB_VERSION}.tar.gz" + CMAKE_ARGS ${ZLIB_CMAKE_ARGS} + ${THIRDPARTY_LOG_OPTIONS} + BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}") + + set(ZLIB_VENDORED TRUE) endif () include_directories (SYSTEM ${ZLIB_INCLUDE_DIR}) @@ -131,28 +129,28 @@ endif () if (NOT "${LZ4_HOME}" STREQUAL "") find_package (LZ4 REQUIRED) - set (LZ4_VENDORED FALSE) + set(LZ4_VENDORED FALSE) else () - set (LZ4_PREFIX "${THIRDPARTY_DIR}/lz4_ep-install") - set (LZ4_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/lz4_ep-prefix/src/lz4_ep") - set (LZ4_INCLUDE_DIR "${LZ4_PREFIX}/include") - set (LZ4_STATIC_LIB_NAME lz4) - set (LZ4_STATIC_LIB "${LZ4_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${LZ4_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") - set (LZ4_SRC_URL "https://github.com/lz4/lz4/archive/v${LZ4_VERSION}.tar.gz") + set(LZ4_PREFIX "${THIRDPARTY_DIR}/lz4_ep-install") + set(LZ4_INCLUDE_DIR "${LZ4_PREFIX}/include") + set(LZ4_STATIC_LIB "${LZ4_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}lz4${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(LZ4_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LZ4_PREFIX} + -DBUILD_SHARED_LIBS=OFF) + + if (CMAKE_VERSION VERSION_GREATER "3.7") + set(LZ4_CONFIGURE SOURCE_SUBDIR "contrib/cmake_unofficial" CMAKE_ARGS ${LZ4_CMAKE_ARGS}) + else() + set(LZ4_CONFIGURE CONFIGURE_COMMAND "${THIRDPARTY_CONFIGURE_COMMAND}" ${LZ4_CMAKE_ARGS} + "${CMAKE_CURRENT_BINARY_DIR}/lz4_ep-prefix/src/lz4_ep/contrib/cmake_unofficial") + endif() ExternalProject_Add(lz4_ep - CONFIGURE_COMMAND "" - INSTALL_COMMAND make "PREFIX=${LZ4_PREFIX}" install - BUILD_IN_SOURCE 1 - BUILD_COMMAND ${MAKE} - URL ${LZ4_SRC_URL} - LOG_DOWNLOAD 1 - LOG_BUILD 1 - LOG_INSTALL 1 - BUILD_BYPRODUCTS ${LZ4_STATIC_LIB} - ) - - set (LZ4_VENDORED TRUE) + URL "https://github.com/lz4/lz4/archive/v${LZ4_VERSION}.tar.gz" + ${LZ4_CONFIGURE} + ${THIRDPARTY_LOG_OPTIONS} + BUILD_BYPRODUCTS ${LZ4_STATIC_LIB}) + + set(LZ4_VENDORED TRUE) endif () include_directories (SYSTEM ${LZ4_INCLUDE_DIR}) @@ -175,11 +173,10 @@ if (BUILD_CPP_TESTS) find_package (GTest REQUIRED) set (GTEST_VENDORED FALSE) else () - set (GTEST_PREFIX "${THIRDPARTY_DIR}/googletest_ep-install") - set (GTEST_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest_ep-prefix/src/googletest_ep") - set (GTEST_INCLUDE_DIR "${GTEST_PREFIX}/include") - set (GMOCK_STATIC_LIB "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}") - set (GTEST_SRC_URL "https://github.com/google/googletest/archive/release-${GTEST_VERSION}.tar.gz") + set(GTEST_PREFIX "${THIRDPARTY_DIR}/googletest_ep-install") + set(GTEST_INCLUDE_DIR "${GTEST_PREFIX}/include") + set(GMOCK_STATIC_LIB "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(GTEST_SRC_URL "https://github.com/google/googletest/archive/release-${GTEST_VERSION}.tar.gz") if(APPLE) set(GTEST_CMAKE_CXX_FLAGS " -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-value -Wno-ignored-attributes") else() @@ -194,15 +191,11 @@ if (BUILD_CPP_TESTS) ExternalProject_Add(googletest_ep BUILD_IN_SOURCE 1 URL ${GTEST_SRC_URL} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 - BUILD_BYPRODUCTS "${GMOCK_STATIC_LIB}" + ${THIRDPARTY_LOG_OPTIONS} CMAKE_ARGS ${GTEST_CMAKE_ARGS} - ) + BUILD_BYPRODUCTS "${GMOCK_STATIC_LIB}") - set (GTEST_VENDORED TRUE) + set(GTEST_VENDORED TRUE) endif () include_directories (SYSTEM ${GTEST_INCLUDE_DIR}) @@ -214,7 +207,7 @@ if (BUILD_CPP_TESTS) add_dependencies (gmock googletest_ep) endif () - set (GTEST_LIBRARIES gmock) + set(GTEST_LIBRARIES gmock) if (NOT APPLE AND NOT MSVC) list (APPEND GTEST_LIBRARIES pthread) endif () @@ -225,28 +218,38 @@ endif () if (NOT "${PROTOBUF_HOME}" STREQUAL "") find_package (Protobuf REQUIRED) - set (PROTOBUF_VENDORED FALSE) + set(PROTOBUF_VENDORED FALSE) else () - set (PROTOBUF_PREFIX "${THIRDPARTY_DIR}/protobuf_ep-install") - set (PROTOBUF_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep-prefix/src/protobuf_ep") - set (PROTOBUF_INCLUDE_DIR "${PROTOBUF_PREFIX}/include") - set (PROTOBUF_STATIC_LIB "${PROTOBUF_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}") - set (PROTOC_STATIC_LIB "${PROTOBUF_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}protoc${CMAKE_STATIC_LIBRARY_SUFFIX}") - set (PROTOBUF_EXECUTABLE "${PROTOBUF_PREFIX}/bin/protoc") - set (PROTOBUF_SRC_URL "https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-${PROTOBUF_VERSION}.tar.gz") + set(PROTOBUF_PREFIX "${THIRDPARTY_DIR}/protobuf_ep-install") + set(PROTOBUF_INCLUDE_DIR "${PROTOBUF_PREFIX}/include") + set(PROTOBUF_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PROTOBUF_PREFIX} + -DBUILD_SHARED_LIBS=OFF + -Dprotobuf_BUILD_TESTS=OFF) + if (MSVC) + set(PROTOBUF_STATIC_LIB_PREFIX lib) + list(APPEND PROTOBUF_CMAKE_ARGS -Dprotobuf_MSVC_STATIC_RUNTIME=OFF + -Dprotobuf_DEBUG_POSTFIX=) + else () + set(PROTOBUF_STATIC_LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) + endif () + set(PROTOBUF_STATIC_LIB "${PROTOBUF_PREFIX}/lib/${PROTOBUF_STATIC_LIB_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(PROTOC_STATIC_LIB "${PROTOBUF_PREFIX}/lib/${PROTOBUF_STATIC_LIB_PREFIX}protoc${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(PROTOBUF_EXECUTABLE "${PROTOBUF_PREFIX}/bin/protoc${CMAKE_EXECUTABLE_SUFFIX}") + + if (CMAKE_VERSION VERSION_GREATER "3.7") + set(PROTOBUF_CONFIGURE SOURCE_SUBDIR "cmake" CMAKE_ARGS ${PROTOBUF_CMAKE_ARGS}) + else() + set(PROTOBUF_CONFIGURE CONFIGURE_COMMAND "${THIRDPARTY_CONFIGURE_COMMAND}" ${PROTOBUF_CMAKE_ARGS} + "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep-prefix/src/protobuf_ep/cmake") + endif() ExternalProject_Add(protobuf_ep - CONFIGURE_COMMAND "./configure" "--disable-shared" "--prefix=${PROTOBUF_PREFIX}" - BUILD_IN_SOURCE 1 - URL ${PROTOBUF_SRC_URL} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 - BUILD_BYPRODUCTS "${PROTOBUF_STATIC_LIB}" "${PROTOC_STATIC_LIB}" - ) - - set (PROTOBUF_VENDORED TRUE) + URL "https://github.com/google/protobuf/archive/v${PROTOBUF_VERSION}.tar.gz" + ${PROTOBUF_CONFIGURE} + ${THIRDPARTY_LOG_OPTIONS} + BUILD_BYPRODUCTS "${PROTOBUF_STATIC_LIB}" "${PROTOC_STATIC_LIB}") + + set(PROTOBUF_VENDORED TRUE) endif () include_directories (SYSTEM ${PROTOBUF_INCLUDE_DIR})
