141 lines
5.1 KiB
CMake
141 lines
5.1 KiB
CMake
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
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
|
|
$<INSTALL_INTERFACE:include>
|
|
)
|
|
|
|
# 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 $<$<CXX_COMPILER_ID:GNU>:-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)
|
|
|