cmake_minimum_required(VERSION 3.8.2) # cxx_std_11 project(ddl_library VERSION 4.4.0) # Disable extensions here and require the chosen CMAKE_CXX_STANDARD (coming from e.g. Conan) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) # if Conan is used, we have to include the generated file and doing some basic setup if(CONAN_COMPILER) if ( EXISTS ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake) include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake) elseif ( EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../conanbuildinfo.cmake) include(${CMAKE_CURRENT_BINARY_DIR}/../conanbuildinfo.cmake) elseif ( EXISTS ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo_multi.cmake) include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo_multi.cmake) elseif ( EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../conanbuildinfo_multi.cmake) include(${CMAKE_CURRENT_BINARY_DIR}/../conanbuildinfo_multi.cmake) else() message(FATAL_ERROR "Conan build info can't be found.") endif() if(CORTEX_WORKSPACE) conan_basic_setup(TARGETS) else() conan_basic_setup(TARGETS NO_OUTPUT_DIRS) endif() endif() # Options ################################################# option(ddl_cmake_enable_tests "Enable tests - requires googletest (default: OFF)" OFF) option(ddl_cmake_enable_installation "Enable installation of the ddl library to CMAKE_INSTALL_PREFIX (default: ON)" ON) option(ddl_cmake_enable_ddl_generator_tools "Enable building of the two tools ddl2header and header2ddl (default: ON)" ON) # End Options ############################################# # Check for default install prefix and cmake build type (UNIX) include(./cmake/check_cmake_install_prefix.cmake) include(./cmake/check_cmake_build_type.cmake) # Enable multicore compilation on Windows include(./cmake/enable_multicore_compilation.cmake) # Use integrated debug symbols on Windows (avoiding PDBs) include(./cmake/use_integrated_debug_symbols.cmake) # Set library name conventions include(./cmake/set_library_naming_conventions.cmake) # Enable folders set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Add a_util dependency find_package(a_util 5.4 REQUIRED) # Include sources include(./ddlrepresentation/pkg_ddlrepresentation.sources) include(./codec/codec.sources) include(./serialization/serialization.sources) include(./mapping/mapping.sources) add_library(ddl STATIC ${DDLREPRESENTATION_CPP} ${CODEC_CPP} ${SERIALIZATION_CPP} ${MAPPING_CPP} ${DDLREPRESENTATION_H} ${CODEC_H} ${SERIALIZATION_H} ${MAPPING_CONFIGURATION_H} ${MAPPING_ENGINE_H} ${MAPPING_H} ddl.h legacy_error_macros.h ) set_target_properties(ddl PROPERTIES FOLDER ddl) target_include_directories(ddl PUBLIC $ $ ) # a_util is public since its part of the ddl api target_link_libraries(ddl PUBLIC a_util) target_compile_features(ddl INTERFACE cxx_std_11) # C++11 for self and dependants target_compile_options(ddl PRIVATE $<$:-fPIC>) # Create version config include(CMakePackageConfigHelpers) write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/cmake/ddl-config-version.cmake COMPATIBILITY AnyNewerVersion) configure_file(cmake/ddl-config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/ddl/ddlConfig.cmake" ) if(ddl_cmake_enable_tests) set(ddl_cmake_integrated_tests ON) enable_testing() add_subdirectory(test) endif() add_subdirectory(ddlgenerators) if(ddl_cmake_enable_installation) install(TARGETS ddl ARCHIVE DESTINATION lib) install(FILES ${DDLREPRESENTATION_INSTALL} DESTINATION include/${DDLREPRESENTATION_DIR}) install(FILES ${CODEC_INSTALL} DESTINATION include/${CODEC_DIR}) install(FILES ${SERIALIZATION_INSTALL} DESTINATION include/${SERIALIZATION_DIR}) install(FILES ${MAPPING_CONFIGURATION_INSTALL} DESTINATION include/${MAPPING_DIR}/configuration) install(FILES ${MAPPING_ENGINE_INSTALL} DESTINATION include/${MAPPING_DIR}/engine) install(FILES ${MAPPING_INSTALL} DESTINATION include/${MAPPING_DIR}) install(FILES ddl.h legacy_error_macros.h DESTINATION include) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/ddl-config-version.cmake DESTINATION cmake) configure_file(cmake/ddl-config.cmake.in ${CMAKE_INSTALL_PREFIX}/cmake/ddl-config.cmake @ONLY) install(FILES cmake/migrate_to_ddl_4_1.cmake cmake/ddl4.1_replacements.txt cmake/migrate_to_ddl_4_1.sh.in DESTINATION cmake) install(FILES README.md DESTINATION .) else() # This allows a host product to use find_package from within the build-tree file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/cmake/ddl-config.cmake "") endif() ##this enables a post-install command, so this must be "Last Dir Standing"!!! add_subdirectory(doc) # License Information must be delivered anyway! install(FILES doc/license/MPL2.0.txt DESTINATION ./) install(FILES doc/license/MPL2.0.txt DESTINATION doc/license) install(FILES doc/input/used_licenses.md DESTINATION doc/license) install(FILES doc/input/mpl.md DESTINATION doc/license)