diff --git a/.appveyor.yml b/.appveyor.yml index 9751ffc..dc3e3eb 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,24 +1,18 @@ version: 1.0.{build} -os: - - Visual Studio 2015 - - Visual Studio 2013 - platform: - - x86 - - x64 + - MSVC_2013_x86 + - MSVC_2013_x64 + - MSVC_2015_x86 + - MSVC_2015_x64 + - MinGW_x86 + - MinGW_x64 + +install: + - scripts\ci-pre.cmd build_script: - - cmd: mkdir build - - cmd: cd build - - cmd: cmake .. -DEASTL_BUILD_BENCHMARK:BOOL=ON -DEASTL_BUILD_TESTS:BOOL=ON - - cmd: cmake --build . --config Debug - - cmd: cmake --build . --config Release + - scripts\ci-build.cmd test_script: - - cmd: cd test - - cmd: ctest -C Release -V - - cmd: cd .. - - cmd: cd benchmark - - cmd: ctest -C Release -V - - cmd: cd .. + - scripts\ci-test.cmd diff --git a/.gitattributes b/.gitattributes index e0800fd..5e47b8d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,6 @@ # Auto detect text files and perform LF normalization # http://git-scm.com/docs/gitattributes * text=auto +.appveyor.yml -text eol=crlf +.appveyor-mingw.yml -text eol=crlf +ci-*.cmd -text eol=crlf \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5dd7ab0..17f6d51 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ cmake_install.cmake **/*.vcxproj.filters *.VC.opendb *.sdf +**/*.suo +**/*.user .vs/* **/Debug/* CMakeFiles/* @@ -32,5 +34,5 @@ Release/* Win32/* x64/* MinSizeRel/* -build/* +build*/* Testing/* diff --git a/CMakeLists.txt b/CMakeLists.txt index 045ebb9..83a8fa0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,27 +44,18 @@ add_definitions(-DEASTL_OPENSOURCE=1) #------------------------------------------------------------------------------------------- file(GLOB EASTL_SOURCES "source/*.cpp" "include/EASTL/*.h") add_library(EASTL ${EASTL_SOURCES}) +include_directories("include") #------------------------------------------------------------------------------------------- # Compiler Flags #------------------------------------------------------------------------------------------- -set_property(TARGET EASTL PROPERTY CXX_STANDARD 11) +set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/scripts/CMake") +include(CommonCppFlags) -if(EASTL_BUILD_TESTS OR EASTL_BUILD_BENCHMARK) - set_property(TARGET EAStdC EATest PROPERTY CXX_STANDARD 11) -endif() - -if( UNIX AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fasm-blocks" ) -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_SIZEOF_VOID_P EQUAL 4 AND + (CMAKE_BUILD_TYPE MATCHES "Release" OR CMAKE_BUILD_TYPE MATCHES "MinSizeRel" + OR CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") AND MINGW) + message(FATAL_ERROR "FIXME: 32bits mingw-w64 clang crashes when compiling with any optimizations.") endif() #------------------------------------------------------------------------------------------- diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 3ed2c56..4896ad7 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -3,7 +3,7 @@ #------------------------------------------------------------------------------------------- #------------------------------------------------------------------------------------------- -# CMake info +# CMake info #------------------------------------------------------------------------------------------- cmake_minimum_required(VERSION 3.1) project(EASTLBenchmarks CXX) @@ -15,7 +15,7 @@ include(CTest) add_definitions(-D_CHAR16T) #------------------------------------------------------------------------------------------- -# Include directories +# Include directories #------------------------------------------------------------------------------------------- include_directories(source) include_directories(../test/source) @@ -23,36 +23,30 @@ include_directories(../test/source) #------------------------------------------------------------------------------------------- # Compiler Flags #------------------------------------------------------------------------------------------- -set(CMAKE_CXX_STANDARD 11) +set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/../scripts/CMake") +include(CommonCppFlags) -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") -endif() - -# Work around a crash bug that only occurs with MingW when compiled with optimizations enabled and a dynamic runtime. +# Libstdc++ calls new internally, since DLLs have no weak symbols, runtime symbol resolution fails and EASTL's new is not called. +# Linking against static libstdc++ fixes this. +# See https://github.com/electronicarts/EASTL/issues/40 for more info. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND MINGW) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -static") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -static") - set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -static") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -static-libstdc++") + set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -static-libstdc++") + set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -static-libstdc++") endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_BUILD_TYPE MATCHES "MinSizeRel" AND MINGW) - message(FATAL_ERROR "FIXME: MinSizeRel on MingW's Clang fails to link.") + message(FATAL_ERROR "FIXME: MinSizeRel on MingW-w64's Clang fails to link.") endif() #------------------------------------------------------------------------------------------- -# Source files +# Source files #------------------------------------------------------------------------------------------- file(GLOB EASTLBENCHMARK_SOURCES "source/*.cpp" "../test/source/EASTLTestAllocator.cpp" "../test/source/EASTLTest.cpp") set(SOURCES ${EASTLBENCHMARK_SOURCES}) #------------------------------------------------------------------------------------------- -# Defines +# Defines #------------------------------------------------------------------------------------------- add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_SCL_SECURE_NO_WARNINGS) @@ -74,7 +68,7 @@ set(EASTLBenchmark_Libraries target_link_libraries(EASTLBenchmarks ${EASTLBenchmark_Libraries} Threads::Threads) #------------------------------------------------------------------------------------------- -# Run Unit tests and verify the results. +# Run Unit tests and verify the results. #------------------------------------------------------------------------------------------- add_test(EASTLBenchmarkRuns EASTLBenchmarks) set_tests_properties (EASTLBenchmarkRuns PROPERTIES PASS_REGULAR_EXPRESSION "RETURNCODE=0") diff --git a/scripts/CMake/CommonCppFlags.cmake b/scripts/CMake/CommonCppFlags.cmake new file mode 100644 index 0000000..dea1de7 --- /dev/null +++ b/scripts/CMake/CommonCppFlags.cmake @@ -0,0 +1,55 @@ +#------------------------------------------------------------------------------------------- +# Compiler Flags +#------------------------------------------------------------------------------------------- +if(UNIX AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fasm-blocks" ) +endif() + +# NOT LESS == GREATER_OR_EQUAL; CMake doesn't support this out of the box. +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE) # Apple clang uses different versioning. + if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0")) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.2"))) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.2" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.0"))) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.0") + message(FATAL_ERROR "Building with a clang version less than 3.0 is not supported.") + endif() +elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.2.0")) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.2.0" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.1"))) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.1" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.3"))) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.3") + message(FATAL_ERROR "Building with a gcc version less than 4.7.3 is not supported.") + endif() +elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND APPLE) + if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1")) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.3"))) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y") + endif() + # It seems Apple started changing version numbers after 3.1, going straight to 4.0 after 3.1. + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.3" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.1"))) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.1") + message(FATAL_ERROR "Building with a Apple clang version less than 3.1 is not supported.") + endif() +endif() + + +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") +endif() diff --git a/scripts/ci-build.cmd b/scripts/ci-build.cmd new file mode 100644 index 0000000..a5f3d72 --- /dev/null +++ b/scripts/ci-build.cmd @@ -0,0 +1,76 @@ +@echo off + +rem Needed to check if a variable contains a string +@setlocal enableextensions enabledelayedexpansion + +rem Check if the platform variable contains MinGW +if not [x%PLATFORM:MinGW=%]==[x%PLATFORM%] ( + goto :build-mingw +) else ( + goto :build-msvc +) + +:build-msvc +mkdir build +cd build + +rem Check if the platform variable contains 2013 +if not [x%PLATFORM:2013=%]==[x%PLATFORM%] ( + set vs_generator=Visual Studio 12 2013 +) else ( + set vs_generator=Visual Studio 14 2015 +) + +rem Check if the platform variable contains x64 +if not [x%PLATFORM:x64=%]==[x%PLATFORM%] set vs_generator=%vs_generator% Win64 + +cmake .. -G "%vs_generator%" -DEASTL_BUILD_BENCHMARK:BOOL=ON -DEASTL_BUILD_TESTS:BOOL=ON + +cmake --build . --config Debug +cmake --build . --config Release + +goto :end + +:build-mingw +rem Start build for gcc and clang. +set "OLDPATH=%PATH%" + +if not [x%PLATFORM:x86=%]==[x%PLATFORM%] ( + set bin_folder=C:/msys64/mingw32/bin + set "PATH=C:\msys64\mingw32\bin;%OLDPATH%" +) else ( + set bin_folder=C:/msys64/mingw64/bin + set "PATH=C:\msys64\mingw64\bin;%OLDPATH%" +) + +mkdir build-%PLATFORM%-gcc-Debug +mkdir build-%PLATFORM%-gcc-Release +mkdir build-%PLATFORM%-clang-Release +mkdir build-%PLATFORM%-clang-Debug + +rem Build with gcc. +for %%c in (Debug, Release) do ( + cd build-%PLATFORM%-gcc-%%~c + cmake .. -GNinja -DCMAKE_BUILD_TYPE=%%~c -DEASTL_BUILD_BENCHMARK:BOOL=ON -DEASTL_BUILD_TESTS:BOOL=ON -DCMAKE_C_COMPILER=%bin_folder%/gcc.exe -DCMAKE_CXX_COMPILER=%bin_folder%/g++.exe -DCMAKE_MAKE_PROGRAM=C:/msys64/mingw64/bin/ninja.exe + cmake --build . + cd .. +) + +rem Build with clang. +if not [x%PLATFORM:x64=%]==[x%PLATFORM%] ( + set configurations=Debug Release +) else ( + rem Don't build Release when using clang + set configurations=Debug +) + +for %%c in (%configurations%) do ( + cd build-%PLATFORM%-clang-%%~c + cmake .. -GNinja -DCMAKE_BUILD_TYPE=%%~c -DEASTL_BUILD_BENCHMARK:BOOL=ON -DEASTL_BUILD_TESTS:BOOL=ON -DCMAKE_C_COMPILER=%bin_folder%/clang.exe -DCMAKE_CXX_COMPILER=%bin_folder%/clang++.exe -DCMAKE_MAKE_PROGRAM=C:/msys64/mingw64/bin/ninja.exe + cmake --build . + cd .. +) + +:end + +endlocal diff --git a/scripts/ci-pre.cmd b/scripts/ci-pre.cmd new file mode 100644 index 0000000..10f1c0e --- /dev/null +++ b/scripts/ci-pre.cmd @@ -0,0 +1,18 @@ +@echo off + +rem Needed to check if a variable contains a string +@setlocal enableextensions enabledelayedexpansion + +if [%PLATFORM%]==[MinGW_x86] set platform_string=i686 +if [%PLATFORM%]==[MinGW_x64] set platform_string=x86_64 + +rem Checks if the platform variable contains MinGW +if not [x%PLATFORM:MinGW=%]==[x%PLATFORM%] ( + set "PATH=C:\msys64\usr\bin;%PATH%" + C:\msys64\usr\bin\pacman --noconfirm --sync --refresh --refresh --sysupgrade --sysupgrade + C:\msys64\usr\bin\pacman --noconfirm -Syu + + C:\msys64\usr\bin\pacman --noconfirm --needed -S mingw-w64-%platform_string%-clang mingw-w64-x86_64-ninja +) + +endlocal diff --git a/scripts/ci-test.cmd b/scripts/ci-test.cmd new file mode 100644 index 0000000..522e320 --- /dev/null +++ b/scripts/ci-test.cmd @@ -0,0 +1,54 @@ +rem Needed to check if a variable contains a string +@setlocal enableextensions enabledelayedexpansion + +rem Check if the platform variable contains MinGW +if not [x%PLATFORM:MinGW=%]==[x%PLATFORM%] ( + goto :test-mingw +) else ( + goto :test-msvc +) + +:test-msvc +cd build +cd test +ctest -C Release -V +cd .. +cd benchmark +ctest -C Release -V +cd .. +cd .. +goto :end + +:test-mingw +rem Test gcc and clang. +set "OLDPATH=%PATH%" + +if not [x%PLATFORM:x86=%]==[x%PLATFORM%] ( + set bin_folder=C:/msys64/mingw32/bin + set "PATH=C:\msys64\mingw32\bin;%OLDPATH%" +) else ( + set bin_folder=C:/msys64/mingw64/bin + set "PATH=C:\msys64\mingw64\bin;%OLDPATH%" +) + +if not [x%PLATFORM:x64=%]==[x%PLATFORM%] ( + set configurations=gcc-Debug gcc-Release clang-Debug clang-Release +) else ( + rem Don't test clang release builds on x86 as they haven't been build. + set configurations=gcc-Debug gcc-Release clang-Debug +) + +for %%c in (%configurations%) do ( + cd build-%PLATFORM%-%%~c + cd test + ctest -V + cd .. + cd benchmark + ctest -V + cd .. + cd .. +) + +:end + +endlocal diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7ca33f5..8c0b7d2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,29 +3,33 @@ #------------------------------------------------------------------------------------------- #------------------------------------------------------------------------------------------- -# CMake info +# CMake info #------------------------------------------------------------------------------------------- cmake_minimum_required(VERSION 3.1) project(EASTLTest CXX) include(CTest) #------------------------------------------------------------------------------------------- -# Include directories +# Include directories #------------------------------------------------------------------------------------------- -include_directories(source) +include_directories(source "../include") #------------------------------------------------------------------------------------------- # Compiler Flags #------------------------------------------------------------------------------------------- -set(CMAKE_CXX_STANDARD 11) +set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/../scripts/CMake") +include(CommonCppFlags) -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-pointer-bool-conversion -Wno-unknown-warning-option") +# TODO: Tests fail to pass on mingw-w64 gcc 6 without strict aliasing disabled. +# The problem is likely a bug in the compiler that causes it to ignore EASTL_MAY_ALIAS +# on derived classes that are marked with EASTL_MAY_ALIAS. +# Needs investigating. +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND MINGW) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing") endif() -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pointer-bool-conversion -Wno-unknown-warning-option") endif() #------------------------------------------------------------------------------------------- @@ -35,7 +39,7 @@ file(GLOB EASTLTEST_SOURCES "source/*.cpp" "source/*.inl" "source/*.h") set(SOURCES ${EASTLTEST_SOURCES}) #------------------------------------------------------------------------------------------- -# Defines +# Defines #------------------------------------------------------------------------------------------- add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_SCL_SECURE_NO_WARNINGS) @@ -53,13 +57,13 @@ find_package(Threads REQUIRED) set(EASTLTest_Libraries EASTL EATest) if((NOT APPLE) AND (NOT WIN32)) - target_link_libraries(EASTLTest ${EASTLTest_Libraries} Threads::Threads rt) + target_link_libraries(EASTLTest ${EASTLTest_Libraries} Threads::Threads rt) else() - target_link_libraries(EASTLTest ${EASTLTest_Libraries} Threads::Threads) + target_link_libraries(EASTLTest ${EASTLTest_Libraries} Threads::Threads) endif() #------------------------------------------------------------------------------------------- -# Run Unit tests and verify the results. +# Run Unit tests and verify the results. #------------------------------------------------------------------------------------------- add_test(EASTLTestRuns EASTLTest) set_tests_properties (EASTLTestRuns PROPERTIES PASS_REGULAR_EXPRESSION "RETURNCODE=0") diff --git a/test/packages/EABase/include/Common/EABase/eahave.h b/test/packages/EABase/include/Common/EABase/eahave.h index 82fe25a..80ce9b1 100644 --- a/test/packages/EABase/include/Common/EABase/eahave.h +++ b/test/packages/EABase/include/Common/EABase/eahave.h @@ -559,10 +559,10 @@ #endif #if !defined(EA_HAVE_ISNAN) && !defined(EA_NO_HAVE_ISNAN) - #if defined(EA_PLATFORM_MICROSOFT) && !defined(EA_COMPILER_CLANG) + #if defined(EA_PLATFORM_MICROSOFT) && !defined(EA_PLATFORM_MINGW) #define EA_HAVE_ISNAN(x) _isnan(x) /* declared in */ #define EA_HAVE_ISINF(x) !_finite(x) - #elif defined(EA_PLATFORM_APPLE) || (defined(EA_PLATFORM_MICROSOFT) && defined(EA_COMPILER_CLANG)) + #elif defined(EA_PLATFORM_APPLE) #define EA_HAVE_ISNAN(x) std::isnan(x) /* declared in */ #define EA_HAVE_ISINF(x) std::isinf(x) #elif defined(EA_PLATFORM_ANDROID) @@ -571,7 +571,7 @@ #elif defined(__GNUC__) && defined(__CYGWIN__) #define EA_HAVE_ISNAN(x) __isnand(x) /* declared nowhere, it seems. */ #define EA_HAVE_ISINF(x) __isinfd(x) - #else /* Most GCC, EDG, and Dinkumware. */ + #else /* Most GCC, EDG, Dinkumware, and MinGW(-w64). */ #define EA_HAVE_ISNAN(x) isnan(x) /* declared in */ #define EA_HAVE_ISINF(x) isinf(x) #endif diff --git a/test/packages/EAStdC/CMakeLists.txt b/test/packages/EAStdC/CMakeLists.txt index 95b29e5..7f0c036 100644 --- a/test/packages/EAStdC/CMakeLists.txt +++ b/test/packages/EAStdC/CMakeLists.txt @@ -5,13 +5,13 @@ cmake_minimum_required(VERSION 3.1) project(EAStdC CXX) #------------------------------------------------------------------------------------------- -# Library definition +# Library definition #------------------------------------------------------------------------------------------- file(GLOB EASTDC_SOURCES "source/*.cpp" "include/EAStdC/*.h") add_library(EAStdC ${EASTDC_SOURCES}) #------------------------------------------------------------------------------------------- -# Defines +# Defines #------------------------------------------------------------------------------------------- add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_SCL_SECURE_NO_WARNINGS) @@ -20,26 +20,16 @@ add_definitions(-D_CHAR16T) #------------------------------------------------------------------------------------------- # Compiler Flags #------------------------------------------------------------------------------------------- -if( UNIX AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fasm-blocks" ) -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") -endif() +set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/../../../scripts/CMake") +include(CommonCppFlags) #------------------------------------------------------------------------------------------- -# Include directories +# Include directories #------------------------------------------------------------------------------------------- target_include_directories(EAStdC PUBLIC include) #------------------------------------------------------------------------------------------- -# Dependencies +# Dependencies #------------------------------------------------------------------------------------------- target_link_libraries(EAStdC EABase) target_link_libraries(EAStdC EAAssert) diff --git a/test/packages/EATest/CMakeLists.txt b/test/packages/EATest/CMakeLists.txt index e354f82..c0974b7 100644 --- a/test/packages/EATest/CMakeLists.txt +++ b/test/packages/EATest/CMakeLists.txt @@ -5,13 +5,13 @@ cmake_minimum_required(VERSION 3.1) project(EATest CXX) #------------------------------------------------------------------------------------------- -# Library definition +# Library definition #------------------------------------------------------------------------------------------- file(GLOB EATEST_SOURCES "source/*.cpp" "include/EATest/*.*" "include/EATest/internal/*.h") add_library(EATest ${EATEST_SOURCES}) #------------------------------------------------------------------------------------------- -# Defines +# Defines #------------------------------------------------------------------------------------------- add_definitions(-D_CHAR16T) add_definitions(-D_CRT_SECURE_NO_WARNINGS) @@ -19,18 +19,8 @@ add_definitions(-D_CRT_SECURE_NO_WARNINGS) #------------------------------------------------------------------------------------------- # Compiler Flags #------------------------------------------------------------------------------------------- -if( UNIX AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fasm-blocks" ) -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") -endif() +set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/../../../scripts/CMake") +include(CommonCppFlags) if(APPLE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdeprecated") @@ -38,7 +28,7 @@ endif() #------------------------------------------------------------------------------------------- -# Include directories +# Include directories #------------------------------------------------------------------------------------------- target_include_directories(EATest PUBLIC include) target_link_libraries(EATest EABase) diff --git a/test/source/EASTLTestAllocator.cpp b/test/source/EASTLTestAllocator.cpp index c6ef152..1fcb3d8 100644 --- a/test/source/EASTLTestAllocator.cpp +++ b/test/source/EASTLTestAllocator.cpp @@ -323,7 +323,7 @@ } } - void EASTLTest_SetGeneralAllocator() + void EASTLTest_SetGeneralAllocator() { EA::Allocator::SetGeneralAllocator(&EA::Allocator::gGeneralAllocator); #ifdef EA_DEBUG @@ -353,7 +353,7 @@ void EASTLAlignedFree(void* p) { #ifdef EA_PLATFORM_MICROSOFT - _aligned_free(p); + _aligned_free(p); #else free(p); #endif @@ -384,13 +384,20 @@ void* operator new[](size_t size, size_t alignment, const std::nothrow_t&)EA_THROW_SPEC_NEW_NONE() { return Internal::EASTLAlignedAlloc(size, alignment); } + // C++14 deleter + void operator delete(void* p, std::size_t sz ) EA_THROW_SPEC_DELETE_NONE() + { Internal::EASTLAlignedFree(p); EA_UNUSED(sz); } + + void operator delete[](void* p, std::size_t sz ) EA_THROW_SPEC_DELETE_NONE() + { Internal::EASTLAlignedFree(p); EA_UNUSED(sz); } + void operator delete(void* p) EA_THROW_SPEC_DELETE_NONE() { Internal::EASTLAlignedFree(p); } void operator delete[](void* p) EA_THROW_SPEC_DELETE_NONE() { Internal::EASTLAlignedFree(p); } - void EASTLTest_SetGeneralAllocator() { /* intentionally blank */ } + void EASTLTest_SetGeneralAllocator() { /* intentionally blank */ } bool EASTLTest_ValidateHeap() { return true; } #endif // ....