EABase Changes
2.10.01 (Jun 25, 2020)
Changes
- Ensure use defined() instead of relying on the fact that macros expand to 0 if not defined. Fixes warnings in partner code that does not have the using undefined macro warning disabled.
2.10.00 (May 08, 2020)
Changes
- Added eadeprecated.h to support deprecation tooling
2.09.13 (Apr 23, 2020)
Changes
- Fixed compile error when compiling C files with newer Android NDKs
- Enabling xbsx tests
- Fixed usage of _GAMING_XBOX that is defined for both scarlett and xb1, need to instead use _GAMING_XBOX_XBOXONE for xb1 and _GAMING_XBOX_SCARLETT for xbsx
2.09.12 (Jan 20, 2020)
Changes
- Added EA_HAS_INCLUDE() && EA_HAS_INCLUDE_AVAILABLE
2.09.11 (Jan 13, 2020)
Changes
- Gemini to Xbsx
- Adding warning suppression to an alignment annotation test which doesn't take into account the natural alignment requirements of the struct members.
- Added stadia.
2.09.10 (Nov 08, 2019)
Changes
- Resolving endian bug in int128_t code.
2.09.09 (Oct 28, 2019)
Changes
- Balin compiler fixes.
- GSDK support fixes.
2.09.08 (Oct 01, 2019)
Changes
- Balin compiler fixes.
- GSDK support fixes.
- Implemented the EA_FORCE_INLINE_LAMBDA macro.
2.09.07 (September 20, 2019)
Changes
- Added Windows ARM64 support.
2.09.06 (Jul 17, 2019)
Changes
- Adding C++20 feature test macro EA_COMPILER_NO_DESIGNATED_INITIALIZERS.
- Updated EA_HAVE_nanosleep_DECL to be defined for NX.
2.09.05 (Jun 26, 2019)
Changes
- Adding support for the following standardized C++ macro constants: INTPTR_MIN, INTPTR_MAX, INTMAX_MIN, INTMAX_MAX, UINTMAX_MIN, UINTMAX_MAX.
- Adding EA_CHAR8_UNIQUE as a feature flag when char8_t is a unique type for UTF8 characters in the type system. This is for C++20 support.
2.09.04 (May 30, 2019)
Changes
- Added support for EA_WINAPI_FAMILY_GAMES.
- Updated the EA_WINAPI_FAMILY, EA_WINAPI_PARTITION and EA_WINAPI_FAMILY_PARTITION defines for Windows to match other platforms.
- Preparing for open source release.
- Using _MSVC_LANG to determine if C++17 is enabled on MSVC.
- Clang warning suppression macro allows unknown pragmas to prevent guarding against compiler versions.
2.09.03 (Apr 17, 2019)
Changes
- Updated EA_HAVE_SIGNAL_H to not be defined for NX.
- Using _MSVC_LANG to determine what C++ language standard the compiler is targeting so we can safely enable C++17 features when users enable the /std:c++17 compiler command line switch.
2.09.02 (Dec 14, 2018)
Changes
- Promoted EA_CURRENT_FUNCTION from other packages to have a single version of the code.
2.09.01 (Dec 05, 2018)
Changes
- Added EA_CONST_EXPR_IF portability macro.
- Codestripper script updates.
2.09.00 (Oct 01, 2018)
Changes
- int128_t / uint128_t now supported.
2.08.04 (Aug 10, 2018)
Changes
- Fixed minimal malloc alignment for Android on x64
- Ensures PS4 does not define EA_FP128 1, as Sony does not support the type: https://ps4.siedev.net/resources/documents/SDK/5.500/CPU_Compiler_ABI-Overview/0003.html
- Enabled EA_ABM on PS4.
2.08.03 (Dec 11, 2017)
Changes
- Added NX platform support
- Fixed minimal malloc alignment for Android
- Fixed va_list_reference when compiling Android for AMR64
2.08.02 (Dec 1, 2017)
Changes
- Fix potential order of operations problems when using SI units macros
2.08.01 (Oct 19, 2017)
Changes
- Defining _SSIZE_T_ and _SSIZE_T_DEFINED when EABase provides the implementation for the ssize_t type.
- Added EA_NEON define.
- Updated 'EA_COMPILER_NO_NEW_THROW_SPEC / EA_THROW_SPEC_NEW / EA_THROW_SPEC_DELETE' for C++14.
2.08.00 (Sept 15, 2017)
Changes
- Added SI units macros:
- EA_BYTE
- EA_KILOBYTE
- EA_MEGABYTE
- EA_GIGABYTE
- EA_TERABYTE
- EA_PETABYTE
- EA_EXABYTE
- EA_KIBIBYTE
- EA_MEBIBYTE
- EA_GIBIBYTE
- EA_TEBIBYTE
- EA_PEBIBYTE
- EA_EXBIBYTE
- Added EA_BMI, EA_BMI2, EA_ABM, EA_TBM, EA_AVX, EA_AVX2 macros indicating whether the targeted architecture supports:
- Bit Manipulation Instructions (BMI1, BMI2)
- Advanced Bit Manipulation (ABM)
- Trailing Bit Manipulation (TBM)
- Advanced Vector Extensions (AVX1, AVX2)
- Added support for new C++ attributes:
- EA_FALLTHROUGH
- EA_NODISCARD
- EA_MAYBE_UNUSED
- Details: http://en.cppreference.com/w/cpp/language/attributes
2.07.07 (Jul 04, 2017)
Changes
- Added feature support macro for C++17 inline variables (EA_COMPILER_NO_INLINE_VARIABLES).
- Fixed a redefinition of static_assert issue which could fire if building using a compiler with C11 support.
- Added EA_NO_UBSAN and EA_NO_ASAN macros to disable LLVM/Clang sanitizers from analysing the tagged function.
- EA_ASAN_ENABLED macro to write custom code when running under LLVM/Clang address sanitizer.
- Fixes a build issue on android when building C code since the AndroidNDK does not support static_assert despite claiming to be a C11 compiler.
2.07.06 (Jun 19, 2017)
Changes
- Added feature support macro for C++17 compilers (EA_COMPILER_CPP17_ENABLED).
2.07.05 (May 12th, 2017)
Changes
- Build fix for EA_HAVE_ISNAN on Unix which could break on certain versiosn of Ubuntu.
2.07.04 (April 16th, 2017)
Changes
- Added feature support macro for C11 compilers (EA_COMPILER_IS_C11).
- Added compiler support macro for __float128 type usage (EA_FP128)
2.07.03 (Feb 14, 2017)
Changes
- Changes to support building with AppleClang and Clang on MacOSX.
2.07.02 (Dec 8, 2016)
Changes
- Minor fix to enable wchar_t when compiling via Clang on Windows.
- Fix to prevent defining static_assert when compiling in C mode using GLIBC 2.16.
2.07.01 (Aug 25, 2016)
Changes
- Added support for disabling compiler generated member functions via the EA_DISABLE_* macros.
2.07.00 (August 10th, 2016)
Changes
- Added support for detecting if C++/CX compiler support has been enabled via the EA_COMPILER_WINRTCX_ENABLED macro.
- Resolved drift in implementation of EA_IS_ENABLED and FB_USING macros.
- Enabled variable templates on VS2015+ / GCC5 / Clang3.4.
2.06.07 (January 21st, 2016)
Changes
- Fixed a large number of warnings generated on VS2015 Update 1.
- Updated EA_DISABLE_VC_WARNING macro for VS2015 to explicitly disable warning 4472.
- Updated definitions for PR[diouxX]dPTR and SCN[dioux]PTR defines to avoid format argument warnings when they are used in format specifiers on VS2015.
- Enabling usage of constexpr on Visual Studio 2015 and above.
- Fix build issue with name conflict with SUCCESS in earesult.h with a macro in RasError.h from WindowsSDK
- Disable warning 4755 within macro EA_DISABLE_ALL_VC_WARNINGS (for Microsoft SDK)
- Removed Gen3 and older platforms code that are no longer relevant.
- Fixed warnings when using EA_NON_COPYABLE for function local class/structures.
2.06.06 (September 25th, 2015)
Changes
- Updated C++ feature macro: EA_COMPILER_NO_THREAD_LOCAL for VS2015.
- Converted initialize.xml to structured-XML which fixes warnings generated by Framework.
2.06.05 (July 6, 2015)
Changes
- Added new C++ feature macro: EA_COMPILER_NO_VARIABLE_TEMPLATES.
2.06.04 (June 15th, 2015)
Changes
- Enabled the EA_OPTIMIZE_ON/OFF macros on clang 3.4 and higher on all platforms except Unix (this enables support on OSX and iOS).
- rvalue reference overload for EAArrayCount.
2.06.03 (March 16th, 2015)
Changes
- Added EA_CACHE_LINE_SIZE as expected best guess value for the cache line size on a compile target. (this potentially could have changed cache line size for ARM64
Version 2.06.02 (Feb 9th, 2015)
Changes
- Updated EABase to work properly with Android SDK API level 21. Note: You must use android_config-1.08.00 or greater for EABase to properly detect the Android API level.
- Added a utility macro named EA_IS_ENABLED(x). This macro is used for detecting if another macros is enabled or disabled. It is analogous to the
FB_USING(x) macro used in Frostbite.
- Added support for the VS2015 compiler.
Version 2.06.01 (October 13th, 2014)
Changes
- Change to test suite in regards to passing "%s" rather than an empty string in VCall.
Version 2.06.00 (September 10th, 2014)
Changes
- Added support for 64bit iOS ARM and simulator builds.
- Made a small fix for VS2013 float_t typedef that could affect 32bit x86 builds depending on float precision and architecture compiler flags.
Version 2.05.00 (July 14, 2014)
Changes
- Added a public version.h header.
- PS3 SDK 4.6 compatibility update: the SN compiler has built-in support for char16_t and char32_t, so EA_CHAR16_NATIVE and EA_CHAR32_NATIVE are defined by EABase.h.
Version 2.04.00 (June 12, 2014)
Changes
- Added CHAR8_MIN, CHAR8_MAX, CHAR16_MIN, CHAR16_MAX, CHAR32_MIN, CHAR32_MAX.
- Improved the portability of the exception declaration macros for when Dinkumware (e.g. VC++) is in use.
- Fixed some compile problems under older versions of EDG-based compilers.
- Modified EABase to be slightly more robust when users include system headers like stdint.h prior to including EABase. Prior to this change some macros like UINT64_C could be undefined if users included stdint.h prior to eabase.h.
Version 2.03.01 (April 15, 2014)
Changes
Version 2.03.00 (March 10, 2014)
Changes
- Added EA_FUNCTION_DELETE:
// Semi-portable way of specifying a deleted function which allows for
// cleaner code in class declarations.
// Example usage:
// class Example
// {
// private: // For portability with pre-C++11 compilers, make the function private.
// void foo() EA_FUNCTION_DELETE;
// };
- Added EA_SIZEOF_MEMBER which allows for a portable way to determine the
sizeof a member without requiring an instantiated struct or class.
- Improved the check for wchar_t support when building with the EDG compiler.
Version 2.02.00 (January 15, 2014)
Changes
- Fixed PS3 SDK 4.50 SN compiler EA_CHAR16()/EA_CHAR32() problem for when C++ 11 is enabled.
- Added EA_FINAL_OVERRIDE, which is simply a combination of both override and final.
- Added EA_COMPILER_HAS_BUILTIN.
- Added EA_PRAGMA_PACK_VC.
- Removed support for the following platforms:
- Bada
- Freebox
- GameCube
- Marmalade / Airplay
- Nintendo DS
- Nintendo 3DS / CTR
- Palm
- Playbook / BB10
- Playstation 2
- Playstation Portable
- Wii U / Cafe
- Wii / Revolution
- WinCE
Version 2.01.00 (December 9, 2013)
Changes
- Added support for the PS4 and XBox One platforms. Previously this support was available only in a separate branch of this package.
- Added support for Added clang-specific support for EAAlignOf. This fixes a couple cases of EAAlignOf not working with some types.
- Added VS2013 support. This affected only the EA_COMPILER_NO_XXX C++11 functionality. In particular this fixes problems compiling EASTL. '
- Fixed some compatibility issues related to nullptr. For example, it previously worked incorrectly on the ARM BB10 platform.
- Added EA_COMPILER_NO_NULLPTR.
- Added EA_HAVE_nullptr_t_IMPL
- Deprecated EA_HAVE_nullptr_IMPL in favor of EA_COMPILER_NO_NULLPTR.
- Updated a nullptr.h to use the above changes.
- Fixed compilation warnings encountered when compiling with GCC 4.8.1.
- Added va_copy and va_list_reference with the new header <eabase/eastdarg.h>.
- Fixed definition of EA_PLATFORM_WORD_SIZE for native 64 bit platforms.
Version 2.00.44 (Oct 10, 2013)
Changes
- Added a EA_PLATFORM_MIN_MALLOC_ALIGNMENT macro. This macro defines what the minimal alignment a malloc implementation should maintain for any memory allocation. It is useful when implementing a custom allocator that should maintain the same alignment guarantees as malloc.
Version 2.00.43 (August 29, 2013)
Changes
- Fixed problems with EA_THROW_SPEC_NEW/DELETE macro definitions with XCode5.
Version 2.00.42 (August 6, 2013)
Changes
- Fixed potential compiler warning in eahave.h coming from a VC++ header.
- Fixed definition of EA_HAVE_CPP11_INITIALIZER_LIST and EA_HAVE_CPP11_SYSTEM_ERROR in eahave.h for the case of android clang.
- Fixed definition of EA_HAVE_CPP11_TYPE_TRAITS in eahave.h for the case of GCC 4.3 - 4.6.
- Fixed definition of EA_HAVE_CPP11_CONTAINERS, EA_HAVE_CPP11_ATOMIC, EA_HAVE_CPP11_CONDITION_VARIABLE, EA_HAVE_CPP11_MUTEX, EA_HAVE_CPP11_THREAD for the case of using clang with libstdc++ (usually found with Android when using clang).
- Made the processor identification for x64 be consistent across platforms.
Version 2.00.41 (June 27, 2013)
Changes
- Resolved an issue where the type ptrdiff_t wasn't defined by EABase on OSX clang configurations.
- Fixed issues related to isnan and isinf (EA_HAVE_ISNAN and EA_HAVE_ISINF) for the latest AndroidNDK.
- Fixed a possible compiler warning regarding the _POSIX_TIMERS define in eahave.h.
Version 2.00.40 (May 6, 2013)
Changes
- Fixed some broken existing EA_HAVE_XXX identifiers as part of adding unit tests for <EABase/eahave.h>
- Augmented the C++ compiler support with additions and updates, with the complete set being the following:
- EA_COMPILER_NO_RVALUE_REFERENCES
- EA_COMPILER_NO_EXTERN_TEMPLATE
- EA_COMPILER_NO_RANGE_BASED_FOR_LOOP
- EA_COMPILER_NO_CONSTEXPR
- EA_COMPILER_NO_OVERRIDE
- EA_COMPILER_NO_INHERITANCE_FINAL
- EA_COMPILER_NO_AUTO
- EA_COMPILER_NO_DECLTYPE
- EA_COMPILER_NO_DEFAULTED_FUNCTIONS
- EA_COMPILER_NO_DELETED_FUNCTIONS
- EA_COMPILER_NO_LAMBDA_EXPRESSIONS
- EA_COMPILER_NO_TRAILING_RETURN_TYPES
- EA_COMPILER_NO_STRONGLY_TYPED_ENUMS
- EA_COMPILER_NO_FORWARD_DECLARED_ENUMS
- EA_COMPILER_NO_VARIADIC_TEMPLATES
- EA_COMPILER_NO_TEMPLATE_ALIASES
- EA_COMPILER_NO_INITIALIZER_LISTS
- EA_COMPILER_NO_NORETURN
- EA_COMPILER_NO_CARRIES_DEPENDENCY
- EA_COMPILER_NO_NONSTATIC_MEMBER_INITIALIZERS
- EA_COMPILER_NO_RIGHT_ANGLE_BRACKETS
- EA_COMPILER_NO_ALIGNOF
- EA_COMPILER_NO_ALIGNAS
- EA_COMPILER_NO_DELEGATING_CONSTRUCTORS
- EA_COMPILER_NO_INHERITING_CONSTRUCTORS
- EA_COMPILER_NO_USER_DEFINED_LITERALS
- EA_COMPILER_NO_STANDARD_LAYOUT_TYPES
- EA_COMPILER_NO_EXTENDED_SIZEOF
- EA_COMPILER_NO_INLINE_NAMESPACES
- EA_COMPILER_NO_UNRESTRICTED_UNIONS
- EA_COMPILER_NO_EXPLICIT_CONVERSION_OPERATORS
- EA_COMPILER_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
- EA_COMPILER_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS
- EA_COMPILER_NO_NOEXCEPT
- EA_COMPILER_NO_RAW_LITERALS
- EA_COMPILER_NO_UNICODE_STRING_LITERALS
- EA_COMPILER_NO_UNICODE_CHAR_NAME_LITERALS
- EA_COMPILER_NO_UNIFIED_INITIALIZATION_SYNTAX
- EA_COMPILER_NO_EXTENDED_FRIEND_DECLARATIONS
- EA_COMPILER_NO_THREAD_LOCAL
- Added C++11 Standard Library support of <EABase/eahave.h> with the following additions:
- EA_HAVE_CPP11_CONTAINERS
- EA_HAVE_CPP11_ATOMIC
- EA_HAVE_CPP11_CONDITION_VARIABLE
- EA_HAVE_CPP11_MUTEX
- EA_HAVE_CPP11_THREAD
- EA_HAVE_CPP11_FUTURE
- EA_HAVE_CPP11_TYPE_TRAITS
- EA_HAVE_CPP11_TUPLES
- EA_HAVE_CPP11_REGEX
- EA_HAVE_CPP11_RANDOM
- EA_HAVE_CPP11_CHRONO
- EA_HAVE_CPP11_SCOPED_ALLOCATOR
- EA_HAVE_CPP11_INITIALIZER_LIST
- EA_HAVE_CPP11_SYSTEM_ERROR
- EA_HAVE_CPP11_CODECVT
- EA_HAVE_CPP11_TYPEINDEX
- EA_HAVE_CPP11_ITERATOR_IMPL
- EA_HAVE_CPP11_SMART_POINTER_IMPL
- EA_HAVE_CPP11_FUNCTIONAL_IMPL
- EA_HAVE_CPP11_EXCEPTION_IMPL
- Note that you have to manually #include <EABase/eahave.h> to use EA_HAVE; it's not automatically included as part of <EABase/eabase.h>
- Updated EA_ANALYSIS_ASSUME to use !!(x) instead of (x) in order to allow more flexibility in the expressions it accepts.
- Fixed macro definition of EA_ONCE.
Version 2.00.39 (April 12, 2013)
Changes
- Compiler fixes required for Clang.
Version 2.00.38 (March 1, 2013)
Changes
- Added EA_COMPILER_CPP11_ENABLED, which identifies whether the compiler has its C++11 support enabled.
- Revised EAArrayCount to take advantage of C++11 constexpr when possible in order to provide better assertions.
- Added EA_NON_COPYABLE and struct EANonCopyable. These allow you to declare a class as not supporting copy construction or assignment from its own type.
- Added the following C++11-related compiler support identifiers:
- EA_COMPILER_NO_CONSTEXPR
- EA_COMPILER_NO_OVERRIDE
- EA_COMPILER_NO_INHERITANCE_FINAL
- EA_COMPILER_NO_AUTO
- EA_COMPILER_NO_DECLTYPE
- EA_COMPILER_NO_DEFAULTED_FUNCTIONS
- EA_COMPILER_NO_DELETED_FUNCTIONS
- EA_COMPILER_NO_LAMBDA_EXPRESSIONS
- EA_COMPILER_NO_TRAILING_RETURN_TYPES
- EA_COMPILER_NO_VARIADIC_TEMPLATES
- EA_COMPILER_NO_TEMPLATE_ALIASES
- EA_COMPILER_NO_INITIALIZER_LISTS
- Added EA_DELETED_FUNCTION
- Added EA_DELETED_FUNCTION, EA_NON_COPYABLE, and EANonCopyable (inheritable base class)
- Added PS3 SDK 430 C++11 support, mostly via testing for EDG >= 4.1 or 4.3.
Version 2.00.37 (February 4, 2013)
Changes
- Corrected a bug in the test entry point implementation.
Version 2.00.36 (January 11, 2013)
Changes
- Added define EA_PLATFORM_WINRT.
- Fixed warnings in regard to use of EA_SSE3 and EA_SSE2 usage before definition.
Version 2.00.35 (January 3, 2013)
Changes
Fixed warnings in regard to use of EA_SSE3 and EA_SSE2 usage before definition.
Version 2.00.34 (December 12, 2012)
Changes
- Added EA_COMPILER_NO_EXTERN_TEMPLATE, which tells if the compiler supports C++11's extern template declarations.
- Added EA_COMPILER_NO_RVALUE_REFERENCES, which tells if the compiler supports C++11's rvalue references.
- Added EA_COMPILER_NO_RANGE_BASED_FOR_LOOP, which tells if the compiler supports C++11's range-based for loops.
- Added EA_INHERITANCE_FINAL, which wraps C++11's final keyword.
- Added EA_CONSTEXPR, which wraps C++11's constexpr keyword.
- Added clang compiler support for EA_SSE.
- Fixed EA_PLATFORM_FREEBSD spelling.
- The static_assert fallback now works in all builds, not just debug builds.
- Improved WinRT and Windows Phone support.
- Added additional defines for detecting SSE and AVX support (i.e. EA_SSE2, EA_SSE3, EA_SSSE3, EA_SSE4A, EA_SSE4_1, EA_SSE4_2).
- Added support for Wii U (i.e. EA_PLATFORM_CAFE) and the GHS compiler.
Version 2.00.33 (July 20, 2012)
Changes
- Added support to WinPRT
- disable WinRT extensions for C file TestEABaseC.c as they are not supported for C files.
- Turned EA_HAVE_nanosleep_DECL on for iPhone and OSX, since ThreadSleep was currently not doing anything on those platforms.
Version 2.00.32 (July 3, 2012)
Changes
- Added EA_DISABLE_ALL_VC_WARNINGS / EA_RESTORE_ALL_VC_WARNINGS, EA_DISABLE_ALL_SN_WARNINGS / EA_RESTORE_ALL_SN_WARNINGS, EA_DISABLE_ALL_CW_WARNINGS / EA_RESTORE_ALL_CW_WARNINGS. These complement the existing macros to disable individual warnings.
- Significantly augmented the EA_HAVE support in eahave.h. Added ability for user to cancel individual have support via EA_NO_HAVE.
- Added EA_STRINGIFY, which is a classic preprocessor string-making macro.
- Added Intel compiler support.
- Preliminary Windows Phone 8 support added.
Version 2.00.31 (June 4th, 2012)
Changes
- Revised the definition of EA_INIT_PRIORITY_AVAILABLE to always include the SN compiler. This fixes the case of the SN PSVita compiler. Reported by Toan Pham.
- Added clang support to EA_COMPILER_NO_RTTI.
- Enabled some warning suppression flags around Windows header files.
- Added support for FreeBSD.
- Added support for disabling warnings with the Green Hills compiler.
- Added EA_HAVE_EXECINFO_H to eahave.h
Version 2.00.30 (May 7th, 2012)
Changes
- Added EA_WCHAR_UNIQUE to EABase which indicates that wchar_t is a type unique from the C++11 unicode char types char16_t/char32_t.
- Added first-class support for the clang compiler keyed to the EA_COMPILER_CLANG symbol. In previous releases clang masqueraded as GCC 4.2.1 but some functionality isn't available in these older versions of GCC that clang now supports.
- Added EA_STANDARD_LIBRARY_MSVC / EA_STANDARD_LIBRARY_AIRPLAY to distinguish between the two.
- Made it so all #defined informational values are defined to 1, whereas some were previously defined to nothing.
- Added the EA_WINAPI_FAMILY_PARTITION family of defines, for compatibility with Windows 8 and related future Microsoft platforms. These allow for portable testing of Microsoft API version availability.
Version 2.00.29 (March 5, 2102)
Changes
- Added support for VS2011.
- Added PSVita platform support (EA_PLATFORM_PSP2).
- Added nullptr.h, which implements the C++11 nullptr in a mostly-compatible way when it's not already implemented by the compiler.
- Added EA_HAVE_LOCALE_H and EA_HAVE_SIGNAL_H to eahave.h.
Version 2.00.28 (January 11, 2012)
Changes
- Added initial eahave.h header file. This is an alpha release and won't be considered stable until some later EABase release.
- Simplified the pragma once compiler support check.
- Added explicit support for the Green Hills compiler, which uses the EDG front end.
- Improved support for static_assert under EDG-based compilers.
- Added explicit support for the Freebox platform (EA_PLATFORM_FREEBOX). This is a Linux-based console-like computer that's used in Europe to augment TV functionality. It's not explicitly a gaming device but can be used as such to some degree.
- EABase now uses #pragma once in all its headers to slightly improve compile speed of code that #includes it. Metrics showed a small but significant improvement.
- Added EA_ANALYSIS_ASSUME, which is simply a portable wrapper for Microsoft's __analysis_assume().
- Added EA_ONCE, to complement EA_PRAGMA_ONCE_SUPPORTED.
- Added EA_DISABLE_VC_WARNING / EA_RESTORE_VC_WARNING, etc for other compilers.
- Added explicit support for recognizing and identifying Android on x86.
Version 2.00.27 (October 19, 2011)
Changes
- Revised/added the defintions of EA_THROW_SPEC_NEW, EA_THROW_SPEC_NEW_NONE, EA_THROW_SPEC_DELETE_NONE.
- Fixed the definition of EA_MAY_ALIAS_AVAILABLE and EA_MAY_ALIAS to not generate a warning under VC++.
- Added support for auto-detection of wchar_t type under the Green Hills (EDG-based) compiler.
- Added EA_CHAR8 and EA_WCHAR macros to complement EA_CHAR16 and EA_CHAR32.
Version 2.00.26 (September 26, 2011)
Changes
- Added EA_COMPILER_QNX.
- Added EA_WCHAR to complement EA_CHAR16 and EA_CHAR32.
- Added EA_PLATFORM_NINTENDO.
- Added EA_MISALIGNED_SUPPORT_LEVEL.
- Added EA_INIT_PRIORITY_AVAILABLE and EA_MAY_ALIAS_AVAILABLE.
- Added EA_EMPTY, which allows you to use the expression EA_EMPTY; and have the compiler say nothing about it. Useful for doing things like:
#ifdef EA_DEBUG
#define MyDebugPrintf(x, y) printf(x, y)
#else
#define MyDebugPrintf(x, y) EA_EMPTY
#endif
Otherwise without an EA_EMPTY there are cases where a compiler warns about a lone ; statement.
Version 2.00.25 (May 6, 2011)
Bug Fixes
- Fixed a bug under VC++ related to char16_t's definition and _HAS_CHAR16_T_LANGUAGE_SUPPORT. Reported by Andy Eakins.
Version 2.00.24 (May 4, 2011)
Additions
- Added EA_COMPILER_NO_NEW_THROW_SPEC, EA_THROW_SPEC_NEW, EA_THROW_SPEC_DELETE. These aid in writing portable new/delete overrides across compilers/platforms.
- Added EA_UNUSED to provide a portable way to avoid compiler warnings related to unused variables.
- Added EA_COMPILER_NO_VARIADIC_MACROS to identify compilers that don't support marcos that can use "...".
- Added EA_OPTIMIZE_OFF / EA_OPTIMIZE_ON in order to provide a portable way to disable code optimization inline.
- Added EA_COMPILER_INTMAX_SIZE, which is a preprocessor equivalent to intmax_t/uintmax_t.
Version 2.00.23 (November 17, 2010)
Bug Fixes
- Fixed bug in recognition of __ARMCC_VERSION. Reported by Sam Umbach.
- Updated EA_LIKELY/EA_UNLIKELY to explicitly support the SN compiler, though it was already doing so through the __GNUC__ define, since SN defines __GNUC__
Changes
- Added a print EXIT(n) at the end of the unit tests on wii to support EARunner_Wii; it will indicate to the runner that the test is completed.
- Changed the automatic variable alignment test to use a larger buffer. This was causing a false assertion on pc64 debug-opt because it was packing the buffer between two other aligned values, which caused it to think that there was stack correption.
Version 2.00.22(May 27, 2010)
Release notes
- This version has been updated to support PS3 SN 330, CodeWarrior 1.3, and Android platform.
Additions
- Added Palm Mobile and Samsumg bada mobile platform support.
- Added EA_PLATFORM_CONSOLE, EA_PLATFORM_MOBILE, EA_PLATFORM_DESKTOP defines, which are high level platform descriptors.
- Added EA_COMPILER_NO_RTTI, EA_COMPILER_NO_STANDARD_CPP_LIBRARY, EA_COMPILER_NO_STATIC_VARIABLE_INIT, EA_COMPILER_NO_STATIC_FUNCTION_INIT.
Bug Fixes
- Fixed EA_WCHAR_SIZE definition for PS3 SN compiler 330 and later.
Version 2.0.21(March 1, 2010)
Additions
- Added EA_COMPILER_ARM, to identify the Arm brand compiler (armcc/armcpp).
- Added EA_PLATFORM_WINCE.
- Added support for static_assert, which is a C++0x feature found in VC++ for 360, VS2010, and GCC 4.3+. A fallback implementation is present for compilers that don't support static_assert intrinsically.
Bug Fixes
- Fixed a conflict with the latest XBox 360 SDK regarding the definition of char16_t.
- Fixed definition of EA_SSE. It was being defined as 1 under any platform compiled by VC++ instead of just x86.
- Fixed EA_PLATFORM_IPHONE detection support. Provided by Jaap Suter.
Version 2.0.20(November 22, 2009)
Release notes
- This version revises the definition of EA_NO_INLINE to go back to what it was in v2.0.18. Based on feedback from Andy Eakins it was decided that it's better for EA_NO_INLINE and other declaration attributes to always work as prefix attributes, given that the major compilers now support prefix attributes. The policy is now that all attributes have a version which acts as a prefix attribute but isn't named "prefix". These will usually work with modern compiler versions, though the prefix/suffix versions will remain for cases where things don't work. This EA_NO_INLINE change will cause some compiler errors if there is existing code that tries to use it as a suffix attribute. This possible breakage has been deemed acceptable. See eacompilertraits.h for an explanation of prefix vs. suffix attributes.
Additions
- Added support for the iPhone (EA_PLATFORM_IPHONE, EA_PLATFORM_IPHONE_SIMULATOR) and Android (EA_PLATFORM_ANDROID) platforms.
- Added support for 64 bit Mac OS X.
- Added EA_WEAK, which wraps __attribute__((weak)) and __declspec(selectany). Suggested by Andy Eakins.
- Added EA_ALIGN to match EA_PREFIX_ALIGN/EA_POSTFIX_ALIGN. It acts as a prefix attribute. See the 'release notes' discussion above regarding prefix attributes for some background.
- Added EA_SEALED and EA_ABSTRACT, which match the VC++ "sealed" and "abstract" extension keywords.
- Added the pseudo-platforms EA_PLATFORM_CYGWIN and EA_PLATFORM_MINGW.
- Added support for C++0x native char16_t and and char32_t, and added the EA_CHAR16 and EA_CHAR32 portable string literal wrappers. Portable 16 bit string literals henceforth would use EA_CHAR16("abc") and EA_CHAR16('a') as opposed to L"abc" and L'a'. As of this writing, compilers which support native char16_t/char32_t include GCC 4.4 (compiling with -std=c++0x) and VS2010, though VS2010's support is not complete.
Bug Fixes
Changes
- Revised the definition of EA_NO_INLINE to go back to what it was in v2.0.18. See the 'release notes' above for more details.
Version 2.0.19(August 11, 2009)
Known Issues
- The definition of EA_POSTFIX_FORCE_INLINE is incorrect for the GCC and PS3 compilers. This is fixed in EABase 2.0.20.
Additions
- Added preliminary support for iPhone, which is a subset of Macintosh OS X.
- Added support for Larrabee (EA_PLATFORM_LRB).
- Added EA_NO_VTABLE, which wraps the VC++ __declspec(novtable) declaration.
Bug Fixes
- Fixed a possible misidentification of EA_PLATFORM_MAC. Reported by Steve Kilthau.
Changes
- Added CodeWarrior (e.g. Wii) support to EA_LIKELY. Suggested and initially tested by Frederic Hamel.
- Added an option for bitset to use eastl_size_t instead of directly using size_t. It currently defaults to still using size_t. Suggested by Johan Andersson.
- Made EA_PASCAL be defined only on Windows, as CodeWarrior no longer supports it on Wii.
- Reverted EA_NO_INLINE from v2.0.18 (see below), since it is breaking some EATech code which aims to be backward compatible.
For all practical purposes EA_NO_INLINE is thus deprecated, since its portability is limited. Use EA_PREFIX_NO_INLINE/EA_PL instead.
Version 2.0.18(October 27, 2008)
Release Notes
- EA_NO_INLINE is now supported under VS2008, but this may result in failure of existing code which assumes that it is not supported and instead defined away. The resolution is to use EA_PREFIX_NO_INLINE / EA_POSTFIX_NO_INLINE. This situation is unlikely to affect most users.
Additions
- Added EA_PREFIX_NO_INLINE and EA_POSTFIX_NO_INLINE to allow portable usage of EA_NO_INLINE.
- Added support for EA_PRAGMA_ONCE_SUPPORTED, which allows for portable usage of #pragma once.
- Added EA_OVERRIDE, which allows portable usage of the 'override' keyword. Provided by Wes Potter.
Bug Fixes
- Fixed Metrowerks compiler error regarding definition of intptr_t for compiling .c files when -lang c99 is in effect.
- Updated the definition of EA_NO_INLINE under VC++ to be savvy to VS2005 and later. Reported by Andy Eakins.
Changes
- Updated eabase.h to be more robust with respect to the definitions of INT8_C, etc. Some external source code was taking the liberty of defining C99 types on its own and this was causing conflicts with eabase.h.
Version 2.0.17 (April 11, 2008)
Additions
- Added EA_INIT_PRIORITY and EA_MAY_ALIAS which wrap the equivalent GCC/SN attributes for more readable and portable code.
- Added EABASE_VERSION / EABASE_VERSION_N to the definition set. This allows for determining the version at compile time.
Bug Fixes
- Revised EA_ALIGNED macro for the SNC compiler to work in a different way, as SNC has a bug that prevents its GCC compatibility from working in the case of declaring an aligned variable with ctor arguments.
- Fixed wchar_t recognition when compiling C code on SNC on PS3.
- Fixed definition of EA_LIKELY whereby it wouldn't be used under GCC. Found by David Galeano.
- Updated EA_DEPRECATED to be compatible with SNC.
Changes
- Added a FAQ entry and revised the FAQ layout.
- Added printf("\32") to end of unit test under PS3 and PS2. This indicates to the SN tools that the app is done.
- Updated EA_COMPILER_NAME and EA_COMPILER_STRING for SNC. These now makes a distinction between GCC and SNC emulating GCC.
Version 2.0.16(December 20, 2007)
Additions
- Added SNC compiler compatibility on PS3. The lack of previous compatibility is manifested by compile errors regarding the char16_t typedef.
- Added SNC compiler compatibility on PS2. The lack of previous compatibility is manifested by compile errors regarding the int8_t typedef.
Bug Fixes
Version 2.0.15 (November 5, 2007)
Bug Fixes
- x64 definition of ssize_t fixed to be signed instead of unsigned. Reported by
John Leung.
Changes
- Unit test made compatible with SN PS3 compiler.
Version 2.0.14 (April 12, 2007)
Release Notes
- This is a release which catches up on the features that have been
multiply requested over the last two years and which seem reasonable and in the spirit of EABase. Except for the item listed below, there are no EABase features currently up for consideration and there aren't likely to be any changes to this package in the foreseeable future aside from adding support for new platforms and fixing any bugs that may arise.
- One thing that this release leaves out but which has been on the
consideration table is a set of alignment macros/inlines which implement
AlignUp/AlignDown or possibly similar behaviour. The possibility of this
feature is still being considered pending further input and investigation.
Additions
- Added EA_PREFIX_DEPRECATED and EA_POSTFIX_DEPRECATED to complement EA_DEPRECATED.
- Added the unit tests to the .build file so the unit tests can be built
via Fw2/eaconfig/nant.
- Added EA_ASSUME, which maps to __assume under VC++ but maps to a no-op
otherwise. This allows code to take advantage of optimization opportunities
with VC++ but be harmless on other compilers such as GCC.
- Added EA_PURE, which maps to attribute((pure)) on GCC but maps to a
no-op otherwise. This allows code to take advantage of optimization
opportunities with GCC but be harmless on other compilers such as VC++.
- Added portable ssize_t typedef. GCC and Posix has long provided ssize_t
to complement size_t, but VC++ and CodeWarrior have not.
- Added the oft-requested EAArrayCount macro. This returns the count of items in an array.
- Added an initial FAQ.html to the doc directory.
Bug Fixes
- Fixed unit test compiler warnings under GCC 3.4/Linux.
Changes
- Made it so you can now #include any of the sub-files within eabase
instead of the main eabase.h header.
- Updated to latest version of Frank Barchard's ifdef.cpp source.
- Cleaned up the documentation files to use better HTML.
Version 2.0.13 (Nov. 16, 2006)
This release devoted to Nintendo DS support (EA_PLATFORM_DS).
Additions
- Added support of Nintendo DS via EA_PLATFORM_DS.
- Added automatic detection of EA_PLATFORM_REVOLUTION under the CodeWarrior compiler via the __PPCBROADWAY__ #define.
Bug Fixes
Version 2.0.12.1 (May 29, 2006)
Additions
- Added a property package.EABase.includedirs.spu to initialize script.
Bug Fixes
Version 2.0.12 (Apr. 10, 2006)
This release devoted to Nintendo Revolution and Microsoft Win64 support.
Additions
- Added Win64 and Revolution unit test projects.
- Added __STDC_CONSTANT_MACROS and __STDC_LIMIT_MACROS to allow C99 behaviour with Metrowerks.
- Added definition of EA_PLATFORM_REVOLUTION.
Bug Fixes
- Fixed definition of FLT_EVAL_METHOD for Metrowerks/Revolution. Recent Metrowerks compilers defined FLT_EVAL_METHOD for all platforms and compilation modes. Similarly fixed the definition of float_t/double_t for Metrowerks v4.0+.
- Fixed definion of EA_RESTRICT to properly deal with Metrowerks v4.0+.
Changes
- Changed internal #includes to be relative to EABase instead of relative to themselves. Thus eabase.h previous had a #include "config/eaplatform.h" butnow has #include "EABase/config/eaplatform". This change is due to the fact that some compilers (e.g. Metrowerks) don't support self-relative include paths. It's not simple enough to add the EABase/config directory to the compiler directory, as that could cause conflicts with other source code packages that have similar internal header file structures.
Version 2.0.11 (Feb. 15, 2006)
Bug Fixes
Changes
- Modified definition of bool8_t again to be an bool on Visual Studio, Metrowerks, Intel, and Borland compilers. It's now an int8_t on GNU-based compilers. This was done to be compatible with an upcoming RenderWare release.
Version 2.0.10 (Feb. 14, 2006)
Additions
- Added checks to see if some entity isn't already defined first before defining it. Thus if the user wants to provide their own version of EA_ALIGNED, they can define it in another header or in a build file.
- Added EA_ALIGNED to go with EA_PREFIX_ALIGN and EA_POSTFIX_ALIGN.
- Added basic unit test for EA_ALIGNED.
- Added Xenon unit test project.
Bug Fixes
Changes
- Modified definition of bool8_t to simply always be int8_t.
- Modified definition of EA_PLATFORM_PTR_SIZE to deal with the PS3 change from 64 bit pointers to 32 bit pointers. This modification is backwards compatible.
- Made minor change to #defines in Win32 unit test project.
Version 2.0.9 (Nov. 28, 2005)
Additions
- Support for Win64 and x86-64 via EA_PLATFORM_WIN64 and EA_PROCESSOR_X86_64.
- Support for OSX on x86.
- EA_LIKELY / EA_UNLIKELY defined.
- Added a masterconfig.h file for Framework2 compatibility.
Bug Fixes
- Fixed PS3 compiler warning that can occur with the definition of FLT_EVAL_METHOD.
- Fixed PSP compatibility problem that cropped up in EABase 2.0.8.
Changes
- Changed the PS3 platform identification in response to change (in SDK v040) in Sony compiler, which now defines __PPU__ instead of __PU__ to identify the primary processor.
- Changed PS2 platform recognition to work with the SN compiler.
- Updated test for EA_COMPILER_NO_EXCEPTIONS to work with current PS3 compiler.
- Removed deprecated documents. They were essentially empty anyway.
Version 2.0.8 (May 29, 2005)
Additions
- Support for GCC 3.2+ compilers, such as those for PS3 and MacOSX. This mostly amounted to changes regarding the inclusion of stdint.h and inttypes.h.
- EA_RESTRICT defined, as agreed upon.
- EA_ALIGN_OF implemented (this was accidentally omitted last year).
- Initial PS3 support (EA_PLATFORM_PS3). Will require additional testing.
Bug Fixes
- Bug in INT32_C(), etc. fixed for PS2.
- EA_COMPILER_IS_C99 fixed to work for C/C++ compilers that aren't C99 but act as C99 anyway.
Changes
- EA_PLATFORM_PS3 and EA_PLATFORM_P3_SPU are now debugged and unit tested. This change applies to all files.
- Documentation improved.
- EA_PLATFORM_WORD_SIZE defined to match EA_PLATFORM_PTR_SIZE. As of this writing this hasn't been formally agreed upon; we may want to do before publishing.
Version 2.0.7 (April 26, 2004)
Additions
Bug Fixes
- PSP platform detection fix - When compiling for the PSP platform with GCC, EABase was incorrectly thinking it was the PlayStation2 IOP platform. Fixed by adding a detection for __psp__ not being defined when _R3000 is defined.
Changes
Version 2.0.6 (April 2, 2004)
Additions
- Added EABase.html. This is the first true documentation for EABase.
- Added EA_WCHAR_SIZE test.
- Added EA_COMPILER_NO_XXX tests.
- Added XBox2 support (affected definition of int64_t, etc.)
- XBox2 (EA_PLATFORM_XENON) and PS3 (placeholder EA_PLATFORM_PS3) are now supported.
- Helpful documentation added regarding usage of EA_WCHAR_SIZE under compilers that support different sizes for wchar_t.
Bug Fixes
- Fixed float_t/double_t for Metrowerks.
- Fixed VC++ compiler warning for when all warnings are enabled and wchar.h is #included.
- Fixed missing definition of FLT_EVAL_METHOD for cases where it is absent.
- Fixed Metrowerks bug with respect to detection of EA_PLATFORM_WINDOWS.
- Fixed bug related to potential redifinition of internal the defines INTERNAL_STRINGIZE and INTERNAL_PRIMITIVE_STRINGIZE.
Changes
- Edited FuturePlans.html and WWAdoption.html to remove bad MSWord HTML so that any HTML editor can now work on these files.
- Converted EA_PLATFORM_WORD_SIZE usage to EA_PLATFORM_PTR_SIZE.
- Test of float_t and double_t fixed to conform to what C99 standard expects.
- bool8_t defined as int8_t when compiling in C.
- Compiler limitation defines (EA_COMPILER_NO_XXX) are now consistent and fairly complete. Significant documentation has been added to explain these.
Version 2.0.5
Additions
- Wrote unit test for all of EABase. There isn't yet a NAnt project for it, though there are VC++ and SN/VC7 projects for it.
- Added c99 printf/scanf format specifiers for type-safe sized printf.
- Added sized bool type: bool8_t. This is still slightly controversial but it had votes on its side, despite the arguments either way.
- Added documentation to all source headers.
- Added support for EA_PLATFORM_PSP.
- Added support for EA_PLATFORM_WORD_SIZE.
- Added alignment attributes for Metrowerks.
Metrowerks support postfix alignment; this was verified both by technical support and by a test of the compiler.
- Added alignment attributes for MSVC. Yes, VC7 and later allow prefix alignments, so I added them. This was verified by tests with the compiler.
- Added EA_PASCAL defines for Metrowerks, as per a todo request in the code. Metrowerks defines pascal calling convention via 'pascal' keyword. This was verified by tests with the compiler.
- Due to difficulties working with wchar_t and associated char16_t and char32_t, EA_WCHAR_SIZE and EA_WCHAR_T_NON_NATIVE were added in order to allow writing code that works with wchar_t portably.
Bug Fixes
- Fixed int64_t defines for various situations that were broken.You can't go just by platform, but you can't go just by compiler either.
- Fixed INTX_C() macros for VC++ to use i32, i64.
- Fixed inttypes.h inclusion problem.The C99 standard specifies that sized types be defined in stdint.h but many compilers/platforms still put them in inttypes.h.
- Fixed bug in intptr_t definition for platforms that didn't define it themselves. It was declared as uint64_t for both signed and unsigned versions for all platforms, including 32 bit platforms. All compilers I could find define intptr_t as int32_t on 32 bit platforms and int64_t on 64 bit platforms.
- Fixed wchar_t definition bug for VC++ and for SN compiler.
- Fixed two EA_ASM_STYLE bugs.
- Fixed bugs in definition of EA_COMPILER_NO_STATIC_CONSTANTS. The list of compilers that did and didn't support this was wrong. All changes were verified with a test of the given compiler.
Changes
- Separated intptr_t definition from uintptr_t definition. This was because some systems and SDKs define either or both of these types independently and thus collide with our having them defined together, resulting in compilation errors.
- Changed spelling of specialisation to specialization, for consistency. The old spelling is provided but deprecated.
Version 2.0.4
Additions
- Added macros for declaring constants in a portable way (INT8_C, etc.)
Bug Fixes
- include <stddef.h> on GNUC and MSVC compilers, rather than Playstation2, Linux, PS2 IOP, and GameCube platforms.
Changes
- Removed config files common.xml (merged into win-vc7-debug.xml) and global.xml (was not being used)
- Changed EA_COMPILER_TEMPLATE_SPECIALISATION to EA_COMPILER_TEMPLATE_SPECIALIZATION (US vs. UK spellings)
Version 2.0.3
Additions
- Added back namespaced EA::result_type
- Added back namespaced EA::SUCCESS and EA::FAILURE generic constants
Bug Fixes
Changes
Version 2.0.2
Additions
Bug Fixes
- Fixed C99 check to check for C99 version instead of what may have been a C95 check.
Changes
- EA_ALIGN(n) macro removed
Version 2.0.1
Additions
Bug Fixes
- Fixed bug with a mismatched parenthesis in the MAC section of eaplatform.h
Changes
- Visual changes integrated from Perforce depot.
Version 2.0.0
Additions
- Defines for character type (narrow / wide)
- Defines for min/max types
- Defines to support __export and __import
- Defines for processors and supported assembler.
Bug Fixes
- Fixed #include inttypes.h to be #include stdint.h
- Fixed character types so the typedefs were correct. (Previously the type and the name-identifier were swapped). Also in the change I added a special case for VC compiler so that it will compile.
- Typo eabase.h tried to include compilertraits.h instead of eacompilertraits.h
- Typo "Linux on x85" changed to "Linux on x86".
- Changed EA_POINTER_TO_UINT32_CAST to only be defined if __cplusplus is defined, since it uses C++ specific casting.
Changes
- Removed EA_INLINE
- Renamed include guard defines to start with ea
- Renamed header files to start with ea
- Removed bool section
- Removed __null and added #undef NULL
- Modified EA_PLATFORM defines to be defined as 1
- Removed NAKED and FASTCALL
- Removed EA_STATIC_CONSTANT
- Removed EA_INTERFACE
- Removed least and fast types
- Removed thread.h
- Modified earesults that returns a signed int.
- Updated MIN/MAX defines as per Simon Everett's post.
- Removed extern "C" {
- Removed EA_POINTER_TO_UINT32_CAST define
- Removed 128 bit types
- Removed a check if NULL was not defined since it is undefined right before the check.
- Moved the stddef.h include above the redefinition of NULL
- Removed all the EA_WRAP_ALIGN defines
- Removed EA_ALIGN, ALIGN, __ALIGNED__, EA_ALIGN16, and EA_ALIGN64
- Renamed __PACKED__ as EA_PACKED
- Removed EA_PLATFORM definition as it was always 1
- Removed EA_COMPILER definition as it was always 1
End of document