blob: f957bcd158546d5b985d991b43217bd713ec553f [file] [log] [blame]
set(BUILD_PROTOBUF_C_COMPILER ON
CACHE BOOL "build protobuf-c compiler (aka protoc-c)")
if ( BUILD_PROTOBUF_C_COMPILER )
find_package(Protobuf REQUIRED)
include_directories(${PROTOBUF_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR})
set(PROTOC_C_SOURCES
google/protobuf/compiler/c/c_service.cc
google/protobuf/compiler/c/c_helpers.cc
google/protobuf/compiler/c/c_enum.cc
google/protobuf/compiler/c/c_enum_field.cc
google/protobuf/compiler/c/c_string_field.cc
google/protobuf/compiler/c/c_primitive_field.cc
google/protobuf/compiler/c/c_extension.cc
google/protobuf/compiler/c/c_file.cc
google/protobuf/compiler/c/c_field.cc
google/protobuf/compiler/c/c_message.cc
google/protobuf/compiler/c/c_generator.cc
google/protobuf/compiler/c/c_message_field.cc
google/protobuf/compiler/c/main.cc
google/protobuf/compiler/c/c_bytes_field.cc)
add_executable(protoc-c ${PROTOC_C_SOURCES})
target_link_libraries(protoc-c ${PROTOBUF_LIBRARY}
${PROTOBUF_PROTOC_LIBRARY})
if ( UNIX )
find_package(Threads REQUIRED)
target_link_libraries(protoc-c ${CMAKE_THREAD_LIBS_INIT})
endif()
install(TARGETS protoc-c DESTINATION ${PROTOBUF_C_INSTALL_BINDIR})
endif()
include(CheckIncludeFiles)
check_include_files("alloca.h" HAVE_ALLOCA_H)
check_include_files("malloc.h" HAVE_MALLOC_H)
check_include_files("sys/poll.h" HAVE_SYS_POLL_H)
check_include_files("sys/select.h" HAVE_SYS_SELECT_H)
check_include_files("inttypes.h" HAVE_INTTYPES_H)
check_include_files("sys/uio.h" HAVE_SYS_UIO_H)
check_include_files("unistd.h" HAVE_UNISTD_H)
check_include_files("io.h" HAVE_IO_H)
include(TestBigEndian)
test_big_endian(IS_BIG_ENDIAN)
if ( NOT IS_BIG_ENDIAN )
set(IS_LITTLE_ENDIAN 1)
endif()
add_definitions(-DHAVE_PROTOBUF_C_CONFIG_H=1)
configure_file(google/protobuf-c/protobuf-c-config.h.in
google/protobuf-c/protobuf-c-config.h)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/google/protobuf-c)
set(BUILD_PROTOBUF_C_STATIC_LIB ON
CACHE BOOL "build static protobuf-c library")
set(BUILD_PROTOBUF_C_SHARED_LIB ON
CACHE BOOL "build shared protobuf-c library")
if ( WIN32 )
set(PROTOBUF_C_SOURCES
google/protobuf-c/protobuf-c-data-buffer.c
google/protobuf-c/protobuf-c.c)
else()
set(PROTOBUF_C_SOURCES
google/protobuf-c/protobuf-c-dispatch.c
google/protobuf-c/protobuf-c-data-buffer.c
google/protobuf-c/protobuf-c-rpc.c
google/protobuf-c/protobuf-c.c)
endif()
if ( BUILD_PROTOBUF_C_STATIC_LIB )
add_library(protobuf-c-static STATIC ${PROTOBUF_C_SOURCES})
install(TARGETS protobuf-c-static
ARCHIVE DESTINATION ${PROTOBUF_C_INSTALL_LIBDIR})
set_target_properties(protobuf-c-static PROPERTIES OUTPUT_NAME protobuf-c)
get_target_property(DIRECTORY protobuf-c-static ARCHIVE_OUTPUT_DIRECTORY)
set_target_properties(protobuf-c-static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
${DIRECTORY}/static)
endif()
if ( BUILD_PROTOBUF_C_SHARED_LIB )
add_library(protobuf-c-shared SHARED ${PROTOBUF_C_SOURCES})
install(TARGETS protobuf-c-shared
RUNTIME DESTINATION ${PROTOBUF_C_INSTALL_BINDIR}
LIBRARY DESTINATION ${PROTOBUF_C_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${PROTOBUF_C_INSTALL_LIBDIR}/dllimport)
set_target_properties(protobuf-c-shared PROPERTIES OUTPUT_NAME protobuf-c)
set_target_properties(protobuf-c-shared PROPERTIES VERSION
${PROTOBUF_C_VERSION})
get_target_property(DIRECTORY protobuf-c-shared ARCHIVE_OUTPUT_DIRECTORY)
set_target_properties(protobuf-c-shared PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
${DIRECTORY}/shared)
get_target_property(DIRECTORY protobuf-c-shared LIBRARY_OUTPUT_DIRECTORY)
set_target_properties(protobuf-c-shared PROPERTIES LIBRARY_OUTPUT_DIRECTORY
${DIRECTORY}/shared)
if ( WIN32 )
set_target_properties(protobuf-c-shared PROPERTIES COMPILE_DEFINITIONS
"PROTOBUF_C_USE_SHARED_LIB;PROTOBUF_C_EXPORT")
endif()
endif()
if ( BUILD_PROTOBUF_C_STATIC_LIB OR BUILD_PROTOBUF_C_SHARED_LIB )
if ( WIN32 )
set(PROTOBUF_C_PUBLIC_HEADERS
google/protobuf-c/protobuf-c.h
google/protobuf-c/protobuf-c-private.h)
else()
set(PROTOBUF_C_PUBLIC_HEADERS
google/protobuf-c/protobuf-c.h
google/protobuf-c/protobuf-c-private.h
google/protobuf-c/protobuf-c-dispatch.h
google/protobuf-c/protobuf-c-rpc.h)
endif()
install(FILES ${PROTOBUF_C_PUBLIC_HEADERS} DESTINATION
${PROTOBUF_C_INSTALL_INCLUDEDIR})
endif()
add_subdirectory(test)