Ver Fonte

Detect CRT library and allow override for no-CRT.

Branimir Karadžić há 8 anos atrás
pai
commit
321e25384a
2 ficheiros alterados com 59 adições e 34 exclusões
  1. 49 34
      include/bx/platform.h
  2. 10 0
      tests/macros_test.cpp

+ 49 - 34
include/bx/platform.h

@@ -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

+ 10 - 0
tests/macros_test.cpp

@@ -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) );