Skip to content

Commit

Permalink
Create a 'targets' subdirectory to contain specialisations of the rtt…
Browse files Browse the repository at this point in the history
…-config.h file. The OROCOS_TARGET define is now used to locate the target file. Also the library names and .pc files are extended with the -<target> suffix. This is all to support multiple targets in the same directory. If no target is specified, a default is used.

git-svn-id: https://svn.mech.kuleuven.be/repos/orocos/trunk/rtt@28621 ce417995-dfc9-0310-95a0-acdaff106893
  • Loading branch information
psoetens committed Oct 5, 2007
1 parent d836bbc commit ddf4b11
Show file tree
Hide file tree
Showing 10 changed files with 154 additions and 93 deletions.
10 changes: 5 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.2)
# #
###################################################

PROJECT(Orocos-RTT)
PROJECT(orocos-rtt)

SET( RTT_VERSION 1.4.99 )
STRING( REGEX MATCHALL "[0-9]+" RTT_VERSIONS ${RTT_VERSION} )
Expand All @@ -26,8 +26,8 @@ IF(NOT CMAKE_INSTALL_PREFIX)
MESSAGE( STATUS "Setting installation directory to ${CMAKE_INSTALL_PREFIX}" )
ENDIF(NOT CMAKE_INSTALL_PREFIX)

SET( PROJ_SOURCE_DIR ${Orocos-RTT_SOURCE_DIR} )
SET( PROJ_BINARY_DIR ${Orocos-RTT_BINARY_DIR} )
SET( PROJ_SOURCE_DIR ${orocos-rtt_SOURCE_DIR} )
SET( PROJ_BINARY_DIR ${orocos-rtt_BINARY_DIR} )

# Set the default build type to debug.
#
Expand Down Expand Up @@ -124,8 +124,8 @@ ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(doc)
ADD_SUBDIRECTORY(tests)

CONFIGURE_FILE( orocos-rtt.pc.in orocos-rtt.pc @ONLY)
INSTALL_FILES( /lib/pkgconfig FILES orocos-rtt.pc)
CONFIGURE_FILE( orocos-rtt.pc.in orocos-rtt-${OROCOS_TARGET}.pc @ONLY)
INSTALL_FILES( /lib/pkgconfig FILES orocos-rtt-${OROCOS_TARGET}.pc)
CONFIGURE_FILE(Doxyfile.in Doxyfile @ONLY)

# provide a link to src. Used by Doxygen.
Expand Down
2 changes: 2 additions & 0 deletions config/check_depend.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ ELSE ( XERCES AND XERCES_HEADERS )
ENDIF ( XERCES AND XERCES_HEADERS )

SET( OROCOS_TARGET gnulinux CACHE STRING "The Operating System target. One of [lxrt gnulinux xenomai]")
STRING(TOUPPER ${OROCOS_TARGET} OROCOS_TARGET_CAP)

SET(LINUX_SOURCE_DIR ${LINUX_SOURCE_DIR} CACHE PATH "path to linux source dir" FORCE)

# Look for TAO and ACE
Expand Down
4 changes: 2 additions & 2 deletions orocos-rtt.pc.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ includedir=${prefix}/include
Name: Orocos-RTT # human-readable name
Description: Open Robot Control Software: Real-Time Tookit # human-readable description
Version: @RTT_VERSION@
Libs: -L${libdir} -lorocos-rtt @RTT_LINKFLAGS@
Libs: -L${libdir} -lorocos-rtt-@OROCOS_TARGET@ @RTT_LINKFLAGS@
#Libs.private: @RTT_LIBS@
Cflags: -I${includedir} @RTT_CFLAGS@
Cflags: -I${includedir} -DOROCOS_TARGET=@OROCOS_TARGET@ @RTT_CFLAGS@
19 changes: 11 additions & 8 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -76,25 +76,26 @@ ADD_SUBDIRECTORY( marsh )
ADD_SUBDIRECTORY( impl )
ADD_SUBDIRECTORY( dlib )
ADD_SUBDIRECTORY( boost )
ADD_SUBDIRECTORY( targets )
GLOBAL_ADD_SRC( ${CPPS})

# Reduce debugging info in scripting dir.
IF (NOT OS_EMBEDDED OR OS_EMBEDDED_SCRIPTING)
IF ( NOT OS_EMBEDDED OR OS_EMBEDDED_SCRIPTING AND CMAKE_BUILD_TYPE STREQUAL "Debug" )
MESSAGE("Changing flags for Scripting files")
SET_SOURCE_FILES_PROPERTIES( $ENV{GLOBAL_SCRIPTING_SRCS} PROPERTIES COMPILE_FLAGS "-g1 -O2" )
ENDIF (NOT OS_EMBEDDED OR OS_EMBEDDED_SCRIPTING)
SET_SOURCE_FILES_PROPERTIES( Timer.cpp PROPERTIES COMPILE_FLAGS "-g")
ENDIF ( NOT OS_EMBEDDED OR OS_EMBEDDED_SCRIPTING AND CMAKE_BUILD_TYPE STREQUAL "Debug" )
#SET_SOURCE_FILES_PROPERTIES( Timer.cpp PROPERTIES COMPILE_FLAGS "-g")

####
# Build Libraries:
#
# Settings for building a static library (.a)
#
IF ( BUILD_STATIC )
ADD_LIBRARY(orocos-rtt STATIC $ENV{GLOBAL_LIBRARY_SRCS})
ADD_LIBRARY(orocos-rtt-${OROCOS_TARGET} STATIC $ENV{GLOBAL_LIBRARY_SRCS})
ELSE( BUILD_STATIC )
ADD_LIBRARY(orocos-rtt SHARED $ENV{GLOBAL_LIBRARY_SRCS})
SET_TARGET_PROPERTIES( orocos-rtt PROPERTIES
ADD_LIBRARY(orocos-rtt-${OROCOS_TARGET} SHARED $ENV{GLOBAL_LIBRARY_SRCS})
SET_TARGET_PROPERTIES( orocos-rtt-${OROCOS_TARGET} PROPERTIES
DEFINE_SYMBOL "RTT_DLL_EXPORT"
SOVERSION "${RTT_VERSION}"
)
Expand All @@ -103,11 +104,13 @@ ENDIF ( BUILD_STATIC )
#
# Set accumulated compilation flags: (.so and .a)
#
SET_TARGET_PROPERTIES( orocos-rtt PROPERTIES
SET_TARGET_PROPERTIES( orocos-rtt-${OROCOS_TARGET} PROPERTIES
COMPILE_FLAGS "${CMAKE_CXX_FLAGS_ADD} ${RTT_CFLAGS}"
)

INSTALL_TARGETS(/lib orocos-rtt)
INSTALL_TARGETS(/lib orocos-rtt-${OROCOS_TARGET})

### Generate rtt-config.h : HAS NO ACCESS TO SUBDIRECTORY VARIABLES !!!
CONFIGURE_FILE( ${PROJ_SOURCE_DIR}/src/rtt-config.h.in ${PROJ_BINARY_DIR}/src/rtt-config.h @ONLY)
CONFIGURE_FILE( ${PROJ_SOURCE_DIR}/src/targets/rtt-target.h.in ${PROJ_BINARY_DIR}/src/targets/rtt-target.h @ONLY)
CONFIGURE_FILE( ${PROJ_SOURCE_DIR}/src/targets/target.in ${PROJ_BINARY_DIR}/src/targets/${OROCOS_TARGET} @ONLY)
10 changes: 5 additions & 5 deletions src/corba/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,19 @@ IF(ENABLE_CORBA)
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )

IF ( BUILD_STATIC )
ADD_LIBRARY(orocos-rtt-corba STATIC ${CPPS})
ADD_LIBRARY(orocos-rtt-corba-${OROCOS_TARGET} STATIC ${CPPS})
ELSE( BUILD_STATIC )
ADD_LIBRARY(orocos-rtt-corba SHARED ${CPPS})
SET_TARGET_PROPERTIES( orocos-rtt-corba PROPERTIES
ADD_LIBRARY(orocos-rtt-corba-${OROCOS_TARGET} SHARED ${CPPS})
SET_TARGET_PROPERTIES( orocos-rtt-corba-${OROCOS_TARGET} PROPERTIES
DEFINE_SYMBOL "RTT_DLL_EXPORT"
SOVERSION "${RTT_VERSION}"
)
ENDIF ( BUILD_STATIC )

SET_TARGET_PROPERTIES( orocos-rtt-corba PROPERTIES
SET_TARGET_PROPERTIES( orocos-rtt-corba-${OROCOS_TARGET} PROPERTIES
COMPILE_FLAGS "${CMAKE_CXX_FLAGS_ADD} ${RTT_CFLAGS} -D_REENTRANT"
)

INSTALL_TARGETS(/lib orocos-rtt-corba)
INSTALL_TARGETS(/lib orocos-rtt-corba-${OROCOS_TARGET})

ENDIF(ENABLE_CORBA)
78 changes: 5 additions & 73 deletions src/rtt-config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,82 +6,14 @@
#define RTT_VERSION_MINOR @RTT_VERSION_MINOR@
#define RTT_VERSION_PATCH @RTT_VERSION_PATCH@

#define OROCFG_CORELIB_REALTIME_TOOLKIT 1
#define OROCFG_CORELIB_REALTIME_TOOLKIT_IMPORT 1

#cmakedefine OS_AGNOSTIC
#ifdef OS_AGNOSTIC
#define OROBLD_OS_AGNOSTIC
#endif
#define ORONUM_OS_MAX_THREADS @OS_MAX_THREADS@
#define OROSEM_OS_PERIODIC_THREADS_MAX_OVERRUN 5
#define OROSEM_OS_LOCK_MEMORY 1
#cmakedefine OS_HAVE_MAIN
#cmakedefine OS_HAVE_IOSTREAM
#cmakedefine OS_HAVE_STREAMS
#cmakedefine OS_THREAD_SCOPE
#ifdef OS_THREAD_SCOPE
#define OROPKG_OS_THREAD_SCOPE
#endif

#cmakedefine CONFIG_FORCE_UP

#cmakedefine OS_EMBEDDED
#ifdef OS_EMBEDDED
#define ORO_EMBEDDED
#endif

#cmakedefine OS_NOEXCEPTIONS
#ifdef OS_NOEXCEPTIONS
#define ORO_OS_NOEXCEPTIONS
#endif

#if !defined(OS_EMBEDDED) || defined(OS_EMBEDDED_SCRIPTING)
#define OROPKG_EXECUTION_PROGRAM_PARSER
#endif

#cmakedefine OROBLD_DISABLE_LOGGING
#cmakedefine OROSEM_PRINTF_LOGGING
#cmakedefine OROSEM_FILE_LOGGING
#cmakedefine OROSEM_REMOTE_LOGGING
#define ORONUM_LOGGING_BUFSIZE @ORONUM_LOGGING_BUFSIZE@

#define OROPKG_OS
#define OROPKG_CORELIB_EVENTS
#define OROPKG_CORELIB_REPORTING
#define OROPKG_DEVICE_INTERFACE

#define OROPKG_EXECUTION
#define OROPKG_EXECUTION_ENGINE 1
#define OROPKG_EXECUTION_PROGRAM_PROCESSOR
#cmakedefine OROPKG_EXECUTION_ENGINE_EVENTS
#cmakedefine OROPKG_EXECUTION_ENGINE_COMMANDS
#cmakedefine OROPKG_EXECUTION_ENGINE_PROGRAMS
#cmakedefine OROPKG_EXECUTION_ENGINE_STATEMACHINES
#define ORONUM_EXECUTION_PROC_QUEUE_SIZE @ORONUM_EXECUTION_PROC_QUEUE_SIZE@

#cmakedefine ORO_SUPPORT_BOOST

/** If marshalling is enabled, use these defines. */
#cmakedefine ENABLE_MARSHALLING
#ifdef ENABLE_MARSHALLING
#cmakedefine OROPKG_SUPPORT_XERCES_C
#define OROPKG_CORELIB_PROPERTIES_MARSHALLING
#define OROPKG_CORELIB_PROPERTIES_MARSHALLING_CPF 1
#define ORODAT_CORELIB_PROPERTIES_MARSHALLING_INCLUDE @ORODAT_CORELIB_PROPERTIES_MARSHALLING_INCLUDE@
#define OROCLS_CORELIB_PROPERTIES_MARSHALLING_DRIVER @OROCLS_CORELIB_PROPERTIES_MARSHALLING_DRIVER@
#define ORODAT_CORELIB_PROPERTIES_DEMARSHALLING_INCLUDE @ORODAT_CORELIB_PROPERTIES_DEMARSHALLING_INCLUDE@
#define OROCLS_CORELIB_PROPERTIES_DEMARSHALLING_DRIVER @OROCLS_CORELIB_PROPERTIES_DEMARSHALLING_DRIVER@
// if not defined, use the default (@OROCOS_TARGET@)
#ifndef OROCOS_TARGET
// OROCOS_TARGET is only used to include the file targets/OROCOS_TARGET
#cmakedefine OROCOS_TARGET @OROCOS_TARGET@
#endif

#define OROSEM_OS_LXRT_CHECK 1
#define ORONUM_RTAI_VERSION 3

#cmakedefine OROPKG_SUPPORT_XENOMAI
#cmakedefine OROPKG_OS_LXRT
#cmakedefine OROPKG_OS_GNULINUX
#cmakedefine OROPKG_OS_XENOMAI
#cmakedefine OROPKG_OS_ECOS
#include "targets/rtt-target.h"

// Detect the CPU we are compiling for
# if defined( __GNUC__ ) && defined( __i386__ )
Expand Down
3 changes: 3 additions & 0 deletions src/targets/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

GLOBAL_ADD_INCLUDE( rtt/targets rtt-target.h)
GLOBAL_ADD_INCLUDE( rtt/targets ${OROCOS_TARGET})
23 changes: 23 additions & 0 deletions src/targets/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
The target files in this directory contain the defines which were
enabled when the orocos-rtt-<target> library was built. You require
these defines when including RTT headers in your application.

One target file is included by rtt-target.h, which was included by
rtt-config.h. Target files may be hand written or automatically be
generated by the RTT build system and describe which features were on
or off and which OS layer was selected.

This directory structure allows to have multiple configurations
(targets) share the same header files in the same location. The user
can choose a configuration by setting -DOROCOS_TARGET=<target> where
<target> is a filename in this directory, for example:

-DOROCOS_TARGET=lxrt

When the pkg-config tool is used to query for the --cflags, the
-DOROCOS_TARGET option is automatically presented. In case no
OROCOS_TARGET define is given, a default is selected.

This system was introduced to ease packaging and installing for
multiple targets on the same system, in the same directory structure.

14 changes: 14 additions & 0 deletions src/targets/rtt-target.h.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* This is a helper file in the targets subdirectory
* It includes the correct target, on behalf of rtt-config.h
*/

#define ORO_RTT_CONFIG_str(s) ORO_RTT_CONFIG__str(s)
#define ORO_RTT_CONFIG__str(s) #s

#define OROCOS_TARGET_HEADER ORO_RTT_CONFIG_str(OROCOS_TARGET)

#include OROCOS_TARGET_HEADER

#undef ORO_RTT_CONFIG_str
#undef ORO_RTT_CONFIG__str
84 changes: 84 additions & 0 deletions src/targets/target.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#ifndef RTT_TARGET_@OROCOS_TARGET@_H
#define RTT_TARGET_@OROCOS_TARGET@_H

#define OROCFG_CORELIB_REALTIME_TOOLKIT 1
#define OROCFG_CORELIB_REALTIME_TOOLKIT_IMPORT 1

#cmakedefine OS_AGNOSTIC
#ifdef OS_AGNOSTIC
#define OROBLD_OS_AGNOSTIC
#endif
#define ORONUM_OS_MAX_THREADS @OS_MAX_THREADS@
#define OROSEM_OS_PERIODIC_THREADS_MAX_OVERRUN 5
#define OROSEM_OS_LOCK_MEMORY 1
#cmakedefine OS_HAVE_MAIN
#cmakedefine OS_HAVE_IOSTREAM
#cmakedefine OS_HAVE_STREAMS
#cmakedefine OS_THREAD_SCOPE
#ifdef OS_THREAD_SCOPE
#define OROPKG_OS_THREAD_SCOPE
#endif

#cmakedefine CONFIG_FORCE_UP

#cmakedefine OS_EMBEDDED
#ifdef OS_EMBEDDED
#define ORO_EMBEDDED
#endif

#cmakedefine OS_NOEXCEPTIONS
#ifdef OS_NOEXCEPTIONS
#define ORO_OS_NOEXCEPTIONS
#endif

#if !defined(OS_EMBEDDED) || defined(OS_EMBEDDED_SCRIPTING)
#define OROPKG_EXECUTION_PROGRAM_PARSER
#endif

#cmakedefine OROBLD_DISABLE_LOGGING
#cmakedefine OROSEM_PRINTF_LOGGING
#cmakedefine OROSEM_FILE_LOGGING
#cmakedefine OROSEM_REMOTE_LOGGING
#define ORONUM_LOGGING_BUFSIZE @ORONUM_LOGGING_BUFSIZE@

#define OROPKG_OS
#define OROPKG_CORELIB_EVENTS
#define OROPKG_CORELIB_REPORTING
#define OROPKG_DEVICE_INTERFACE

#define OROPKG_EXECUTION
#define OROPKG_EXECUTION_ENGINE 1
#define OROPKG_EXECUTION_PROGRAM_PROCESSOR
#cmakedefine OROPKG_EXECUTION_ENGINE_EVENTS
#cmakedefine OROPKG_EXECUTION_ENGINE_COMMANDS
#cmakedefine OROPKG_EXECUTION_ENGINE_PROGRAMS
#cmakedefine OROPKG_EXECUTION_ENGINE_STATEMACHINES
#define ORONUM_EXECUTION_PROC_QUEUE_SIZE @ORONUM_EXECUTION_PROC_QUEUE_SIZE@

#cmakedefine ORO_SUPPORT_BOOST

/** If marshalling is enabled, use these defines. */
#cmakedefine ENABLE_MARSHALLING
#ifdef ENABLE_MARSHALLING
#cmakedefine OROPKG_SUPPORT_XERCES_C
#define OROPKG_CORELIB_PROPERTIES_MARSHALLING
#define OROPKG_CORELIB_PROPERTIES_MARSHALLING_CPF 1
#define ORODAT_CORELIB_PROPERTIES_MARSHALLING_INCLUDE @ORODAT_CORELIB_PROPERTIES_MARSHALLING_INCLUDE@
#define OROCLS_CORELIB_PROPERTIES_MARSHALLING_DRIVER @OROCLS_CORELIB_PROPERTIES_MARSHALLING_DRIVER@
#define ORODAT_CORELIB_PROPERTIES_DEMARSHALLING_INCLUDE @ORODAT_CORELIB_PROPERTIES_DEMARSHALLING_INCLUDE@
#define OROCLS_CORELIB_PROPERTIES_DEMARSHALLING_DRIVER @OROCLS_CORELIB_PROPERTIES_DEMARSHALLING_DRIVER@
#endif

// Target detection macros for users:
// Backwards compatibility:
#define OROPKG_OS_@OROCOS_TARGET_CAP@

// New format:
#define OROCOS_TARGET_@OROCOS_TARGET_CAP@ 1

// Safety check:
#ifndef OROPKG_OS_@OROCOS_TARGET_CAP@
#error "Configuration error: OROPKG_OS_@OROCOS_TARGET_CAP@ not defined !"
#endif

#endif

0 comments on commit ddf4b11

Please sign in to comment.