ADTF  3.18.2
dev_essential

Introduction

The dev_essential project is the successor of the following projects:

  • Utility library aka "a_util" (Utility library)
  • Package Remote Procedure Call aka "pkg_rpc" (RPC Package)
  • Data Definition Language Library aka "ddl" (DDL Library)
  • DDL C Application Programming Interface aka [ddl_capi]
  • ...

The dev_essential project strives for backwards compatibility with the latest versions of these projects. The following table provides an overview of the versions and the compatibility.

Project Supported since
a_util v5.8.x dev_essential 1.0.0
pkg_rpc 3.5.x dev_essential 1.0.0
ddl 4.6.x dev_essential 1.0.0
ddl_capi dev_essential 1.1.0

However, for downstream projects already using one of the aforementioned projects and porting to the dev_essential project, the portation guide shall be consulted.

Table of contents:

  1. How to build
  2. How to use
  3. Supported platforms
  4. Portation guide
  5. Changelog
  6. License Information

How to build

Build with CMake

  • Download CMake at least in version 3.17.0
  • Using git, clone the repository and checkout the desired branch (e.g. master)
  • Use CMake with CMakeLists.txt within the root directory
  • Do not forget to set CMAKE_INSTALL_PREFIX
  • Example:
    • cmake -H<root_dir> -B<build_dir> -G "Visual Studio 16 2019" -DCMAKE_INSTALL_PREFIX=<install_dir>
    • cmake --build . --target INSTALL --config RelWithDebInfo

CMake options

dev_essential_cmake_enable_integrated_tests (default: OFF)

  • Enable tests as integrated build - requires googletest

dev_essential_cmake_enable_self_contained_header_tests (default: ON)

  • Whether or not to enable tests checking for self contained header files
  • Requires dev_essential_cmake_enable_integrated_tests=ON

dev_essential_cmake_enable_position_independent_code (Default: ON)

  • Enable position independent code for static libraries

dev_essential_cmake_enable_result_header_only (default: OFF)

  • Whether or not to build header only version of dev_essential_result library

dev_essential_cmake_enable_warn_on_default_cmake_install_prefix (Default: ON)

  • Warn if CMAKE_INSTALL_PREFIX is set to default

How to use

Use with CMake

To simply use all components in your project, use

To only use specific components in your project, use

  • find_package(dev_essential COMPONENTS <components>) with <components> being a list of components (e.g. process, xml, ...), separated by spaces
  • target_link_libraries(<target> PRIVATE|PUBLIC dev_essential::<component>) with
    • <target> being the name of your library or executable and
    • <component> being the component you want to link against

Use in your code

To simply use all functionality of one component, include the equivalent component header into your code. For example, to use all functionality of components a_util::filesystem and a_util::process:

// my_file.h
#include <a_util/filesystem.h> // for a_util::filesystem
#include <a_util/process.h> // for a_util::process

However, all delivered header files are self-contained and so each functionality can be included individually.


NOTE: Do not directly include header files ending with _decl.h or _impl.h. Those files are meant for implementation specific functionalilty and might change unannounced in future releases.


Supported platforms

The libraries are currently built and tested using the following compilers and operating systems:

Windows

  • Visual C++ (x86_64): 14.1, 14.2

Linux

  • GCC (-std=c++14, libstdc++11, x86_64): 5.4.0, 5.5.0. 7.5.0, 8.4.0
  • GCC (-std=c++14, libstdc++11, armv8): 5.4.0, 7.5.0

QNX

  • GCC (-std=c++1y, libstdc++11, x86): 5.2.0

Portation guide

The following changes have to be done.

a_util

CMake

  • find_package(a_util REQUIRED)find_package(dev_essential REQUIRED)
  • find_package(a_util REQUIRED COMPONENTS <component>)find_package(dev_essential REQUIRED COMPONENTS <component>)
    • e.g. find_package(a_util REQUIRED COMPONENTS xml)find_package(dev_essential REQUIRED COMPONENTS xml)
  • target_link_libraries(myLib a_util)target_link_libraries(myLib dev_essential::dev_essential) NOTE: This pulls in ALL components, including those ported from other projects (e.g. pkg_rpc)
  • target_link_libraries(myLib a_util_<component>)target_link_libraries(myLib dev_essential::<component>)
    • e.g. target_link_libraries(myLib a_util_xml)target_link_libraries(myLib dev_essential::xml)

ddl library

CMake

  • find_package(ddl REQUIRED)find_package(dev_essential REQUIRED COMPONENTS ddl)
  • target_link_libraries(myLib ddl)target_link_libraries(myLib dev_essential::ddl)

C++

All headers are moved to subfolder ddl which is reflected in the include directories. So e.g. the following includes:

#include <ddl.h>
#include <codec/pkg_codec.h>
//...

Become respectively:

#include <ddl/ddl.h>
#include <ddl/codec/pkg_codec.h>
//...
Package header for DataDefinition.

Namespace mapping::oo is removed, all implementations went into namespace mapping. Namespace mapping is moved into namespace ddl. All references to namespace mapping need to be referenced by namespace ddl::mapping now. So the following usage of namespace mapping:

using MapConfiguration = mapping::oo::MapConfiguration;

Becomes:

using MapConfiguration = ddl::mapping::MapConfiguration;
MapConfiguration is the central class of the mapping::dd namespace.

The implementation of the deprecated ddl::DDLDescription has been removed and completely refactored into the new DDL DataDefinition. Please refer to the DD documentation for its usage. A guide to port the deprecated DDL description to the new DDL DataDefinition is under development.

pkg_rpc

CMake

  • find_package(pkg_rpc REQUIRED)find_package(dev_essential REQUIRED COMPONENTS pkg_rpc)
  • target_link_libraries(myLib pkg_rpc)target_link_libraries(myLib dev_essential::pkg_rpc)

C++

The following includes:

#include <pkg_rpc.h>
#include <rpc_pkg/rpc_server.h>
#include <rpc_pkg/json_rpc.h>

Become respectively:

#include <rpc/rpc.h>
#include <rpc/rpc_server.h>
#include <rpc/json_rpc.h>
RPC Protocol declaration.
RPC Package Header.
RPC Protocol declaration.

Changelog

The changelog can be found here.

License Information

Dev essential libraries - License

The dev essential libraries are delivered under the MPL - Mozilla Public License - Version 2.0 (see also "MPL" (@subpage page_dev_essential_mpl "link"))

Used software license information

The dev essential libraries are delivered with the following 3rdparty dependencies:

(see also "Used Licenses" - 3rdparty Software we are very glad to use)