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.
86 lines
2.2 KiB
86 lines
2.2 KiB
/* 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
|
|
|