|
| 1 | +# Copyright (c) 2019 The Bitcoin Core developers |
| 2 | +# Distributed under the MIT software license, see the accompanying |
| 3 | +# file COPYING or http://www.opensource.org/licenses/mit-license.php. |
| 4 | + |
| 5 | +cmake_minimum_required(VERSION 3.0) |
| 6 | +project("Libmultiprocess" CXX) |
| 7 | +include(CTest) |
| 8 | +find_package(Boost) |
| 9 | +find_package(CapnProto) |
| 10 | + |
| 11 | +capnp_generate_cpp(MP_PROXY_SRCS MP_PROXY_HDRS include/mp/proxy.capnp) |
| 12 | + |
| 13 | +set(MP_PUBLIC_HEADERS |
| 14 | + ${MP_PROXY_HDRS} |
| 15 | + include/mp/proxy.h |
| 16 | + include/mp/proxy-io.h |
| 17 | + include/mp/proxy-types.h |
| 18 | + include/mp/proxy.capnp |
| 19 | + include/mp/proxy.h |
| 20 | + include/mp/util.h) |
| 21 | + |
| 22 | +add_library(multiprocess STATIC |
| 23 | + ${MP_PROXY_SRCS} |
| 24 | + ${MP_PUBLIC_HEADERS} |
| 25 | + src/mp/proxy.cpp |
| 26 | + src/mp/util.cpp) |
| 27 | +target_include_directories(multiprocess PUBLIC |
| 28 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> |
| 29 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 30 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> |
| 31 | + $<INSTALL_INTERFACE:include> |
| 32 | + ${CAPNP_INCLUDE_DIRECTORY} |
| 33 | + ${Boost_INCLUDE_DIR}) |
| 34 | +set_target_properties(multiprocess PROPERTIES PUBLIC_HEADER "${MP_PUBLIC_HEADERS}") |
| 35 | +install(TARGETS multiprocess EXPORT Multiprocess ARCHIVE DESTINATION lib PUBLIC_HEADER DESTINATION include/mp) |
| 36 | + |
| 37 | +add_executable(mpgen src/mp/gen.cpp) |
| 38 | +target_include_directories(mpgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) |
| 39 | +target_include_directories(mpgen PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>) |
| 40 | +target_link_libraries(mpgen PRIVATE CapnProto::capnp-rpc) |
| 41 | +target_link_libraries(mpgen PRIVATE -L${capnp_LIBRARY_DIRS} capnpc) |
| 42 | +install(TARGETS mpgen EXPORT Multiprocess RUNTIME DESTINATION bin) |
| 43 | + |
| 44 | +configure_file(pkgconfig/libmultiprocess.pc.in "${CMAKE_CURRENT_BINARY_DIR}/libmultiprocess.pc" @ONLY) |
| 45 | +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libmultiprocess.pc" DESTINATION "pkgconfig") |
| 46 | + |
| 47 | +install(EXPORT Multiprocess DESTINATION lib/cmake/Multiprocess) |
| 48 | + |
| 49 | +set(CAPNPC_IMPORT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include") |
| 50 | +capnp_generate_cpp(FOO_PROXY_SRCS FOO_PROXY_HDRS src/mp/test/foo.capnp) |
| 51 | + |
| 52 | + |
| 53 | +if(BUILD_TESTING) |
| 54 | + add_custom_command( |
| 55 | + OUTPUT |
| 56 | + src/mp/test/foo.capnp.proxy.h |
| 57 | + src/mp/test/foo.capnp.proxy-server.c++ |
| 58 | + src/mp/test/foo.capnp.proxy-client.c++ |
| 59 | + src/mp/test/foo.capnp.proxy-types.c++ |
| 60 | + src/mp/test/foo.capnp.proxy-types.h |
| 61 | + PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory src/mp/test |
| 62 | + COMMAND ${CMAKE_COMMAND} -E chdir src "${CMAKE_CURRENT_BINARY_DIR}/mpgen" mp/test/foo "${CMAKE_CURRENT_SOURCE_DIR}/src/mp/test/foo.capnp" "${CMAKE_CURRENT_SOURCE_DIR}/include" "${capnp_PREFIX}/include" |
| 63 | + DEPENDS src/mp/test/foo.capnp mpgen |
| 64 | + ) |
| 65 | + add_executable(mptest EXCLUDE_FROM_ALL |
| 66 | + ${FOO_PROXY_HDRS} |
| 67 | + ${FOO_PROXY_SRCS} |
| 68 | + ${MP_PROXY_HDRS} |
| 69 | + src/mp/test/foo.capnp.proxy.h |
| 70 | + src/mp/test/foo.capnp.proxy-server.c++ |
| 71 | + src/mp/test/foo.capnp.proxy-client.c++ |
| 72 | + src/mp/test/foo.capnp.proxy-types.c++ |
| 73 | + src/mp/test/foo.capnp.proxy-types.h |
| 74 | + src/mp/test/foo-types.h |
| 75 | + src/mp/test/foo.h |
| 76 | + src/mp/test/test.cpp |
| 77 | + ) |
| 78 | + target_include_directories(mptest PUBLIC |
| 79 | + ${CAPNP_INCLUDE_DIRECTORY} |
| 80 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> |
| 81 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 82 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> |
| 83 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src> |
| 84 | + ) |
| 85 | + target_link_libraries(mptest PRIVATE CapnProto::capnp-rpc) |
| 86 | + target_link_libraries(mptest PRIVATE CapnProto::kj-test) |
| 87 | + target_link_libraries(mptest PRIVATE multiprocess) |
| 88 | + add_test(NAME mptest COMMAND mptest) |
| 89 | +endif() |
0 commit comments