/** * @file config.oil * * @section desc File description * * Trampoline OIL implementation * * @section copyright Copyright * * Trampoline RTOS * * Trampoline is copyright (c) CNRS, University of Nantes, Ecole Centrale de Nantes * Trampoline is protected by the French intellectual property law. * * This software is distributed under the GNU Public Licence V2. * Check the LICENSE file in the root directory of Trampoline * * @section infos File informations * * $Date:$ * $Rev:$ * $Author:$ * $URL:$ */ IMPLEMENTATION trampoline_common { KERNEL [] { STRING PATH; STRING FILE[]; }; APICONFIG [] { STRING FILE[]; STRING HEADER[]; IDENTIFIER ID_PREFIX; STRING DIRECTORY; STRUCT { BOOLEAN HIDDEN = FALSE; BOOLEAN LOCK_KERNEL; BOOLEAN CALLABLE_BY_ISR1 = FALSE; IDENTIFIER WITH_AUTO ACTUAL; IDENTIFIER KERNEL; IDENTIFIER RETURN_TYPE; STRUCT { IDENTIFIER TYPE; ENUM [ CONST, VAR, P2VAR, CONSTP2VAR, P2CONST, CONSTP2CONST ] KIND; } ARGUMENT[]; } SYSCALL[]; STRUCT { IDENTIFIER TYPE; IDENTIFIER STORAGE; STRING VALUE; } CONST[]; }; /*=========================================================================== * Machines specific files to add to the build system */ PLATFORM_FILES [] { STRING PATH; STRING CFILE[]; STRING CPPFILE[]; STRING ASFILE[]; }; /*=========================================================================== * Libraries to add to the build system */ LIBRARY [] { LIBRARY_TYPE NEEDS []; STRING CHEADER[]; STRING CPPHEADER[]; STRING PATH; STRING CFILE[]; STRING CPPFILE[]; STRING ASFILE[]; }; /*=========================================================================== * Machines specific generated files to add to the build system */ GENERATED_FILES [] { STRING CFILE[]; STRING ASFILE[]; }; /*=========================================================================== * Additional GOAL definition */ GOAL [] { ENUM [ TARGET, CUSTOM { STRING NAME; } ] DEPENDENCY[]; STRING MESSAGE; STRING COMMAND; STRING ARGUMENT[]; }; /*=========================================================================== * Postbuild command definition. * The name of a post-build command is the GOAL. */ POSTBUILD [] { STRUCT { ENUM [ COMPILER, ASSEMBLER, LINKER, COPIER, CUSTOM { STRING MESSAGE; STRING NAME; } ] TYPE; ENUM [ TARGET, ORIGINAL_TARGET, INTERMEDIATE { STRING SOURCE; } ] INPUT; STRING WITH_AUTO OUTPUT; STRING PREOPTION[]; STRING POSTOPTION[]; } COMMAND[]; }; POSTCOMMAND [] { STRUCT { STRING MESSAGE; STRING COMMAND; ENUM [ TARGET { STRING EXT; }, INTERMEDIATE { STRING SOURCE; } ] INPUT; STRING WITH_AUTO OUTPUT; STRING PREOPTION[]; STRING POSTOPTION[]; ENUM [ LITERAL { STRING VALUE; STRING OPT; }, ENVAR { STRING NAME; STRING OPT; } ] PREOPT[]; } COMMAND[]; }; BUILDOPTIONS [] { STRING CFLAGS[]; STRING CPPFLAGS[]; STRING COMMONFLAGS[]; /* common flags for C++ and C */ STRING ASFLAGS[]; STRING LDFLAGS[]; /* idem for flags that should appear in the beginning of the command */ STRING PRECFLAGS[]; STRING PRECPPFLAGS[]; STRING PRECOMMONFLAGS[]; /* common flags for C++ and C */ STRING PREASFLAGS[]; STRING PRELDFLAGS[]; }; OS { /* Standard OIL attributes */ ENUM [STANDARD, EXTENDED] STATUS; BOOLEAN [ TRUE { STRING FILE = ""; }, FALSE ] WITHORTI = FALSE; BOOLEAN STARTUPHOOK = FALSE; BOOLEAN ERRORHOOK = FALSE; BOOLEAN SHUTDOWNHOOK = FALSE; BOOLEAN PRETASKHOOK = FALSE; BOOLEAN POSTTASKHOOK = FALSE; BOOLEAN PANICHOOK = FALSE; BOOLEAN USEGETSERVICEID = FALSE; BOOLEAN USEPARAMETERACCESS = FALSE; BOOLEAN USERESSCHEDULER = TRUE; /* Extra Trampoline attributes */ BOOLEAN SYSTEM_CALL = FALSE; BOOLEAN DEBUG = FALSE; /* When TRUE, output a user defined command file for GDB */ BOOLEAN [ TRUE { UINT32 PORT; }, FALSE ] GDBCOMMANDS = FALSE; BOOLEAN INTERRUPTTABLE = FALSE; BOOLEAN PACKED_DATA = FALSE; BOOLEAN PAINT_STACK = FALSE; BOOLEAN PAINT_REGISTERS = FALSE; BOOLEAN ISR2_PRIORITY_MASKING = FALSE; IDENTIFIER SCHEDULER = osek; BOOLEAN [ TRUE { ENUM [ elxr { STRING SCRIPT = "script.ld"; }, cosmic_ld { STRING SCRIPT = "script.lkf"; }, gnu_ld { STRING SCRIPT = "script.ld"; }, mwld { STRING SCRIPT = "script.mcf"; } ] LINKER; ENUM [gcc, ghs, mwc, cosmic] COMPILER; ENUM [gnu_as, cosmic_as] ASSEMBLER; BOOLEAN MEMORY_PROTECTION = FALSE; }, FALSE ] MEMMAP = FALSE; BOOLEAN [ TRUE { STRING APP_SRC[]; STRING APP_CPPSRC[]; STRING CFLAGS[]; STRING CPPFLAGS[]; STRING COMMONFLAGS[]; /* common flags for C++ and C */ STRING ASFLAGS[]; STRING LDFLAGS[]; STRING APP_NAME = "trampoline"; STRING TRAMPOLINE_BASE_PATH = ".."; STRING COMPILER = "comp_undef"; STRING CPPCOMPILER = "g++"; STRING ASSEMBLER = "as_undef"; STRING LINKER = "ld_undef"; STRING COPIER = "objcopy"; ENUM [ MAKE, PYTHON { BOOLEAN GUESSLIBPATH;}, CMAKE { BOOLEAN VSCODE=FALSE;} ] SYSTEM = PYTHON; }, FALSE ] BUILD = FALSE; BOOLEAN [ TRUE { /* FORMAT is target specific */ BOOLEAN PROC = TRUE; BOOLEAN RESOURCE = TRUE; BOOLEAN ALARM = TRUE; BOOLEAN EVENT = TRUE; BOOLEAN MESSAGE = TRUE; BOOLEAN IOC = FALSE; /* Done on posix only */ }, FALSE ] TRACE = FALSE; /* used to add additional init code for a board. */ BOOLEAN INITBOARD = FALSE; IDENTIFIER KERNEL_MODULE []; }; APPMODE [] { BOOLEAN DEFAULT = FALSE; }; TASK [] { BOOLEAN [ TRUE { APPMODE_TYPE APPMODE[]; }, FALSE ] AUTOSTART; UINT32 PRIORITY; UINT32 ACTIVATION; ENUM [NON, FULL] SCHEDULE; EVENT_TYPE EVENT[]; RESOURCE_TYPE RESOURCE[]; MESSAGE_TYPE MESSAGE[]; }; ISR [] { UINT32 [1, 2] CATEGORY; UINT32 PRIORITY; /* Trampoline extra */ RESOURCE_TYPE RESOURCE[]; MESSAGE_TYPE MESSAGE[]; }; COUNTER [] { UINT32 MINCYCLE = 1; UINT32 MAXALLOWEDVALUE = 65535; UINT32 TICKSPERBASE = 1; }; ALARM [] { COUNTER_TYPE COUNTER; ENUM [ ACTIVATETASK { TASK_TYPE TASK; }, SETEVENT { TASK_TYPE TASK; EVENT_TYPE EVENT; }, ALARMCALLBACK { STRING ALARMCALLBACKNAME; }, INCREMENTCOUNTER { COUNTER_TYPE COUNTER; } ] ACTION; BOOLEAN [ TRUE { UINT32 ALARMTIME; UINT32 CYCLETIME; APPMODE_TYPE APPMODE[]; }, FALSE ] AUTOSTART; }; EVENT [] { UINT64 WITH_AUTO MASK; }; RESOURCE [] { ENUM [ STANDARD, LINKED { RESOURCE_TYPE LINKEDRESOURCE; }, INTERNAL ] RESOURCEPROPERTY; }; MESSAGE [] { ENUM [ SEND_STATIC_INTERNAL { STRING CDATATYPE; }, SEND_STATIC_EXTERNAL { STRING CDATATYPE; ENUM WITH_AUTO [ TRIGGERED, PENDING ] TRANSFERPROPERTY = AUTO; #include STRING NETWORKORDERCALLOUT = ""; STRING CPUORDERCALLOUT = ""; UINT64 WITH_AUTO INITIALVALUE = AUTO; NETWORKMESSAGE_TYPE NETWORKMESSAGE; }, SEND_DYNAMIC_EXTERNAL { ENUM WITH_AUTO [ TRIGGERED, PENDING ] TRANSFERPROPERTY = AUTO; STRING NETWORKORDERCALLOUT = ""; STRING CPUORDERCALLOUT = ""; UINT64 WITH_AUTO INITIALVALUE = AUTO; NETWORKMESSAGE_TYPE NETWORKMESSAGE; }, SEND_ZERO_INTERNAL, SEND_ZERO_EXTERNAL { STRING NETWORKORDERCALLOUT = ""; STRING CPUORDERCALLOUT = ""; NETWORKMESSAGE_TYPE NETWORKMESSAGE; }, RECEIVE_ZERO_INTERNAL { MESSAGE_TYPE SENDINGMESSAGE; }, RECEIVE_ZERO_EXTERNAL { STRING NETWORKORDERCALLOUT = ""; STRING CPUORDERCALLOUT = ""; NETWORKMESSAGE_TYPE NETWORKMESSAGE; }, RECEIVE_UNQUEUED_INTERNAL { MESSAGE_TYPE SENDINGMESSAGE; #include UINT64 INITIALVALUE = 0; }, RECEIVE_QUEUED_INTERNAL { MESSAGE_TYPE SENDINGMESSAGE; #include UINT64 INITIALVALUE = 0; UINT32 QUEUESIZE; }, RECEIVE_UNQUEUED_EXTERNAL { STRING CDATATYPE; #include BOOLEAN [ TRUE { MESSAGE_TYPE RECEIVEMESSAGE; }, FALSE { STRING NETWORKORDERCALLOUT = ""; STRING CPUORDERCALLOUT = ""; NETWORKMESSAGE_TYPE NETWORKMESSAGE; } ] LINK; UINT64 WITH_AUTO INITIALVALUE = AUTO; }, RECEIVE_QUEUED_EXTERNAL { STRING CDATATYPE; UINT32 QUEUESIZE; #include BOOLEAN [ TRUE { MESSAGE_TYPE RECEIVEMESSAGE; }, FALSE { STRING NETWORKORDERCALLOUT = ""; STRING CPUORDERCALLOUT = ""; NETWORKMESSAGE_TYPE NETWORKMESSAGE; } ] LINK; UINT64 WITH_AUTO INITIALVALUE = AUTO; }, RECEIVE_DYNAMIC_EXTERNAL { BOOLEAN [ TRUE { MESSAGE_TYPE RECEIVEMESSAGE; }, FALSE { STRING NETWORKORDERCALLOUT = ""; STRING CPUORDERCALLOUT = ""; NETWORKMESSAGE_TYPE NETWORKMESSAGE; } ] LINK; UINT64 WITH_AUTO INITIALVALUE = AUTO; }, RECEIVE_ZERO_SENDERS { STRING CDATATYPE; UINT64 INITIALVALUE = 0; } ] MESSAGEPROPERTY; ENUM [ NONE, ACTIVATETASK { TASK_TYPE TASK; }, SETEVENT { TASK_TYPE TASK; EVENT_TYPE EVENT; }, COMCALLBACK { STRING CALLBACKROUTINENAME; MESSAGE_TYPE MESSAGE[]; }, FLAG { STRING FLAGNAME; }, INMCALLBACK { STRING WITH_AUTO CALLBACKROUTINENAME; UINT32 WITH_AUTO MONITOREDIPDU; } ] NOTIFICATION = NONE; ENUM [ NONE, ACTIVATETASK { TASK_TYPE TASK; }, SETEVENT { TASK_TYPE TASK; EVENT_TYPE EVENT; }, COMCALLBACK { STRING CALLBACKROUTINENAME; MESSAGE_TYPE MESSAGE[]; }, FLAG { STRING FLAGNAME; }, INMCALLBACK { STRING WITH_AUTO CALLBACKROUTINENAME; UINT32 WITH_AUTO MONITOREDIPDU; } ] NOTIFICATIONERROR = NONE; }; NETWORKMESSAGE [] { IPDU_TYPE IPDU; ENUM [ STATIC { UINT32 SIZEINBITS; ENUM [ LITTLEENDIAN, BIGENDIAN ] BITORDERING; UINT32 BITPOSITION; ENUM [ UNSIGNEDINTEGER, BYTEARRAY ] DATAINTERPRETATION; UINT64 INITIALVALUE = 0; ENUM [ SENT { ENUM WITH_AUTO [ TRIGGERED, PENDING ] TRANSFERPROPERTY = AUTO; }, RECEIVE ] DIRECTION; }, DYNAMIC { UINT32 MAXIMUMSIZEINBITS; ENUM [ LITTLEENDIAN, BIGENDIAN ] BITORDERING; UINT32 BITPOSITION; UINT64 INITIALVALUE = 0; ENUM [ SENT { ENUM WITH_AUTO [ TRIGGERED, PENDING ] TRANSFERPROPERTY = AUTO; }, RECEIVE ] DIRECTION; }, ZERO ] MESSAGEPROPERTY; }; COM { FLOAT COMTIMEBASE = 0.001; BOOLEAN COMERRORHOOK = FALSE; BOOLEAN COMUSEGETSERVICEID = FALSE; BOOLEAN COMUSEPARAMETERACCESS = FALSE; BOOLEAN COMSTARTCOMEXTENSION = FALSE; STRING COMAPPMODE[]; ENUM [ COMSTANDARD, COMEXTENDED ] COMSTATUS = COMSTANDARD; STRING USE []; }; IPDU [] { UINT32 SIZEINBITS; ENUM [ SENT { ENUM [ DIRECT { UINT64 MINIMUMDELAYTIME = 0; }, PERIODIC { UINT64 TIMEPERIOD; UINT64 WITH_AUTO TIMEOFFSET = AUTO; }, MIXED { UINT64 TIMEPERIOD; UINT64 WITH_AUTO TIMEOFFSET = AUTO; UINT64 MINIMUMDELAYTIME = 0; } ] TRANSMISSIONMODE; UINT64 TIMEOUT = 0; }, RECEIVED { UINT64 TIMEOUT = 0; UINT64 WITH_AUTO FIRSTTIMEOUT = AUTO; } ] IPDUPROPERTY; STRING IPDUCALLOUT = ""; STRING LAYERUSED = ""; }; NM { }; }; #include "kernel.oil" #include "api.oil"