Mercurial > hg > sv-dependency-builds
diff src/capnproto-git-20161025/c++/CMakeLists.txt @ 48:9530b331f8c1
Add Cap'n Proto source
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Tue, 25 Oct 2016 11:17:01 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/capnproto-git-20161025/c++/CMakeLists.txt Tue Oct 25 11:17:01 2016 +0100 @@ -0,0 +1,142 @@ +project("Cap'n Proto" CXX) +cmake_minimum_required(VERSION 3.0) +set(VERSION 0.6-dev) + +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +include(CheckIncludeFileCXX) +include(GNUInstallDirs) +if(MSVC) + check_include_file_cxx(initializer_list HAS_CXX11) +else() + check_include_file_cxx(initializer_list HAS_CXX11 "-std=gnu++0x") +endif() +if(NOT HAS_CXX11) + message(SEND_ERROR "Requires a C++11 compiler and standard library.") +endif() + +# these arguments are passed to all install(TARGETS) calls +set(INSTALL_TARGETS_DEFAULT_ARGS + EXPORT CapnProtoTargets + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" +) + +# Options ====================================================================== + +option(BUILD_TESTING "Build unit tests and enable CTest 'check' target." ON) +option(EXTERNAL_CAPNP "Use the system capnp binary, or the one specified in $CAPNP, instead of using the compiled one." OFF) +option(CAPNP_LITE "Compile Cap'n Proto in 'lite mode', in which all reflection APIs (schema.h, dynamic.h, etc.) are not included. Produces a smaller library at the cost of features. All programs built against the library must be compiled with -DCAPNP_LITE. Requires EXTERNAL_CAPNP." OFF) + +# Check for invalid combinations of build options +if(CAPNP_LITE AND BUILD_TESTING AND NOT EXTERNAL_CAPNP) + message(SEND_ERROR "You must set EXTERNAL_CAPNP when using CAPNP_LITE and BUILD_TESTING.") +endif() + + +if(MSVC AND NOT CAPNP_LITE) + message(SEND_ERROR "Building with MSVC is only supported with CAPNP_LITE.") +endif() + +if(CAPNP_LITE) + set(CAPNP_LITE_FLAG "-DCAPNP_LITE") + # This flag is attached as PUBLIC target_compile_definition to kj target +else() + set(CAPNP_LITE_FLAG) +endif() + +if(MSVC) + # TODO(cleanup): Enable higher warning level in MSVC, but make sure to test + # build with that warning level and clean out false positives. +else() + # Note that it's important to add new CXXFLAGS before ones specified by the + # user, so that the user's flags override them. This is particularly + # important if -Werror was enabled and then certain warnings need to be + # disabled, as is done in super-test.sh. + # + # We enable a lot of warnings, but then disable some: + # * strict-aliasing: We use type-punning in known-safe ways that GCC doesn't + # recognize as safe. + # * sign-compare: Low S/N ratio. + # * unused-parameter: Low S/N ratio. + # + # We have to use -std=gnu++0x isntead of -std=c++11 because otherwise we lose + # GNU extensions that we need. + add_compile_options(-std=gnu++0x -Wall -Wextra -Wno-strict-aliasing -Wno-sign-compare -Wno-unused-parameter) + + if (NOT ANDROID) + add_compile_options(-pthread) + endif() +endif() + +# Source ======================================================================= +include(CapnProtoMacros) +add_subdirectory(src) + +# Install ====================================================================== + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/cmake/CapnProtoConfigVersion.cmake" + VERSION ${VERSION} + COMPATIBILITY AnyNewerVersion +) +set(CONFIG_PACKAGE_LOCATION ${CMAKE_INSTALL_LIBDIR}/cmake/CapnProto) + +configure_package_config_file(cmake/CapnProtoConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cmake/CapnProtoConfig.cmake + INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION} + PATH_VARS CMAKE_INSTALL_FULL_INCLUDEDIR +) +export(EXPORT CapnProtoTargets + FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/CapnProtoTargets.cmake" + NAMESPACE CapnProto:: +) +install(EXPORT CapnProtoTargets + FILE CapnProtoTargets.cmake + NAMESPACE CapnProto:: + DESTINATION ${CONFIG_PACKAGE_LOCATION} +) +install(FILES + cmake/CapnProtoMacros.cmake + ${CMAKE_CURRENT_BINARY_DIR}/cmake/CapnProtoConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/cmake/CapnProtoConfigVersion.cmake + DESTINATION ${CONFIG_PACKAGE_LOCATION} +) +#install CapnProtoMacros for CapnProtoConfig.cmake build directory consumers +configure_file(cmake/CapnProtoMacros.cmake cmake/CapnProtoMacros.cmake COPYONLY) + +if(NOT MSVC) # Don't install pkg-config files when building with MSVC + # Variables for pkg-config files + set(prefix "${CMAKE_INSTALL_PREFIX}") + set(exec_prefix "") # not needed since we use absolute paths in libdir and includedir + set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") + set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") + set(PTHREAD_CFLAGS "-pthread") + set(STDLIB_FLAG) # TODO: Unsupported + + configure_file(kj.pc.in "${CMAKE_CURRENT_BINARY_DIR}/kj.pc" @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kj.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + configure_file(capnp.pc.in "${CMAKE_CURRENT_BINARY_DIR}/capnp.pc" @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/capnp.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + if(NOT CAPNP_LITE) + configure_file(kj-async.pc.in "${CMAKE_CURRENT_BINARY_DIR}/kj-async.pc" @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kj-async.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + configure_file(capnp-rpc.pc.in "${CMAKE_CURRENT_BINARY_DIR}/capnp-rpc.pc" @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/capnp-rpc.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + configure_file(capnp-json.pc.in "${CMAKE_CURRENT_BINARY_DIR}/capnp-json.pc" @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/capnp-json.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endif() + + unset(STDLIB_FLAG) + unset(PTHREAD_CFLAGS) + unset(includedir) + unset(libdir) + unset(exec_prefix) + unset(prefix) +endif()