Detect CRT library and allow override for no-CRT.

This commit is contained in:
Branimir Karadžić
2017-02-11 19:18:42 -08:00
parent a7d088ae9c
commit 321e25384a
2 changed files with 59 additions and 34 deletions

View File

@@ -29,13 +29,17 @@
#define BX_CPU_X86 0
// C Runtime
#define BX_CRT_BIONIC 0
#define BX_CRT_GLIBC 0
#define BX_CRT_LIBCXX 0
#define BX_CRT_MINGW 0
#define BX_CRT_MSVC 0
#define BX_CRT_MUSL 0
#define BX_CRT_NEWLIB 0
#define BX_CRT_NONE 0
#ifndef BX_CRT_NONE
# define BX_CRT_NONE 0
#endif // BX_CRT_NONE
// Platform
#define BX_PLATFORM_ANDROID 0
@@ -64,34 +68,12 @@
# undef BX_COMPILER_CLANG_ANALYZER
# define BX_COMPILER_CLANG_ANALYZER 1
# endif // defined(__clang_analyzer__)
# if defined(_MSC_VER)
# undef BX_CRT_MSVC
# define BX_CRT_MSVC 1
# elif defined(__GLIBC__)
# undef BX_CRT_GLIBC
# define BX_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100)
# elif defined(__MINGW32__) || defined(__MINGW64__)
# undef BX_CRT_MINGW
# define BX_CRT_MINGW 1
# elif defined(__apple_build_version__) || defined(__ANDROID__) || defined(__ORBIS__)
# undef BX_CRT_LIBCXX
# define BX_CRT_LIBCXX 1
# endif //
#elif defined(_MSC_VER)
# undef BX_COMPILER_MSVC
# define BX_COMPILER_MSVC _MSC_VER
# undef BX_CRT_MSVC
# define BX_CRT_MSVC 1
#elif defined(__GNUC__)
# undef BX_COMPILER_GCC
# define BX_COMPILER_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
# if defined(__GLIBC__)
# undef BX_CRT_GLIBC
# define BX_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100)
# elif defined(__MINGW32__) || defined(__MINGW64__)
# undef BX_CRT_MINGW
# define BX_CRT_MINGW 1
# endif //
#else
# error "BX_COMPILER_* is not defined!"
#endif //
@@ -193,7 +175,7 @@
# endif
#elif defined(__ANDROID__)
// Android compiler defines __linux__
# include <android/api-level.h>
# include <sys/cdefs.h> // Defines __BIONIC__ and includes android/api-level.h
# undef BX_PLATFORM_ANDROID
# define BX_PLATFORM_ANDROID __ANDROID_API__
#elif defined(__native_client__)
@@ -218,11 +200,7 @@
# define BX_PLATFORM_IOS 1
#elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
# undef BX_PLATFORM_OSX
# if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
# define BX_PLATFORM_OSX __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
# else
# define BX_PLATFORM_OSX 1
# endif // defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
# define BX_PLATFORM_OSX __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
#elif defined(__EMSCRIPTEN__)
# undef BX_PLATFORM_EMSCRIPTEN
# define BX_PLATFORM_EMSCRIPTEN 1
@@ -232,7 +210,11 @@
#elif defined(__QNX__)
# undef BX_PLATFORM_QNX
# define BX_PLATFORM_QNX 1
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
#elif defined(__FreeBSD__) \
|| defined(__FreeBSD_kernel__) \
|| defined(__NetBSD__) \
|| defined(__OpenBSD__) \
|| defined(__DragonFly__)
# undef BX_PLATFORM_BSD
# define BX_PLATFORM_BSD 1
#elif defined(__GNU__)
@@ -240,6 +222,37 @@
# define BX_PLATFORM_HURD 1
#endif //
#if !BX_CRT_NONE
// https://sourceforge.net/p/predef/wiki/Libraries/
# if defined(__BIONIC__)
# undef BX_CRT_BIONIC
# define BX_CRT_BIONIC 1
# elif defined(_MSC_VER)
# undef BX_CRT_MSVC
# define BX_CRT_MSVC 1
# elif defined(__GLIBC__)
# undef BX_CRT_GLIBC
# define BX_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100)
# elif defined(__MINGW32__) || defined(__MINGW64__)
# undef BX_CRT_MINGW
# define BX_CRT_MINGW 1
# elif defined(__apple_build_version__) || defined(__ORBIS__)
# undef BX_CRT_LIBCXX
# define BX_CRT_LIBCXX 1
# endif //
# if !BX_CRT_BIONIC \
&& !BX_CRT_GLIBC \
&& !BX_CRT_LIBCXX \
&& !BX_CRT_MINGW \
&& !BX_CRT_MSVC \
&& !BX_CRT_MUSL \
&& !BX_CRT_NEWLIB
# undef BX_CRT_NONE
# define BX_CRT_NONE 1
# endif // BX_CRT_*
#endif // !BX_CRT_NONE
#define BX_PLATFORM_POSIX (0 \
|| BX_PLATFORM_ANDROID \
|| BX_PLATFORM_EMSCRIPTEN \
@@ -342,14 +355,16 @@
# define BX_CPU_NAME "x86"
#endif // BX_CPU_
#if BX_CRT_MSVC
# define BX_CRT_NAME "MSVC C Runtime"
#if BX_CRT_BIONIC
# define BX_CRT_NAME "Bionic libc"
#elif BX_CRT_GLIBC
# define BX_CRT_NAME "GNU C Library"
#elif BX_CRT_NEWLIB
# define BX_CRT_NAME "Newlib"
#elif BX_CRT_MSVC
# define BX_CRT_NAME "MSVC C Runtime"
#elif BX_CRT_MINGW
# define BX_CRT_NAME "MinGW C Runtime"
#elif BX_CRT_NEWLIB
# define BX_CRT_NAME "Newlib"
#elif BX_CRT_MUSL
# define BX_CRT_NAME "musl libc"
#else

View File

@@ -7,6 +7,16 @@
#include <string.h>
#include <bx/bx.h>
BX_STATIC_ASSERT(false
|| BX_CRT_BIONIC
|| BX_CRT_GLIBC
|| BX_CRT_LIBCXX
|| BX_CRT_MINGW
|| BX_CRT_MSVC
|| BX_CRT_MUSL
|| BX_CRT_NEWLIB
);
BX_STATIC_ASSERT(1 == BX_VA_ARGS_COUNT(1) );
BX_STATIC_ASSERT(2 == BX_VA_ARGS_COUNT(1, 2) );
BX_STATIC_ASSERT(3 == BX_VA_ARGS_COUNT(1, 2, 3) );