blob: b45ec3febdccc949cf01d54620c46470e871155e [file] [log] [blame]
#
# 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.
#
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(libhdfs3_VERSION_MAJOR 2)
SET(libhdfs3_VERSION_MINOR 2)
SET(libhdfs3_VERSION_PATCH 28)
SET(libhdfs3_VERSION_STRING "${libhdfs3_VERSION_MAJOR}.${libhdfs3_VERSION_MINOR}.${libhdfs3_VERSION_PATCH}")
SET(libhdfs3_VERSION_API 1)
SET(libhdfs3_ROOT_SOURCES_DIR ${CMAKE_SOURCE_DIR}/src)
SET(libhdfs3_COMMON_SOURCES_DIR ${libhdfs3_ROOT_SOURCES_DIR}/common)
IF(ENABLE_DEBUG)
SET(libhdfs3_VERSION_STRING "${libhdfs3_VERSION_STRING}d")
ENDIF(ENABLE_DEBUG)
IF(MSVC)
SET(libhdfs3_OS_PLATFORM_DIR ${libhdfs3_ROOT_SOURCES_DIR}/../os/windows)
ELSE(MSVC)
SET(libhdfs3_OS_PLATFORM_DIR ${libhdfs3_ROOT_SOURCES_DIR}/../os/posix)
ENDIF(MSVC)
CONFIGURE_FILE(build.h.in build.h)
CONFIGURE_FILE(doxyfile.in doxyfile)
AUTO_SOURCES(files "*.cc" "RECURSE" "${CMAKE_CURRENT_SOURCE_DIR}")
LIST(APPEND LIBHDFS3_SOURCES ${files})
AUTO_SOURCES(files "*.c" "RECURSE" "${CMAKE_CURRENT_SOURCE_DIR}")
LIST(APPEND LIBHDFS3_SOURCES ${files})
AUTO_SOURCES(files "*.h" "RECURSE" "${CMAKE_CURRENT_SOURCE_DIR}")
LIST(APPEND LIBHDFS3_SOURCES ${files})
SET(LIBHDFS3_SOURCES
${LIBHDFS3_SOURCES}
${libhdfs3_OS_PLATFORM_DIR}/Thread.cc
${libhdfs3_OS_PLATFORM_DIR}/StackPrinter.cc
${libhdfs3_OS_PLATFORM_DIR}/Platform.cc
)
IF(MSVC)
SET(LIBHDFS3_SOURCES
${LIBHDFS3_SOURCES}
${libhdfs3_OS_PLATFORM_DIR}/sys/mman.c)
ENDIF(MSVC)
AUTO_SOURCES(libhdfs3_PROTO_FILES "proto/*.proto" "RECURSE" "${CMAKE_CURRENT_SOURCE_DIR}")
SET(libhdfs3_PROTO_FILES ${libhdfs3_PROTO_FILES} PARENT_SCOPE)
INCLUDE(GenerateProtobufs.cmake)
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}")
SET(LIBHDFS_SRC_DIR ${HADOOP_TOP_DIR}/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/)
IF(NOT MSVC)
# In windows, there will a conflict with Exception.h native/libhdfs.
INCLUDE_DIRECTORIES(${LIBHDFS_SRC_DIR})
ENDIF(NOT MSVC)
SET(HEADER
${LIBHDFS_SRC_DIR}/hdfs.h
client/BlockLocation.h
client/DirectoryIterator.h
client/FileStatus.h
client/FileSystem.h
client/FileSystemStats.h
client/InputStream.h
client/Permission.h
common/Config.h
common/SharedPtr.h
common/Status.h
)
ADD_LIBRARY(libhdfs3-static STATIC ${LIBHDFS3_SOURCES} ${LIBHDFS3_PROTO_SOURCES} ${LIBHDFS3_PROTO_HEADERS})
ADD_LIBRARY(libhdfs3-shared SHARED ${LIBHDFS3_SOURCES} ${LIBHDFS3_PROTO_SOURCES} ${LIBHDFS3_PROTO_HEADERS})
ADD_CUSTOM_COMMAND(
TARGET libhdfs3-shared libhdfs3-static
PRE_BUILD
COMMAND echo ${libhdfs3_VERSION_STRING} > version
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
IF(NOT MSVC)
# pthread is not available in Windows.
TARGET_LINK_LIBRARIES(libhdfs3-static pthread)
TARGET_LINK_LIBRARIES(libhdfs3-shared pthread)
ENDIF(NOT MSVC)
IF(NEED_BOOST)
IF(MSVC)
# We already find boost libraries in options.cmake
# therefore just need to link here.
TARGET_LINK_LIBRARIES(libhdfs3-static ${Boost_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-shared ${Boost_LIBRARIES})
ELSE(MSVC)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(libhdfs3-static boost_thread)
TARGET_LINK_LIBRARIES(libhdfs3-static boost_chrono)
TARGET_LINK_LIBRARIES(libhdfs3-static boost_system)
TARGET_LINK_LIBRARIES(libhdfs3-static boost_atomic)
TARGET_LINK_LIBRARIES(libhdfs3-static boost_iostreams)
TARGET_LINK_LIBRARIES(libhdfs3-shared boost_thread)
TARGET_LINK_LIBRARIES(libhdfs3-shared boost_chrono)
TARGET_LINK_LIBRARIES(libhdfs3-shared boost_system)
TARGET_LINK_LIBRARIES(libhdfs3-shared boost_atomic)
TARGET_LINK_LIBRARIES(libhdfs3-shared boost_iostreams)
ENDIF(MSVC)
ENDIF(NEED_BOOST)
IF(NEED_GCCEH)
TARGET_LINK_LIBRARIES(libhdfs3-static gcc_eh)
TARGET_LINK_LIBRARIES(libhdfs3-shared gcc_eh)
ENDIF(NEED_GCCEH)
IF(OS_LINUX)
TARGET_LINK_LIBRARIES(libhdfs3-static uuid)
TARGET_LINK_LIBRARIES(libhdfs3-shared uuid)
ENDIF(OS_LINUX)
INCLUDE_DIRECTORIES(${libhdfs3_ROOT_SOURCES_DIR})
INCLUDE_DIRECTORIES(${libhdfs3_OS_PLATFORM_DIR})
INCLUDE_DIRECTORIES(${libhdfs3_COMMON_SOURCES_DIR})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${KERBEROS_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${GSASL_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/mock)
INCLUDE_DIRECTORIES(${EXPAT_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(libhdfs3-static ${PROTOBUF_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-static ${LIBXML2_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-static ${KERBEROS_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-static ${GSASL_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-static ${EXPAT_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-shared ${PROTOBUF_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-shared ${LIBXML2_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-shared ${KERBEROS_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-shared ${GSASL_LIBRARIES})
TARGET_LINK_LIBRARIES(libhdfs3-shared ${EXPAT_LIBRARIES})
SET_TARGET_PROPERTIES(libhdfs3-static PROPERTIES OUTPUT_NAME "hdfs3")
SET_TARGET_PROPERTIES(libhdfs3-shared PROPERTIES OUTPUT_NAME "hdfs3")
IF(NEED_BOOST)
SET_TARGET_PROPERTIES(libhdfs3-shared libhdfs3-static PROPERTIES LINK_FLAGS "-L${Boost_LIBRARY_DIRS}")
ENDIF(NEED_BOOST)
SET_TARGET_PROPERTIES(libhdfs3-shared PROPERTIES
VERSION ${libhdfs3_VERSION_MAJOR}.${libhdfs3_VERSION_MINOR}.${libhdfs3_VERSION_PATCH}
SOVERSION ${libhdfs3_VERSION_API})
INSTALL(TARGETS libhdfs3-static libhdfs3-shared
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
INSTALL(FILES ${HEADER} DESTINATION include/hdfs)
SET(LIBHDFS3_SOURCES ${LIBHDFS3_SOURCES} PARENT_SCOPE)
SET(libhdfs3_PLATFORM_HEADER_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
SET(libhdfs3_ROOT_SOURCES_DIR ${libhdfs3_ROOT_SOURCES_DIR} PARENT_SCOPE)
SET(libhdfs3_COMMON_SOURCES_DIR ${libhdfs3_COMMON_SOURCES_DIR} PARENT_SCOPE)