The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
5 years ago
|
/* Include Guard */
|
||
|
#ifndef SHARED_KERNELS_H
|
||
|
#define SHARED_KERNELS_H
|
||
|
|
||
|
/**
|
||
|
* Includes
|
||
|
*/
|
||
|
|
||
|
#include <cuda_runtime.h>
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Defines
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* When building a library, it is a good idea to expose as few as possible
|
||
|
* internal symbols (functions, objects, data structures). Not only does it
|
||
|
* prevent users from relying on private portions of the library that are
|
||
|
* subject to change without any notice, but it can have performance
|
||
|
* advantages:
|
||
|
*
|
||
|
* - It can make shared libraries link faster at dynamic-load time.
|
||
|
* - It can make internal function calls faster by bypassing the PLT.
|
||
|
*
|
||
|
* Thus, the compilation should by default hide all symbols, while the API
|
||
|
* headers will explicitly mark public the few symbols the users are permitted
|
||
|
* to use with a PUBLIC tag. We also define a HIDDEN tag, since it may be
|
||
|
* required to explicitly tag certain C++ types as visible in order for
|
||
|
* exceptions to function correctly.
|
||
|
*
|
||
|
* Additional complexity comes from non-POSIX-compliant systems, which
|
||
|
* artificially impose a requirement on knowing whether we are building or
|
||
|
* using a DLL.
|
||
|
*
|
||
|
* The above commentary and below code is inspired from
|
||
|
* 'https://gcc.gnu.org/wiki/Visibility'
|
||
|
*/
|
||
|
|
||
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
||
|
# define TAG_ATTRIBUTE_EXPORT __declspec(dllexport)
|
||
|
# define TAG_ATTRIBUTE_IMPORT __declspec(dllimport)
|
||
|
# define TAG_ATTRIBUTE_HIDDEN
|
||
|
#elif __GNUC__ >= 4
|
||
|
# define TAG_ATTRIBUTE_EXPORT __attribute__((visibility("default")))
|
||
|
# define TAG_ATTRIBUTE_IMPORT __attribute__((visibility("default")))
|
||
|
# define TAG_ATTRIBUTE_HIDDEN __attribute__((visibility("hidden")))
|
||
|
#else
|
||
|
# define TAG_ATTRIBUTE_EXPORT
|
||
|
# define TAG_ATTRIBUTE_IMPORT
|
||
|
# define TAG_ATTRIBUTE_HIDDEN
|
||
|
#endif
|
||
|
|
||
|
#if TAG_IS_SHARED
|
||
|
# if TAG_IS_BUILDING
|
||
|
# define TAG_PUBLIC TAG_ATTRIBUTE_EXPORT
|
||
|
# else
|
||
|
# define TAG_PUBLIC TAG_ATTRIBUTE_IMPORT
|
||
|
# endif
|
||
|
# define TAG_HIDDEN TAG_ATTRIBUTE_HIDDEN
|
||
|
#else
|
||
|
# define TAG_PUBLIC
|
||
|
# define TAG_HIDDEN
|
||
|
#endif
|
||
|
#define TAG_STATIC static
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* Extern "C" Guard */
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
/* Function Prototypes */
|
||
|
TAG_PUBLIC int run_tests(void);
|
||
|
|
||
|
|
||
|
|
||
|
/* End Extern "C" and Include Guard */
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif
|