CMakeLists.txt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #
  2. # Licensed to the Apache Software Foundation (ASF) under one
  3. # or more contributor license agreements. See the NOTICE file
  4. # distributed with this work for additional information
  5. # regarding copyright ownership. The ASF licenses this file
  6. # to you under the Apache License, Version 2.0 (the
  7. # "License"); you may not use this file except in compliance
  8. # with the License. You may obtain a copy of the License at
  9. #
  10. # http://www.apache.org/licenses/LICENSE-2.0
  11. #
  12. # Unless required by applicable law or agreed to in writing, software
  13. # distributed under the License is distributed on an "AS IS" BASIS,
  14. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. # See the License for the specific language governing permissions and
  16. # limitations under the License.
  17. #
  18. project (libhdfspp)
  19. enable_testing()
  20. include (CTest)
  21. find_package(Doxygen)
  22. find_package(OpenSSL REQUIRED)
  23. find_package(Protobuf REQUIRED)
  24. find_package(Threads)
  25. find_program(MEMORYCHECK_COMMAND valgrind HINTS ${VALGRIND_DIR} )
  26. set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full --error-exitcode=1")
  27. message(STATUS "valgrind location: ${MEMORYCHECK_COMMAND}")
  28. if (REQUIRE_VALGRIND AND MEMORYCHECK_COMMAND MATCHES "MEMORYCHECK_COMMAND-NOTFOUND" )
  29. message(FATAL_ERROR "valgrind was required but not found. "
  30. "The path can be included via a -DVALGRIND_DIR=... flag passed to CMake.")
  31. endif (REQUIRE_VALGRIND AND MEMORYCHECK_COMMAND MATCHES "MEMORYCHECK_COMMAND-NOTFOUND" )
  32. add_definitions(-DASIO_STANDALONE -DASIO_CPP11_DATE_TIME)
  33. if(UNIX)
  34. set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -std=c++11 -g -fPIC -fno-strict-aliasing")
  35. endif()
  36. # Mac OS 10.7 and later deprecates most of the methods in OpenSSL.
  37. # Add -Wno-deprecated-declarations to avoid the warnings.
  38. if(APPLE)
  39. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Wno-deprecated-declarations -Wno-unused-local-typedef")
  40. endif()
  41. if(DOXYGEN_FOUND)
  42. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY)
  43. add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile
  44. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  45. COMMENT "Generating API documentation with Doxygen" VERBATIM)
  46. endif(DOXYGEN_FOUND)
  47. include_directories(
  48. include
  49. lib
  50. ../libhdfs/include
  51. )
  52. include_directories( SYSTEM
  53. ${PROJECT_BINARY_DIR}/lib/proto
  54. third_party/asio-1.10.2/include
  55. third_party/rapidxml-1.13
  56. third_party/gmock-1.7.0
  57. third_party/tr2
  58. third_party/protobuf
  59. ${OPENSSL_INCLUDE_DIR}
  60. )
  61. set(PROTO_HDFS_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../../hadoop-hdfs-client/src/main/proto)
  62. set(PROTO_HADOOP_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../../../hadoop-common-project/hadoop-common/src/main/proto)
  63. set(PROTO_HADOOP_TEST_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../../../hadoop-common-project/hadoop-common/src/test/proto)
  64. add_subdirectory(third_party/gmock-1.7.0)
  65. add_subdirectory(lib)
  66. add_subdirectory(tests)
  67. # create an empty file; hadoop_add_dual_library wraps add_library which
  68. # requires at least one file as an argument
  69. set(EMPTY_FILE_CC ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/empty.cc)
  70. file(WRITE ${EMPTY_FILE_CC} "")
  71. hadoop_add_dual_library(hdfspp ${EMPTY_FILE_CC})
  72. if(NEED_LINK_DL)
  73. set(LIB_DL dl)
  74. endif()
  75. SET(LIBHDFSPP_SUBLIBS bindings_c fs rpc reader proto common)
  76. IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
  77. # linking a shared library from static ones requires --whole-archive
  78. SET(LIBHDFSPP_SUBLIBS -Wl,--whole-archive ${LIBHDFSPP_SUBLIBS} -Wl,--no-whole-archive)
  79. ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
  80. hadoop_target_link_dual_libraries(hdfspp
  81. ${LIBHDFSPP_SUBLIBS}
  82. ${LIB_DL}
  83. ${PROTOBUF_LIBRARY}
  84. ${OPENSSL_LIBRARIES}
  85. )