This user guide explains how to build with the FACE conformance libraries.
Introduction to RTI Connext DDS Micro Support for FACE
This user-manual describes how to build RTI Connext DDS Micro using the FACE conformance test tools.
Requirements
Connext DDS Micro Source Code
The RTI Connext DDS Micro source code is available from RTI's support portal.
Conformance Tools
RTI does not distribute the FACE conformance tools.
CMake
The RTI Connext DDS Micro source is distributed with a CMakeList.txt project files. CMake is an easy to use tool that generates makefiles or project files for various build-tools, such has UNIX makefiles, Microsoft Visual Studio project files, and Xcode.
CMake can be downloaded from www.cmake.org
FACE Golden Libraries
The FACE conformance tools uses a set of golden libraries. There are different golden libraries for difference FACE services, languages and profiles. RTI Connext DDS Micro only confirms to the safetyExt and safety profile of OSS using the C language.
Building the libraries
The FACE conformance tools ships with its own set of tools to build the golden libraries. Please follow the instructions provided by FACE. In order to build the FACE golden libraries it is necessary to port to the required platform. RTI has only tested RTI Connext DDS Micro on Linux 2.6 with GCC 4.4.5. For completeness the comlete list of all the files modified by RTI are included below in source form.
Modified Files
FACEConformanceTestSuite-2.0.12_rti/compilerSpecific/C/allowedDefinitions/CompilerSpecific.c
#include "CompilerSpecific.h"
void __stack_chk_fail()
{}
void no_required_functions()
{
}
#define POSSIBLY_NEEDED_ON_WINDOWS
#ifdef POSSIBLY_NEEDED_ON_WINDOWS
int __main(int argc, const char **argv)
{
}
int _main(void) { }
int _start() { }
int __stack_chk_fail_local()
{
}
#endif
FACEConformanceTestSuite-2.0.12_rti/compilerSpecific/C/allowedDefinitions/CompilerSpecific.h
#ifndef COMPILER_SPECIFIC_H
#define COMPILER_SPECIFIC_H
void no_required_functions();
extern int __stack_chk_fail_local();
extern int _main(void);
extern int _start(void);
#endif
FACEConformanceTestSuite-2.0.12_rti/compilerSpecific/C/systemLibraryDefinitions/CONFORMANCE_TEST_FACE_EXACT_TYPES.h
typedef signed char FACE_int8_t;
typedef signed short FACE_int16_t;
typedef signed int FACE_int32_t;
typedef signed long long FACE_int64_t;
typedef unsigned char FACE_uint8_t;
typedef unsigned short FACE_uint16_t;
typedef unsigned int FACE_uint32_t;
typedef unsigned long long FACE_uint64_t;
typedef unsigned int FACE_size_t;
FACEConformanceTestSuite-2.0.12_rti/compilerSpecific/C/systemLibraryDefinitions/CONFORMANCE_TEST_FACE_NULL.h
#define FACE_NULL 0 // define NULL here
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/include/face/FaceDefs.h
#ifndef FACEDEFS_H_
#define FACEDEFS_H_
#include<stdbool.h>
#include<wchar.h>
typedef unsigned long FACE_unsigned_long;
typedef long FACE_long;
typedef bool FACE_boolean;
typedef long long int FACE_long_long;
typedef char FACE_char;
typedef unsigned long long FACE_unsigned_long_long;
typedef unsigned short FACE_unsigned_short;
typedef long double FACE_long_double;
typedef double FACE_double;
typedef wchar_t FACE_wchar;
typedef char FACE_octet;
typedef float FACE_float;
typedef short int FACE_short;
typedef unsigned int size_t;
#endif
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/Makefile.POSIX
include Makefile.env
# Values used from Makefile.env
CC = $(FACE_CC)
CFLAGS = $(FACE_CFLAGS) $(FACE_COMPILER_SPECIFIC_CFLAGS) $(FACE_POSIX_CFLAGS)
AR = $(FACE_AR)
AR_FLAGS = $(FACE_AR_FLAGS)
OBJECT_SUFFIX=$(FACE_OBJ_SUFFIX)
LANG_SUFFIX = $(FACE_LANG_SUFFIX)
GENERAL_GOLD_LIB= posixGeneralGoldLib.a
GENERAL_SRCS = $(wildcard src/OSS/POSIX/general
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/src/OSS/POSIX/general/FACE_primtypes.h
#ifndef __FACE_CONFORM__FACE_primtypes_h__
#define __FACE_CONFORM__FACE_primtypes_h__
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
#define restrict
#endif
#define restrict
#include <CONFORMANCE_TEST_FACE_NULL.h>
#include <CONFORMANCE_TEST_FACE_NULL.h>
#include <CONFORMANCE_TEST_FACE_EXACT_TYPES.h>
#include <CONFORMANCE_TEST_FACE_NULL.h>
#ifdef __cplusplus
}
#endif
#endif
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/src/OSS/POSIX/general/stdarg.h
#ifndef __FACE_CONFORM__stdarg_h__
#define __FACE_CONFORM__stdarg_h__
#ifdef __cplusplus
extern "C" {
#endif
#include <FACE_primtypes.h>
#ifndef __FACE_CONFORM____VA_LIST__
#define __FACE_CONFORM____VA_LIST__
typedef struct {
int __0;
int __1;
} va_list;
#endif
#define va_start(ap, argN)
#define va_copy(dest, src)
#define va_arg(ap, t) (t)(0)
#define va_end(ap)
#ifdef __cplusplus
}
#endif
#endif
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/src/OSS/POSIX/general/string.h
#ifndef __FACE_CONFORM__string_h__
#define __FACE_CONFORM__string_h__
#ifdef __cplusplus
extern "C" {
#endif
#include <FACE_primtypes.h>
#include <stddef.h>
#ifndef __FACE_CONFORM___NULL
#define __FACE_CONFORM___NULL
#define NULL FACE_NULL
#endif
typedef unsigned int size_t;
#if 1
#define __FACE_CONFORM____SIZE_T__
typedef FACE_size_t size_t;
#endif
#ifndef __FACE_CONFORM____LOCALE_T__
#define __FACE_CONFORM____LOCALE_T__
typedef struct {
int __0;
int __1;
} locale_t;
#endif
void * memchr(const void *, int, size_t);
int memcmp(const void *, const void *, size_t);
void * memcpy(void *restrict, const void *restrict, size_t);
void * memmove(void *, const void *, size_t);
void * memset(void *, int, size_t);
char * strcat(char *restrict, const char *restrict);
char * strchr(const char *, int);
int strcmp(const char *, const char *);
int strcoll(const char *, const char *);
char * strcpy(char *restrict, const char *restrict);
size_t strcspn(const char *, const char *);
char * strerror(int);
int strerror_r(int, char *, size_t);
size_t strlen(const char *);
char * strncat(char *restrict, const char *restrict, size_t);
int strncmp(const char *, const char *, size_t);
char * strncpy(char *restrict, const char *restrict, size_t);
char * strpbrk(const char *, const char *);
char * strrchr(const char *, int);
size_t strspn(const char *, const char *);
char * strstr(const char *, const char *);
char * strtok(char *restrict, const char *restrict);
char * strtok_r(char *restrict, const char *restrict, char **restrict);
size_t strxfrm(char *restrict, const char *restrict, size_t);
#ifdef __cplusplus
}
#endif
#endif
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/src/OSS/POSIX/safetyBase/FACE_primtypes.h
#ifndef __FACE_CONFORM__FACE_primtypes_h__
#define __FACE_CONFORM__FACE_primtypes_h__
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
#define restrict
#endif
#define restrict
#include <CONFORMANCE_TEST_FACE_NULL.h>
#include <CONFORMANCE_TEST_FACE_NULL.h>
#include <CONFORMANCE_TEST_FACE_EXACT_TYPES.h>
#include <CONFORMANCE_TEST_FACE_NULL.h>
#ifdef __cplusplus
}
#endif
#endif
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/src/OSS/POSIX/safetyExt/FACE_primtypes.h
#ifndef __FACE_CONFORM__FACE_primtypes_h__
#define __FACE_CONFORM__FACE_primtypes_h__
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
#define restrict
#endif
#define restrict
#include <CONFORMANCE_TEST_FACE_NULL.h>
#include <CONFORMANCE_TEST_FACE_NULL.h>
#include <CONFORMANCE_TEST_FACE_EXACT_TYPES.h>
#include <CONFORMANCE_TEST_FACE_NULL.h>
#ifdef __cplusplus
}
#endif
#endif
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/src/OSS/POSIX/safetyExt/stdarg.h
#ifndef __FACE_CONFORM__stdarg_h__
#define __FACE_CONFORM__stdarg_h__
#ifdef __cplusplus
extern "C" {
#endif
#include <FACE_primtypes.h>
#ifndef __FACE_CONFORM____VA_LIST__
#define __FACE_CONFORM____VA_LIST__
typedef struct {
int __0;
int __1;
} va_list;
#endif
#define va_start(ap, argN)
#define va_arg(ap, t) (t)(0)
#define va_end(ap)
#ifdef __cplusplus
}
#endif
#endif
FACEConformanceTestSuite-2.0.12_rti/compilerSpecific/C/Makefile.env
FACE_CC = gcc
FACE_MAKE = make
FACE_CFLAGS = -std=c99 -fno-builtin -nostdinc
FACE_LD = gcc
FACE_LD_FLAGS = -nodefaultlibs -nostartfiles
FACE_AR = ar
FACE_AR_FLAGS =
FACE_LOG_DIR = ../../logFiles
FACE_LANG_SUFFIX = .c
FACE_OBJ_SUFFIX = .o
FACE_EXEC_SUFFIX =
FACE_COMPILER_SPECIFIC_CFLAGS = -I../../compilerSpecific/C/systemLibraryDefinitions
FACEConformanceTestSuite-2.0.12_rti/conformanceInterfaceTests/C/OSS/POSIX/Makefile.env
FACE_CC = gcc
FACE_MAKE = make
FACE_CFLAGS = -std=c99 -fno-builtin -nostdinc -I/home/tron/test/FACEConformanceTestSuite-2.0.12/compilerSpecific/C/systemLibraryDefiniti
ons -I/home/tron/test/FACEConformanceTestSuite-2.0.12/goldStandardLibraries/C/src/OSS/POSIX/safetyBase
FACE_LD = gcc
FACE_LD_FLAGS = -nodefaultlibs -nostartfiles
FACE_AR = ar
FACE_AR_FLAGS =
FACE_LOG_DIR = /home/tron/test/FACEConformanceTestSuite-2.0.12/logFiles
FACE_LANG_SUFFIX = .c
FACE_OBJ_SUFFIX = .o
FACE_EXEC_SUFFIX =
FACE_GOLD_LIBS = ../../../../compilerSpecific/C/compilerSpecificGoldLib.a /home/tron/test/FACEConformanceTestSuite-2.0.12/goldStandardLibr
aries/C/posixSafetyBaseGoldLib.a
FACE_SEGMENT_OBJS =
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C/Makefile.env
FACE_CC = gcc
FACE_MAKE = make
FACE_CFLAGS = -std=c99 -fno-builtin -nostdinc
FACE_LD = gcc
FACE_LD_FLAGS = -nodefaultlibs -nostartfiles
FACE_AR = ar
FACE_AR_FLAGS =
FACE_LOG_DIR = ../../logFiles
FACE_LANG_SUFFIX = .c
FACE_OBJ_SUFFIX = .o
FACE_EXEC_SUFFIX =
FACE_COMPILER_SPECIFIC_CFLAGS = -I../../compilerSpecific/C/systemLibraryDefinitions
Building the libraries
Change into the directory:
FACEConformanceTestSuite-2.0.12_rti/goldStandardLibraries/C
make -f Makefile.POSIX
This command will compile the golden OSS POSIX libraries (all profiles).
Building the RTI Connext DDS Micro Source
The following is step by step instructions on how to built the RTI Connext DDS Micro source:
- Extract the source-code. Please note that the remaining instructions assume that only a single platform is built from the source.
- Click the "Configure" button.
- Select UNIX Makefiles from the drop-down list.
- Select "Use default compilers" or "Specify native compilers" as required. Press done.
- Click "Configure" again. There should not be any red lines. If there are, click configure again. NOTE: A red line means that a variable has not been configured. Some options could add new variables. Thus, if you change an option a new red lines may appear. In this case configure the variable and press configure.
- Build the generated project
- Libraries are placed in lib/<RTIMICRO_BUILD_LIBRARY_TARGET_NAME>