Warning, /sdk/dferry/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 project(dferry)
0002
0003 cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
0004 list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
0005
0006 if (CMAKE_COMPILER_IS_GNUCXX)
0007 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Wextra -Wzero-as-null-pointer-constant")
0008 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-error=unused-result -Wno-error=suggest-override")
0009 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden")
0010 endif()
0011 set(CMAKE_CXX_STANDARD 11)
0012
0013 if (WIN32 AND CMAKE_SYSTEM_VERSION VERSION_LESS 6.0)
0014 message(FATAL_ERROR "Windows Vista or later is required.")
0015 endif()
0016
0017 include(TestBigEndian)
0018 if (BIGENDIAN)
0019 add_definitions(-DBIGENDIAN)
0020 endif()
0021 if (UNIX)
0022 add_definitions(-D__unix__) # help for platforms that don't define this standard macro
0023 endif()
0024
0025 option(DFERRY_BUILD_ANALYZER "Build the dfer-analyzer bus analyzer GUI" TRUE)
0026 option(DFERRY_BUILD_CLIENTLIB "Build (incomplete, experimental) introspection support" FALSE)
0027
0028 include(GNUInstallDirs)
0029
0030 if (WIN32)
0031 # Windows doesn't have an RPATH equivalent, so just make sure that all .dll and .exe files
0032 # are located together, so that the .exes find the .dlls at runtime
0033 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
0034 else()
0035 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
0036
0037 set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) # add libdfer install dir to rpath
0038 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # add Qt (etc.) dir to rpath, if necessary
0039 endif()
0040
0041 include_directories(${CMAKE_SOURCE_DIR}/client
0042 ${CMAKE_SOURCE_DIR}/connection
0043 ${CMAKE_SOURCE_DIR}/events
0044 ${CMAKE_SOURCE_DIR}/serialization
0045 ${CMAKE_SOURCE_DIR}/transport
0046 ${CMAKE_SOURCE_DIR}/util)
0047
0048 set(DFER_SOURCES
0049 connection/authclient.cpp
0050 connection/connectaddress.cpp
0051 connection/connection.cpp
0052 connection/iconnectionstatelistener.cpp
0053 connection/imessagereceiver.cpp
0054 connection/inewconnectionlistener.cpp
0055 connection/pendingreply.cpp
0056 connection/server.cpp
0057 events/event.cpp
0058 events/eventdispatcher.cpp
0059 events/foreigneventloopintegrator.cpp
0060 events/ieventpoller.cpp
0061 events/iioeventforwarder.cpp
0062 events/iioeventlistener.cpp
0063 events/iioeventsource.cpp
0064 events/platformtime.cpp
0065 events/timer.cpp
0066 serialization/arguments.cpp
0067 serialization/argumentsreader.cpp
0068 serialization/argumentswriter.cpp
0069 serialization/message.cpp
0070 transport/ipserver.cpp
0071 transport/ipsocket.cpp
0072 transport/ipresolver.cpp
0073 transport/iserver.cpp
0074 transport/itransport.cpp
0075 transport/itransportlistener.cpp
0076 transport/stringtools.cpp
0077 util/error.cpp
0078 util/icompletionlistener.cpp
0079 util/types.cpp)
0080 if (UNIX)
0081 list(APPEND DFER_SOURCES
0082 transport/localserver.cpp
0083 transport/localsocket.cpp)
0084 endif()
0085
0086 set(DFER_PUBLIC_HEADERS
0087 connection/connectaddress.h
0088 connection/connection.h
0089 connection/iconnectionstatelistener.h
0090 connection/imessagereceiver.h
0091 connection/inewconnectionlistener.h
0092 connection/pendingreply.h
0093 connection/server.h
0094 client/introspection.h
0095 events/eventdispatcher.h
0096 events/foreigneventloopintegrator.h
0097 events/timer.h
0098 serialization/message.h
0099 serialization/arguments.h
0100 util/commutex.h
0101 util/error.h
0102 util/export.h
0103 util/icompletionlistener.h
0104 util/types.h
0105 util/valgrind-noop.h)
0106
0107 set(DFER_PRIVATE_HEADERS
0108 connection/authclient.h
0109 events/event.h
0110 events/ieventpoller.h
0111 events/iioeventforwarder.h
0112 events/iioeventlistener.h
0113 events/iioeventsource.h
0114 events/platformtime.h
0115 serialization/basictypeio.h
0116 transport/ipserver.h
0117 transport/ipsocket.h
0118 transport/ipresolver.h
0119 transport/iserver.h
0120 transport/itransport.h
0121 transport/itransportlistener.h
0122 transport/platform.h
0123 transport/stringtools.h)
0124 if (UNIX)
0125 list(APPEND DFER_PRIVATE_HEADERS
0126 transport/localserver.h
0127 transport/localsocket.h)
0128 endif()
0129 if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
0130 list(APPEND DFER_SOURCES events/epolleventpoller.cpp)
0131 list(APPEND DFER_PRIVATE_HEADERS events/epolleventpoller.h)
0132 elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
0133 list(APPEND DFER_SOURCES events/selecteventpoller_win32.cpp util/winutil.cpp)
0134 list(APPEND DFER_PRIVATE_HEADERS events/selecteventpoller_win32.h util/winutil.h)
0135 elseif(UNIX)
0136 list(APPEND DFER_SOURCES events/selecteventpoller_unix.cpp)
0137 list(APPEND DFER_PRIVATE_HEADERS events/selecteventpoller_unix.h)
0138 else()
0139 message(FATAL_ERROR "This operating system is not supported.")
0140 endif()
0141
0142 set(DFER_HEADERS ${DFER_PUBLIC_HEADERS} ${DFER_PRIVATE_HEADERS})
0143
0144 add_library(dfer SHARED ${DFER_SOURCES} ${DFER_HEADERS})
0145 target_include_directories(dfer INTERFACE "$<INSTALL_INTERFACE:include/dferry>")
0146 if (WIN32)
0147 target_link_libraries(dfer PRIVATE ws2_32)
0148 endif()
0149
0150 if (DFER_BUILD_CLIENTLIB)
0151 find_package(LibTinyxml2 REQUIRED) # for the introspection parser in dferclient
0152 include_directories(${LIBTINYXML2_INCLUDE_DIRS})
0153 endif()
0154
0155 find_package(Valgrind) # for checking homemade multithreading primitives
0156 if (VALGRIND_INCLUDE_DIR)
0157 add_definitions(-DHAVE_VALGRIND)
0158 include_directories(${VALGRIND_INCLUDE_DIR})
0159 endif()
0160
0161 # for small_vector, optional; small_vector appeared in 1.58
0162 find_package(Boost 1.58)
0163 if (BOOST_FOUND)
0164 add_definitions(-DHAVE_BOOST)
0165 endif()
0166
0167 set(DFERCLIENT_SOURCES
0168 client/introspection.h)
0169
0170 set(DFERCLIENT_HEADERS
0171 client/introspection.cpp)
0172
0173 if (DFER_BUILD_CLIENTLIB)
0174 add_library(dferclient SHARED ${DFERCLIENT_SOURCES} ${DFERCLIENT_HEADERS})
0175 target_include_directories(dferclient INTERFACE "$<INSTALL_INTERFACE:include/dferry>")
0176 target_link_libraries(dferclient PUBLIC dfer PRIVATE ${LIBTINYXML2_LIBRARIES})
0177 endif()
0178
0179 install(TARGETS dfer EXPORT dferryExports DESTINATION ${CMAKE_INSTALL_LIBDIR})
0180 install(FILES ${DFER_PUBLIC_HEADERS} DESTINATION include/dferry)
0181
0182 enable_testing() # need this here to get the "test" target in the toplevel build dir
0183 add_subdirectory(tests)
0184 add_subdirectory(applications)
0185
0186 set(configModuleLocation "lib/cmake/dferry")
0187
0188 install(EXPORT dferryExports DESTINATION "${configModuleLocation}" FILE dferryTargets.cmake)
0189
0190 file(WRITE ${PROJECT_BINARY_DIR}/dferryConfig.cmake
0191 "include(\"\${CMAKE_CURRENT_LIST_DIR}/dferryTargets.cmake\")")
0192 install(FILES "${PROJECT_BINARY_DIR}/dferryConfig.cmake"
0193 DESTINATION "${configModuleLocation}")