nxdrvlinux/libcifx/Toolkit/Common/HilscherDefinitions/Hil_Compiler.h
Sebastian Doell ac2f4d1789 Add initial driver source based on svn versions:
- toolkit V2.8.0.1@14806
 - BSL V1.8.0.0@14590
 - tcpserver: V1.4.3.0@14676 (marshaller V2.4.0.1@14551)
2024-02-05 09:23:09 +01:00

105 lines
4.1 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**************************************************************************************
Copyright (c) Hilscher Gesellschaft fuer Systemautomation mbH. All Rights Reserved.
***************************************************************************************
  $HeadURL: https://subversion01/svn/HilscherDefinitions/netXFirmware/Headers/tags/20230403-00/includes/Hil_Compiler.h $: *//*!
\file Hil_Compiler.h
Definitions of compiler settings.
**************************************************************************************/
#ifndef HIL_COMPILER_H_
#define HIL_COMPILER_H_
#if !defined(USER_COMPILER)
/*****************************************************************************/
/* Set byte alignment for structure members. */
/*****************************************************************************/
#if defined(__GNUC__) || defined(__clang__)
/* support for GNU and clang compiler. Note the clang compiler may also set
* _MSC_VER, so __clang__ must be checked before _MSC_VER. */
#define __HIL_PACKED_PRE
#define __HIL_PACKED_POST __attribute__((__packed__))
/* macro for setting DWORD alignment of a tag's beginning */
#define __HIL_ALIGNED_DWORD__ __attribute__ ((aligned (4)))
#elif defined(_MSC_VER)
/* support for MS Visual C++ compiler */
#if _MSC_VER >= 1000
#define __HIL_PACKED_PRE
#define __HIL_PACKED_POST
#define __HIL_PRAGMA_PACK_ENABLE
#define __HIL_PRAGMA_PACK_1(label) pack(push, label, 1)
#define __HIL_PRAGMA_UNPACK_1(label) pack(pop, label)
#ifndef STRICT
#define STRICT
#endif
#endif
#elif defined (__ADS__) || defined (__REALVIEW__)
/* support for REALVIEW ARM compiler */
#define __HIL_PACKED_PRE __packed
#define __HIL_PACKED_POST
#endif
/*****************************************************************************/
/* Define for variable length arrays at end of structures */
/*****************************************************************************/
#if defined(__GNUC__) || defined(__clang__) || defined (__ADS__) || defined (__REALVIEW__)
/* support for GNU, clang, ADS and REALVIEW ARM compiler. */
#define __HIL_VARIABLE_LENGTH_ARRAY
#elif defined(_MSC_VER)
/* support for MS Visual C++ compiler */
#if _MSC_VER >= 1000
#define __HIL_VARIABLE_LENGTH_ARRAY 1
#endif
#endif
/*****************************************************************************/
/* Common used macros */
/*****************************************************************************/
/*! For counting the number of array elements */
#define HIL_CNT_ELEMENT(array) (sizeof(array) / sizeof((array)[0]))
/*! Compute the element count of an array to hold a given number of bytes. */
#define HIL_CALC_ELEMENT_CNT(type, size) (((size) + sizeof(type) - 1)/ sizeof(type))
/*! Returns the smaller number of two values */
#define HIL_MIN(a, b) (((a)<(b))?(a):(b))
/*! Returns the bigger number of two values */
#define HIL_MAX(a, b) (((a)>(b))?(a):(b))
/*! Calculates the offset of the given member in a structure, in bytes */
#define HIL_OFFSETOF(type, member) (((unsigned long)&(((type*)(1))->member)) - 1)
/*! Returns the size of the given member of a structure */
#define HIL_MEMBERSIZE(type, member) (sizeof(((type *)1)->member))
/*! Returns the address of the object containing the given member */
#if defined(__GNUC__) && !defined(_lint)
/* GNU has the facility to make type check */
#define HIL_CONTAINEROF(ptr, type, member) \
({const typeof( ((type *)0)->member ) *__mptr = (ptr);\
(type *)( (char *)__mptr - HIL_OFFSETOF(type,member));})
#else
#define HIL_CONTAINEROF(ptr, type, member) \
((type *)((char*)(ptr) - HIL_OFFSETOF(type,member)))
#endif
/*****************************************************************************/
#else
#include "User_Compiler.h"
#endif
#endif /* HIL_COMPILER_H_ */