1210397Sandrew
2210397Sandrew#ifndef sodium_export_H
3210397Sandrew#define sodium_export_H
4210397Sandrew
5210397Sandrew#include <stddef.h>
6210397Sandrew#include <stdint.h>
7210397Sandrew#include <limits.h>
8210397Sandrew
9210397Sandrew#if !defined(__clang__) && !defined(__GNUC__)
10210397Sandrew# ifdef __attribute__
11210397Sandrew#  undef __attribute__
12210397Sandrew# endif
13210397Sandrew# define __attribute__(a)
14210397Sandrew#endif
15210397Sandrew
16210397Sandrew#ifdef SODIUM_STATIC
17210397Sandrew# define SODIUM_EXPORT
18210397Sandrew# define SODIUM_EXPORT_WEAK
19210397Sandrew#else
20210397Sandrew# if defined(_MSC_VER)
21210397Sandrew#  ifdef SODIUM_DLL_EXPORT
22210397Sandrew#   define SODIUM_EXPORT __declspec(dllexport)
23210397Sandrew#  else
24210397Sandrew#   define SODIUM_EXPORT __declspec(dllimport)
25210397Sandrew#  endif
26210397Sandrew# else
27210397Sandrew#  if defined(__SUNPRO_C)
28210397Sandrew#   ifndef __GNU_C__
29210397Sandrew#    define SODIUM_EXPORT __attribute__ (visibility(__global))
30210397Sandrew#   else
31210397Sandrew#    define SODIUM_EXPORT __attribute__ __global
32210397Sandrew#   endif
33210397Sandrew#  elif defined(_MSG_VER)
34210397Sandrew#   define SODIUM_EXPORT extern __declspec(dllexport)
35210397Sandrew#  else
36210397Sandrew#   define SODIUM_EXPORT __attribute__ ((visibility ("default")))
37210397Sandrew#  endif
38210397Sandrew# endif
39210397Sandrew# if defined(__ELF__) && !defined(SODIUM_DISABLE_WEAK_FUNCTIONS)
40210397Sandrew#  define SODIUM_EXPORT_WEAK SODIUM_EXPORT __attribute__((weak))
41210397Sandrew# else
42210397Sandrew#  define SODIUM_EXPORT_WEAK SODIUM_EXPORT
43210397Sandrew# endif
44210397Sandrew#endif
45210397Sandrew
46210397Sandrew#ifndef CRYPTO_ALIGN
47210397Sandrew# if defined(__INTEL_COMPILER) || defined(_MSC_VER)
48210397Sandrew#  define CRYPTO_ALIGN(x) __declspec(align(x))
49210397Sandrew# else
50210397Sandrew#  define CRYPTO_ALIGN(x) __attribute__ ((aligned(x)))
51210397Sandrew# endif
52210397Sandrew#endif
53210397Sandrew
54210397Sandrew#define SODIUM_MIN(A, B) ((A) < (B) ? (A) : (B))
55210397Sandrew#define SODIUM_SIZE_MAX SODIUM_MIN(UINT64_MAX, SIZE_MAX)
56210397Sandrew
57210397Sandrew#ifdef _KERNEL
58210397Sandrew#include <sys/param.h>
59210397Sandrew#include <sys/libkern.h>
60210397Sandrewstatic inline void
61210397Sandrewsodium_misuse(void)
62210397Sandrew{
63210397Sandrew	panic("bad value passed to sodium");
64210397Sandrew}
65210397Sandrew#endif
66210397Sandrew
67210397Sandrew#endif
68210397Sandrew