diff --git a/include/bx/platform.h b/include/bx/platform.h index ff461f7..193e0c2 100644 --- a/include/bx/platform.h +++ b/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 +# include // 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 diff --git a/tests/macros_test.cpp b/tests/macros_test.cpp index 37079de..6871af3 100644 --- a/tests/macros_test.cpp +++ b/tests/macros_test.cpp @@ -7,6 +7,16 @@ #include #include +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) );