Skip to content

Commit e516a72

Browse files
tobifalkcassava
authored andcommitted
esmini: Initial commit of simulator binding
1 parent c0f7c84 commit e516a72

25 files changed

+1771
-1
lines changed

optional/esmini/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
build/

optional/esmini/CMakeLists.txt

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
2+
3+
project(cloe_plugin_esmini LANGUAGES CXX)
4+
5+
set(CLOE_FIND_PACKAGES ON CACHE BOOL "Call find_package() for cloe packages")
6+
if(CLOE_FIND_PACKAGES)
7+
find_package(cloe-runtime REQUIRED)
8+
find_package(cloe-models REQUIRED)
9+
find_package(cloe-osi REQUIRED)
10+
endif()
11+
find_package(esmini REQUIRED)
12+
13+
include(CloePluginSetup)
14+
cloe_add_plugin(
15+
TARGET ${PROJECT_NAME}
16+
OUTPUT_NAME simulator_esmini
17+
SOURCES
18+
src/esmini.cpp
19+
LINK_LIBRARIES
20+
cloe::runtime
21+
cloe::models
22+
cloe::osi
23+
esmini::esmini
24+
COMPILE_DEFINITIONS
25+
PROJECT_SOURCE_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}\"
26+
)
27+
28+
include(CTest)
29+
if(BUILD_TESTING)
30+
find_package(GTest REQUIRED)
31+
include(GoogleTest)
32+
33+
add_executable(test-esmini
34+
src/esmini_test.cpp
35+
)
36+
set_target_properties(test-esmini PROPERTIES
37+
CXX_STANDARD 17
38+
CXX_STANDARD_REQUIRED ON
39+
)
40+
target_link_libraries(test-esmini
41+
PRIVATE
42+
GTest::gtest
43+
GTest::gtest_main
44+
cloe::runtime
45+
cloe::models
46+
cloe::osi
47+
)
48+
gtest_add_tests(TARGET test-esmini)
49+
endif()

optional/esmini/Makefile

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
PROJECT_ROOT := ../..
2+
include ${PROJECT_ROOT}/Makefile.package
3+
4+
# -------------------------------------------------
5+
6+
ALL_VENDOR := $(wildcard vendor/*)
7+
.PHONY: ${ALL_VENDOR}
8+
9+
WITHOUT_VENDOR :=
10+
UNSELECT_VENDOR := ${WITHOUT_VENDOR}
11+
WITH_VENDOR :=
12+
SELECT_VENDOR := $(call uniq, $(filter-out ${UNSELECT_VENDOR}, ${ALL_VENDOR}) ${WITH_VENDOR})
13+
14+
REGEX_TARGET := 's/(-vendor|-select)?-each//'
15+
${SELECT_VENDOR}:
16+
${MAKE} -C $@ $(shell echo ${MAKECMDGOALS} | sed -re ${REGEX_TARGET})
17+
18+
# Usage: $(call _make_target_rule, TARGET-NAME, MAKE-TARGET, HELP-DESCRIPTION, MAKE-ARGUMENTS)
19+
define _make_target_rule
20+
${1}:
21+
$(call print_header, "Proceeding to $(call unquote, ${3})")
22+
${MAKE} ${SUBMAKEFLAGS} PROJECT_ROOT=$(realpath ${PROJECT_ROOT}) ${4} ${2}
23+
endef
24+
25+
# Usage: $(call _make_target_rules, TARGET-NAME, HELP-DESCRIPTION, HELP-CATEGORY, PACKAGE-DIRS)
26+
define _make_target_rules
27+
help::
28+
$(call print_help_target, ${1}, ${2}, ${3})
29+
$(call _make_target_rule,${1},${1}-each,${2})
30+
${1}-each: ${4}
31+
endef
32+
33+
# Usage: $(call make_vendor_target, TARGET-NAME, HELP-DESCRIPTION, HELP-CATEGORY)
34+
define make_vendor_target
35+
$(eval $(call _make_target_rules,${1},${2},${3},${SELECT_VENDOR}))
36+
endef
37+
38+
help::
39+
$(call print_help_section, "Available vendor targets")
40+
41+
$(call make_vendor_target, export-vendor, "export all vendor packages", "[conan-cache]")
42+
$(call make_vendor_target, package-vendor, "create all vendor packages", "[conan-cache]")
43+
$(call make_vendor_target, download-vendor, "download or build vendor packages", "[conan-cache]")

optional/esmini/README.md

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# ESMini Simulator Binding Plugin
2+
3+
To prepare running the smoketests, first export required packages like so:
4+
5+
```
6+
make export-vendor export \
7+
&& make -C ../osi export-vendor export \
8+
&& make -C ../../ export-all
9+
```
10+
11+
Then, build the packages and run the smoketests:
12+
13+
```
14+
make smoketest-deps smoketest
15+
```

optional/esmini/conanfile.py

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# mypy: ignore-errors
2+
# pylint: skip-file
3+
4+
from pathlib import Path
5+
from conan import ConanFile
6+
from conan.tools import cmake, files, scm
7+
8+
class CloeSimulatorESMini(ConanFile):
9+
name = "cloe-plugin-esmini"
10+
url = "https://github.com/esmini/esmini"
11+
description = "Cloe ESMini simulator plugin."
12+
license = "Apache-2.0"
13+
settings = "os", "compiler", "build_type", "arch"
14+
options = {
15+
"pedantic": [True, False],
16+
}
17+
default_options = {
18+
"pedantic": True,
19+
}
20+
generators = "CMakeDeps", "VirtualRunEnv"
21+
exports_sources = [
22+
"src/*",
23+
"CMakeLists.txt",
24+
]
25+
no_copy_source = True
26+
27+
def set_version(self):
28+
version_file = Path(self.recipe_folder) / "../../VERSION"
29+
if version_file.exists():
30+
self.version = files.load(self, version_file).strip()
31+
else:
32+
git = scm.Git(self, self.recipe_folder)
33+
self.version = git.run("describe --dirty=-dirty")[1:]
34+
35+
def requirements(self):
36+
self.requires("eigen/3.4.0")
37+
self.requires(f"esmini/[~2.24.0]@cloe/stable")
38+
self.requires(f"cloe-runtime/{self.version}@cloe/develop")
39+
self.requires(f"cloe-models/{self.version}@cloe/develop")
40+
self.requires(f"cloe-osi/{self.version}@cloe/develop")
41+
42+
def build_requirements(self):
43+
self.test_requires("gtest/1.13.0")
44+
45+
def layout(self):
46+
cmake.cmake_layout(self)
47+
48+
def generate(self):
49+
tc = cmake.CMakeToolchain(self)
50+
tc.cache_variables["CMAKE_EXPORT_COMPILE_COMMANDS"] = True
51+
tc.cache_variables["CLOE_PROJECT_VERSION"] = self.version
52+
tc.cache_variables["TargetLintingExtended"] = self.options.pedantic
53+
tc.generate()
54+
55+
def build(self):
56+
cm = cmake.CMake(self)
57+
if self.should_configure:
58+
cm.configure()
59+
if self.should_build:
60+
cm.build()
61+
if self.should_test:
62+
cm.test()
63+
64+
def package(self):
65+
cm = cmake.CMake(self)
66+
if self.should_install:
67+
cm.install()
68+
69+
def package_id(self):
70+
del self.info.options.pedantic
71+
72+
def package_info(self):
73+
self.cpp_info.set_property("cmake_find_mode", "both")
74+
self.cpp_info.set_property("cmake_file_name", self.name)
75+
self.cpp_info.set_property("pkg_config_name", self.name)
76+
77+
if not self.in_local_cache: # editable mode
78+
libdir = Path(self.build_folder) / "lib"
79+
self.runenv_info.append_path("LD_LIBRARY_PATH", libdir)

0 commit comments

Comments
 (0)