Skip to content

Commit

Permalink
Merge pull request #1626 from real-logic/cmake-config
Browse files Browse the repository at this point in the history
[C] Add Cmake Config, Targets, Versions
  • Loading branch information
marc-adaptive authored Jul 13, 2024
2 parents da02308 + 85cdc96 commit dd302d5
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 44 deletions.
34 changes: 34 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,8 @@ add_definitions(-DAERON_VERSION_MINOR=${aeron_VERSION_MINOR})
add_definitions(-DAERON_VERSION_PATCH=${aeron_VERSION_PATCH})
add_definitions(-DAERON_VERSION_GITSHA="${AERON_VERSION_GITSHA}")

include(GNUInstallDirs)

# all UNIX-based platform compiler flags
if (UNIX)
add_compile_options(-Wall -Wpedantic -Wextra -Wno-unused-parameter -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer)
Expand Down Expand Up @@ -366,3 +368,35 @@ set(CPACK_PACKAGE_VERSION_PATCH "${aeron_VERSION_PATCH}")

set(CPACK_GENERATOR "TGZ;STGZ")
include(CPack)

##########################################################
# export targets
include(CMakePackageConfigHelpers)

install(EXPORT AeronTargets
FILE AeronTargets.cmake
NAMESPACE Aeron::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Aeron
)

write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/AeronConfigVersion.cmake"
VERSION "${AERON_VERSION_FROM_FILE}"
COMPATIBILITY ExactVersion
)

configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/AeronConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Aeron
)

install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/AeronConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/AeronConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Aeron
)

export(EXPORT AeronTargets
FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/AeronTargets.cmake"
NAMESPACE Aeron::
)
9 changes: 9 additions & 0 deletions Config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@PACKAGE_INIT@

include(CMakeFindDependencyMacro)
find_package(Threads)
find_package(Java)

include("${CMAKE_CURRENT_LIST_DIR}/AeronTargets.cmake")

check_required_components(Aeron)
18 changes: 12 additions & 6 deletions aeron-archive/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,12 @@ add_dependencies(aeron_archive_client codecs)
add_dependencies(aeron_archive_client_wrapper codecs)

target_include_directories(aeron_archive_client
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${ARCHIVE_CODEC_TARGET_DIR})
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
PRIVATE "$<BUILD_INTERFACE:${ARCHIVE_CODEC_TARGET_DIR}>")

target_include_directories(aeron_archive_client_wrapper
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${ARCHIVE_CODEC_TARGET_DIR})
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
PRIVATE "$<BUILD_INTERFACE:${ARCHIVE_CODEC_TARGET_DIR}>")

if (NOT WIN32)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
Expand All @@ -125,6 +125,12 @@ target_link_libraries(aeron_archive_client_wrapper
INTERFACE ${CMAKE_THREAD_LIBS_INIT})

if (AERON_INSTALL_TARGETS)
install(TARGETS aeron_archive_client ARCHIVE DESTINATION lib)
install(DIRECTORY . DESTINATION include FILES_MATCHING PATTERN "*.h")
install(
TARGETS aeron_archive_client aeron_archive_client_wrapper
EXPORT AeronTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")
install(DIRECTORY ${ARCHIVE_CODEC_TARGET_DIR}/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")
endif ()
13 changes: 7 additions & 6 deletions aeron-client/src/main/c/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,11 @@ set(HEADERS

add_library(aeron SHARED ${SOURCE} ${HEADERS})
target_include_directories(aeron
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/aeron>")

add_library(aeron_static STATIC ${SOURCE} ${HEADERS})
target_include_directories(aeron_static
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/aeron>")

set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDISABLE_BOUNDS_CHECKS")

Expand Down Expand Up @@ -234,8 +234,9 @@ target_link_libraries(
if (AERON_INSTALL_TARGETS)
install(
TARGETS aeron aeron_static
RUNTIME DESTINATION lib
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(DIRECTORY . DESTINATION include/aeron FILES_MATCHING PATTERN "*.h")
EXPORT AeronTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aeron FILES_MATCHING PATTERN "*.h")
endif ()
20 changes: 11 additions & 9 deletions aeron-client/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,10 @@ add_library(aeron_client STATIC ${SOURCE} ${HEADERS})
add_library(aeron_client_shared SHARED ${SOURCE} ${HEADERS})

target_include_directories(aeron_client
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")

target_include_directories(aeron_client_shared
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")

if (MSVC)
string(REPLACE "/" "\\\\" NATIVE_PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}")
Expand All @@ -155,12 +155,12 @@ endif ()
target_compile_definitions(aeron_client
PUBLIC $<$<NOT:$<CONFIG:Debug>>:DISABLE_BOUNDS_CHECKS>
# relative file paths for use in exceptions
PUBLIC "__PROJECT_SOURCE_DIR__=\"${NATIVE_PROJECT_SOURCE_DIR}\"")
PUBLIC "$<BUILD_INTERFACE:__PROJECT_SOURCE_DIR__=\"${NATIVE_PROJECT_SOURCE_DIR}\">")

target_compile_definitions(aeron_client_shared
PUBLIC $<$<NOT:$<CONFIG:Debug>>:DISABLE_BOUNDS_CHECKS>
# relative file paths for use in exceptions
PUBLIC "__PROJECT_SOURCE_DIR__=\"${NATIVE_PROJECT_SOURCE_DIR}\""
PUBLIC "$<BUILD_INTERFACE:__PROJECT_SOURCE_DIR__=\"${NATIVE_PROJECT_SOURCE_DIR}\">"
PUBLIC CLIENT_SHARED DLL_EXPORT)

if (NOT WIN32)
Expand All @@ -175,9 +175,11 @@ target_link_libraries(aeron_client_shared
INTERFACE ${CMAKE_THREAD_LIBS_INIT})

if (AERON_INSTALL_TARGETS)
install(TARGETS aeron_client_shared aeron_client
RUNTIME DESTINATION lib
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(DIRECTORY . DESTINATION include FILES_MATCHING PATTERN "*.h")
install(
TARGETS aeron_client_shared aeron_client
EXPORT AeronTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")
endif ()
28 changes: 16 additions & 12 deletions aeron-client/src/main/cpp_wrapper/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ SET(HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/BufferBuilder.h
${CMAKE_CURRENT_SOURCE_DIR}/ChannelUri.h
${CMAKE_CURRENT_SOURCE_DIR}/ChannelUriStringBuilder.h
${CMAKE_CURRENT_SOURCE_DIR}/ClientConductor.h
${CMAKE_CURRENT_SOURCE_DIR}/CncFileDescriptor.h
${CMAKE_CURRENT_SOURCE_DIR}/CncFileReader.h
${CMAKE_CURRENT_SOURCE_DIR}/Context.h
Expand All @@ -37,17 +38,17 @@ SET(HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/ImageFragmentAssembler.h
${CMAKE_CURRENT_SOURCE_DIR}/Publication.h
${CMAKE_CURRENT_SOURCE_DIR}/Subscription.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/AgentRunner.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/AgentInvoker.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/AgentRunner.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/Atomic64.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/AtomicBuffer.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/AtomicCounter.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/BackOffIdleStrategy.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/BusySpinIdleStrategy.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/CountersReader.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/NoOpIdleStrategy.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/SleepingIdleStrategy.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/YieldingIdleStrategy.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/BackOffIdleStrategy.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/atomic/Atomic64_gcc_cpp11.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/atomic/Atomic64_gcc_x86_64.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/atomic/Atomic64_msvc.h
Expand All @@ -59,27 +60,27 @@ SET(HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/logbuffer/Header.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/logbuffer/LogBufferDescriptor.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/logbuffer/TermReader.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/status/ReadablePosition.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/status/Position.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/status/UnsafeBufferPosition.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/status/ReadablePosition.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/status/StatusIndicatorReader.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/status/UnsafeBufferPosition.h
${CMAKE_CURRENT_SOURCE_DIR}/util/BitUtil.h
${CMAKE_CURRENT_SOURCE_DIR}/util/CommandOption.h
${CMAKE_CURRENT_SOURCE_DIR}/util/CommandOptionParser.h
${CMAKE_CURRENT_SOURCE_DIR}/util/StringUtil.h
${CMAKE_CURRENT_SOURCE_DIR}/util/Exceptions.h
${CMAKE_CURRENT_SOURCE_DIR}/util/Index.h
${CMAKE_CURRENT_SOURCE_DIR}/util/LangUtil.h
${CMAKE_CURRENT_SOURCE_DIR}/util/MacroUtil.h
${CMAKE_CURRENT_SOURCE_DIR}/util/MemoryMappedFile.h
${CMAKE_CURRENT_SOURCE_DIR}/util/Platform.h
${CMAKE_CURRENT_SOURCE_DIR}/util/ScopeUtils.h
${CMAKE_CURRENT_SOURCE_DIR}/util/BitUtil.h
${CMAKE_CURRENT_SOURCE_DIR}/util/Index.h
${CMAKE_CURRENT_SOURCE_DIR}/util/Platform.h)
${CMAKE_CURRENT_SOURCE_DIR}/util/StringUtil.h)

# header only library
add_library(aeron_client_wrapper INTERFACE)
target_include_directories(aeron_client_wrapper INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

target_sources(aeron_client_wrapper INTERFACE ${HEADERS})
target_include_directories(aeron_client_wrapper
INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/wrapper>")
target_sources(aeron_client_wrapper INTERFACE FILE_SET HEADERS FILES ${HEADERS})

if (MSVC)
string(REPLACE "/" "\\\\" NATIVE_PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}")
Expand All @@ -95,5 +96,8 @@ endif ()
target_link_libraries(aeron_client_wrapper INTERFACE ${CMAKE_THREAD_LIBS_INIT})

if (AERON_INSTALL_TARGETS)
install(DIRECTORY . DESTINATION include/wrapper FILES_MATCHING PATTERN "*.h")
install(
TARGETS aeron_client_wrapper
EXPORT AeronTargets
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/wrapper)
endif ()
31 changes: 22 additions & 9 deletions aeron-driver/src/main/c/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -349,12 +349,14 @@ SET(HEADERS
aeronmd.h)

add_library(aeron_driver SHARED ${SOURCE} ${HEADERS})
target_include_directories(aeron_driver
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${AERON_C_CLIENT_SOURCE_PATH})
target_include_directories(aeron_driver PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${AERON_C_CLIENT_SOURCE_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/aeronmd;${CMAKE_INSTALL_INCLUDEDIR}/aeron>")

add_library(aeron_driver_static STATIC ${SOURCE} ${HEADERS})
target_include_directories(aeron_driver_static
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${AERON_C_CLIENT_SOURCE_PATH})
target_include_directories(aeron_driver_static PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${AERON_C_CLIENT_SOURCE_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/aeronmd;${CMAKE_INSTALL_INCLUDEDIR}/aeron>")

add_executable(aeronmd aeronmd.c)
target_include_directories(aeronmd
Expand Down Expand Up @@ -398,6 +400,16 @@ target_link_libraries(
${CMAKE_THREAD_LIBS_INIT}
${AERON_LIB_WINSOCK_LIBS})

target_link_libraries(
aeron_driver_static
${CMAKE_DL_LIBS}
${AERON_LIB_BSD_LIBS}
${AERON_LIB_UUID_LIBS}
${AERON_LIB_M_LIBS}
${AERON_LIB_ATOMIC_LIBS}
${CMAKE_THREAD_LIBS_INIT}
${AERON_LIB_WINSOCK_LIBS})

target_link_libraries(
aeronmd
aeron_driver
Expand Down Expand Up @@ -429,9 +441,10 @@ if (AERON_INSTALL_TARGETS)
endif ()
install(
TARGETS aeron_driver aeron_driver_static
RUNTIME DESTINATION lib
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(TARGETS aeronmd aeronmd_s DESTINATION bin)
install(DIRECTORY . DESTINATION include/aeronmd FILES_MATCHING PATTERN "*.h")
EXPORT AeronTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(TARGETS aeronmd aeronmd_s DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aeronmd FILES_MATCHING PATTERN "*.h")
endif ()
2 changes: 1 addition & 1 deletion aeron-samples/src/main/c/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -115,5 +115,5 @@ if (AERON_INSTALL_TARGETS)
DriverTool
ErrorStat
LossStat
DESTINATION bin)
DESTINATION ${CMAKE_INSTALL_BINDIR})
endif ()
2 changes: 1 addition & 1 deletion aeron-samples/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -177,5 +177,5 @@ if (AERON_INSTALL_TARGETS)
PongW
PingPongW
ExclusivePingPongW
DESTINATION bin)
DESTINATION ${CMAKE_INSTALL_BINDIR})
endif ()

0 comments on commit dd302d5

Please sign in to comment.