Skip to content
Snippets Groups Projects
Verified Commit 849f1f6b authored by Martin Stump's avatar Martin Stump
Browse files

Add CPM and download deps.


* Add CPM download script
* Download nholthaus/units@2.3.3
* Download google/googletest@1.12.1
* Add doc target
* Add test target
* Skip unused units

Signed-off-by: default avatarMartin Stump <martin.stump@mercedes-benz.com>
parent 019aef26
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,13 @@ line_ending: unix
command_case: canonical
keyword_case: upper
additional_commands:
CPMAddPackage:
kwargs:
NAME: "*"
GITHUB_REPOSITORY: "*"
GIT_TAG: "*"
VERSION: "*"
OPTIONS: "*"
configure_package_config_file:
flags:
- NO_SET_AND_CHECK_MACRO
......@@ -47,7 +54,7 @@ additional_commands:
EXECUTABLE: "*"
EXECUTABLE_ARGS: "*"
DEPENDENCIES: "*"
always_wrap: ["add_library", "find_package", "find_dependency", "target_include_directories"]
always_wrap: []
enable_sort: true
autosort: false
hashruler_min_length: 10
......
################################################################################
# Copyright (c) 2021 Daimler TSS GmbH
# Copyright (c) 2022 Mercedes-Benz Tech Innovation GmbH
#
# This program and the accompanying materials are made available under the terms
# of the Eclipse Public License 2.0 which is available at
......@@ -13,6 +14,14 @@ cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR)
# Add the custom CMake modules to CMake's module path
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
# Determine if ScenarioAPI is built as a subproject (using add_subdirectory) or if it is the main project.
if(NOT DEFINED ScenarioAPI_MAIN_PROJECT)
set(ScenarioAPI_MAIN_PROJECT OFF)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(ScenarioAPI_MAIN_PROJECT ON)
endif()
endif()
project(
ScenarioAPI
VERSION 0.1.0
......@@ -20,22 +29,21 @@ project(
LANGUAGES CXX
)
# Project setup only if this is the main project
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
include(CTest)
option(BUILD_DOCUMENTATION "Build the documentation tree." OFF)
# Options that control generation of various targets.
option(ScenarioAPI_DOC "Generate the doc target." ${ScenarioAPI_MAIN_PROJECT})
option(ScenarioAPI_INSTALL "Generate the install target." ${ScenarioAPI_MAIN_PROJECT})
option(ScenarioAPI_TEST "Generate the test target." ${ScenarioAPI_MAIN_PROJECT})
option(ScenarioAPI_PACKAGE "Generate the package target." ${ScenarioAPI_MAIN_PROJECT})
option(ScenarioAPI_ENABLE_WARNINGS "Enable compiler warnings." ${ScenarioAPI_MAIN_PROJECT})
option(ScenarioAPI_ENABLE_WERROR "Fail and stop if a warning is triggered." ${ScenarioAPI_MAIN_PROJECT})
if(ScenarioAPI_TEST)
enable_testing()
endif()
# Go into the actual project
include(CPM)
add_subdirectory(MantleAPI)
# Should we build documentation for the project?
if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_DOCUMENTATION) OR ScenarioAPI_BUILD_DOCUMENTATION)
add_subdirectory(doc)
endif()
# Include the CPack configuration
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
if(ScenarioAPI_PACKAGE)
include(ScenarioAPICPack)
endif()
################################################################################
# Copyright (c) 2021 Daimler TSS GmbH
# Copyright (c) 2022 Mercedes-Benz Tech Innovation GmbH
#
# This program and the accompanying materials are made available under the terms
# of the Eclipse Public License 2.0 which is available at
......@@ -8,4 +9,28 @@
# SPDX-License-Identifier: EPL-2.0
################################################################################
if(MSVC)
if(ScenarioAPI_ENABLE_WARNINGS)
add_compile_options(/W4)
endif()
if(ScenarioAPI_ENABLE_WERROR)
add_compile_options(/WX /wd4996)
endif()
else()
if(ScenarioAPI_ENABLE_WARNINGS)
add_compile_options(-Wall -Wextra)
endif()
if(ScenarioAPI_ENABLE_WERROR)
add_compile_options(-Werror -Wno-error=deprecated-declarations)
endif()
endif()
add_subdirectory(include)
if(ScenarioAPI_DOC)
add_subdirectory(doc)
endif()
if(ScenarioAPI_TEST)
add_subdirectory(test)
endif()
################################################################################
# Copyright (c) 2022 Mercedes-Benz Tech Innovation GmbH
#
# This program and the accompanying materials are made available under the terms
# of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
################################################################################
find_package(Doxygen QUIET REQUIRED dot OPTIONAL_COMPONENTS mscgen dia)
set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
set(DOXYGEN_DOT_IMAGE_FORMAT svg)
set(DOXYGEN_IMAGE_PATH ${CMAKE_CURRENT_LIST_DIR}/images)
set(DOXYGEN_INCLUDE_PATH ${PROJECT_SOURCE_DIR})
set(DOXYGEN_INTERACTIVE_SVG YES)
set(DOXYGEN_QUIET YES)
set(DOXYGEN_TAB_SIZE 2)
set(DOXYGEN_UML_LOOK YES)
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE README.md)
doxygen_add_docs(
${PROJECT_NAME}_doc ${PROJECT_SOURCE_DIR}/README.md ${PROJECT_SOURCE_DIR}/MantleAPI/include
COMMENT "Generate html docs"
)
################################################################################
# Copyright (c) 2021 Daimler TSS GmbH
# Copyright (c) 2022 Mercedes-Benz Tech Innovation GmbH
#
# This program and the accompanying materials are made available under the terms
# of the Eclipse Public License 2.0 which is available at
......@@ -8,8 +9,23 @@
# SPDX-License-Identifier: EPL-2.0
################################################################################
find_package(
units CONFIG REQUIRED
CPMAddPackage(
NAME units
GITHUB_REPOSITORY nholthaus/units
GIT_TAG v2.3.3
VERSION 2.3.3
OPTIONS "DISABLE_PREDEFINED_UNITS ON"
"ENABLE_PREDEFINED_ACCELERATION_UNITS ON"
"ENABLE_PREDEFINED_ANGLE_UNITS ON"
"ENABLE_PREDEFINED_ANGULAR_VELOCITY_UNITS ON"
"ENABLE_PREDEFINED_CONCENTRATION_UNITS ON"
"ENABLE_PREDEFINED_FORCE_UNITS ON"
"ENABLE_PREDEFINED_LENGTH_UNITS ON"
"ENABLE_PREDEFINED_MASS_UNITS ON"
"ENABLE_PREDEFINED_PRESSURE_UNITS ON"
"ENABLE_PREDEFINED_TEMPERATURE_UNITS ON"
"ENABLE_PREDEFINED_TIME_UNITS ON"
"ENABLE_PREDEFINED_VELOCITY_UNITS ON"
)
file(
......@@ -18,21 +34,17 @@ file(
CONFIGURE_DEPENDS "*.h"
)
add_library(
ScenarioAPI INTERFACE
)
add_library(
ScenarioAPI::ScenarioAPI ALIAS ScenarioAPI
)
add_library(ScenarioAPI INTERFACE)
add_library(ScenarioAPI::ScenarioAPI ALIAS ScenarioAPI)
target_link_libraries(ScenarioAPI INTERFACE units)
target_link_libraries(ScenarioAPI INTERFACE units::units)
include(GNUInstallDirs)
set(INSTALL_CONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/ScenarioAPI")
target_include_directories(
ScenarioAPI
INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
ScenarioAPI INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/MantleAPI/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_compile_features(ScenarioAPI INTERFACE cxx_std_17)
......@@ -50,18 +62,20 @@ write_basic_package_version_file(
COMPATIBILITY SameMajorVersion
)
install(DIRECTORY MantleAPI TYPE INCLUDE)
install(TARGETS ScenarioAPI EXPORT ScenarioAPITargets)
if(ScenarioAPI_INSTALL)
install(DIRECTORY MantleAPI TYPE INCLUDE)
install(TARGETS ScenarioAPI EXPORT ScenarioAPITargets)
install(
EXPORT ScenarioAPITargets
DESTINATION ${INSTALL_CONFIG_DIR}
NAMESPACE ScenarioAPI::
)
install(
EXPORT ScenarioAPITargets
DESTINATION ${INSTALL_CONFIG_DIR}
NAMESPACE ScenarioAPI::
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfigVersion.cmake"
DESTINATION ${INSTALL_CONFIG_DIR}
COMPONENT dev
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfigVersion.cmake"
DESTINATION ${INSTALL_CONFIG_DIR}
COMPONENT dev
)
endif()
################################################################################
# Copyright (c) 2022 Mercedes-Benz Tech Innovation GmbH
#
# This program and the accompanying materials are made available under the terms
# of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
################################################################################
CPMAddPackage(
NAME googletest
GITHUB_REPOSITORY google/googletest
GIT_TAG release-1.12.1
VERSION 1.12.1
OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt ON"
)
add_executable(ScenarioAPITest)
target_sources(ScenarioAPITest PUBLIC interface_test.cpp)
target_include_directories(ScenarioAPITest PRIVATE ${PROJECT_SOURCE_DIR})
target_link_libraries(ScenarioAPITest PUBLIC ScenarioAPI::ScenarioAPI GTest::gmock_main)
include(GoogleTest)
gtest_discover_tests(ScenarioAPITest)
# Scenario API
A collection of interfaces for abstraction between a scenario engine and an environment simulator.
It is intended to be usable with a wide variety of scenario description languages by implementing according scenario engines.
A collection of interfaces for abstraction between a scenario engine and an environment simulator.
It is intended to be usable with a wide variety of scenario description languages by implementing according scenario engines.
Remark: This is currently work in progress and no stable state is reached yet.
Remark: This is currently work in progress and no stable state is reached yet.
## Used libraries
### Units
License: MIT License
URL: https://github.com/nholthaus/units
Version: v2.3.1
Version: v2.3.3
### GoogleTest
License: BSD-3-Clause License
URL: https://github.com/google/googletest
Version: v1.12.1
### CPM
License: MIT License
URL: https://github.com/cpm-cmake/CPM.cmake
Version: v0.36.0
set(CPM_DOWNLOAD_VERSION 0.36.0)
if(CPM_SOURCE_CACHE)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
else()
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
endif()
# Expand relative path. This is important if the provided path contains a tilde (~)
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
file(DOWNLOAD
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
${CPM_DOWNLOAD_LOCATION}
)
endif()
include(${CPM_DOWNLOAD_LOCATION})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment