diff --git a/Makefile b/Makefile index aff9329..4a1764a 100644 --- a/Makefile +++ b/Makefile @@ -29,3 +29,6 @@ SOURCES_3.14 += mlock.c DBDS_3.14 += mlock.dbd SOURCES_vxWorks += bootNotify.c + +HEADERS_3.13 += epicsEndian.h +HEADERS_3.14.8 += epicsEndian.h diff --git a/epicsEndian.h b/epicsEndian.h new file mode 100644 index 0000000..4f59703 --- /dev/null +++ b/epicsEndian.h @@ -0,0 +1,80 @@ +#ifndef INC_epicsEndian_H +#define INC_epicsEndian_H + +#if defined (vxWorks) + +#include + +#if _BYTE_ORDER == _LITTLE_ENDIAN +# define EPICS_BYTE_ORDER EPICS_ENDIAN_LITTLE +#elif _BYTE_ORDER == _BIG_ENDIAN +# define EPICS_BYTE_ORDER EPICS_ENDIAN_BIG +#else +# error EPICS hasnt been ported to _BYTE_ORDER specified by vxWorks +#endif + +/* for now, assume that vxWorks doesnt run on weird arch like ARM NWFP */ +#define EPICS_FLOAT_WORD_ORDER EPICS_BYTE_ORDER + +#elif defined (_WIN32) + +/* for now, assume that win32 runs only on generic little endian */ +#define EPICS_BYTE_ORDER EPICS_ENDIAN_LITTLE +#define EPICS_FLOAT_WORD_ORDER EPICS_BYTE_ORDER + +#else + +/* if compilation fails because this wasnt found then you may need to define an OS + specific osdWireConfig.h */ + +#include + +#ifdef __BYTE_ORDER +# if __BYTE_ORDER == __LITTLE_ENDIAN +# define EPICS_BYTE_ORDER EPICS_ENDIAN_LITTLE +# elif __BYTE_ORDER == __BIG_ENDIAN +# define EPICS_BYTE_ORDER EPICS_ENDIAN_BIG +# else +# error EPICS hasnt been ported to run on the specified __BYTE_ORDER +# endif +#else +# ifdef BYTE_ORDER +# if BYTE_ORDER == LITTLE_ENDIAN +# define EPICS_BYTE_ORDER EPICS_ENDIAN_LITTLE +# elif BYTE_ORDER == BIG_ENDIAN +# define EPICS_BYTE_ORDER EPICS_ENDIAN_BIG +# else +# error EPICS hasnt been ported to run on the specified BYTE_ORDER +# endif +# else +# error doesnt specify __BYTE_ORDER or BYTE_ORDER - is an OS specific osdWireConfig.h needed? +# endif +#endif + +#ifdef __FLOAT_WORD_ORDER +# if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN +# define EPICS_FLOAT_WORD_ORDER EPICS_ENDIAN_LITTLE +# elif __FLOAT_WORD_ORDER == __BIG_ENDIAN +# define EPICS_FLOAT_WORD_ORDER EPICS_ENDIAN_BIG +# else +# error EPICS hasnt been ported to specified __FLOAT_WORD_ORDER +# endif +#else +# ifdef FLOAT_WORD_ORDER +# if FLOAT_WORD_ORDER == LITTLE_ENDIAN +# define EPICS_FLOAT_WORD_ORDER EPICS_ENDIAN_LITTLE +# elif FLOAT_WORD_ORDER == BIG_ENDIAN +# define EPICS_FLOAT_WORD_ORDER EPICS_ENDIAN_BIG +# else +# error EPICS hasnt been ported to specified FLOAT_WORD_ORDER +# endif +# else + /* assume that if neither __FLOAT_WORD_ORDER nor FLOAT_WORD_ORDER are + defined then weird fp ordered archs like arm nwfp aren't supported */ +# define EPICS_FLOAT_WORD_ORDER EPICS_BYTE_ORDER +# endif +#endif + +#endif + +#endif /* INC_epicsEndian_H */