mirror of https://github.com/google/benchmark.git
Merge pull request #175 from KindDragon/master
Support MSVC on appveyor
This commit is contained in:
commit
1c4df750c4
142
CMakeLists.txt
142
CMakeLists.txt
|
@ -1,6 +1,14 @@
|
||||||
cmake_minimum_required (VERSION 2.8.11)
|
cmake_minimum_required (VERSION 2.8.11)
|
||||||
project (benchmark)
|
project (benchmark)
|
||||||
|
|
||||||
|
foreach(p
|
||||||
|
CMP0054 # CMake 3.1
|
||||||
|
)
|
||||||
|
if(POLICY ${p})
|
||||||
|
cmake_policy(SET ${p} NEW)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
option(BENCHMARK_ENABLE_TESTING "Enable testing of the benchmark library." ON)
|
option(BENCHMARK_ENABLE_TESTING "Enable testing of the benchmark library." ON)
|
||||||
option(BENCHMARK_ENABLE_LTO "Enable link time optimisation of the benchmark library." OFF)
|
option(BENCHMARK_ENABLE_LTO "Enable link time optimisation of the benchmark library." OFF)
|
||||||
# Make sure we can import out CMake functions
|
# Make sure we can import out CMake functions
|
||||||
|
@ -23,73 +31,83 @@ include(CheckCXXCompilerFlag)
|
||||||
include(AddCXXCompilerFlag)
|
include(AddCXXCompilerFlag)
|
||||||
include(CXXFeatureCheck)
|
include(CXXFeatureCheck)
|
||||||
|
|
||||||
# Try and enable C++11. Don't use C++14 because it doesn't work in some
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
# configurations.
|
# Turn compiler warnings up to 11
|
||||||
add_cxx_compiler_flag(-std=c++11)
|
|
||||||
if (NOT HAVE_CXX_FLAG_STD_CXX11)
|
|
||||||
add_cxx_compiler_flag(-std=c++0x)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Turn compiler warnings up to 11
|
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|
||||||
add_cxx_compiler_flag(-W4)
|
add_cxx_compiler_flag(-W4)
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
else()
|
|
||||||
add_cxx_compiler_flag(-Wall)
|
|
||||||
endif()
|
|
||||||
add_cxx_compiler_flag(-Wextra)
|
|
||||||
add_cxx_compiler_flag(-Wshadow)
|
|
||||||
add_cxx_compiler_flag(-Werror RELEASE)
|
|
||||||
add_cxx_compiler_flag(-pedantic)
|
|
||||||
add_cxx_compiler_flag(-pedantic-errors)
|
|
||||||
add_cxx_compiler_flag(-Wshorten-64-to-32)
|
|
||||||
add_cxx_compiler_flag(-Wfloat-equal)
|
|
||||||
add_cxx_compiler_flag(-Wzero-as-null-pointer-constant)
|
|
||||||
add_cxx_compiler_flag(-fstrict-aliasing)
|
|
||||||
if (HAVE_CXX_FLAG_FSTRICT_ALIASING)
|
|
||||||
add_cxx_compiler_flag(-Wstrict-aliasing)
|
|
||||||
endif()
|
|
||||||
add_cxx_compiler_flag(-Wthread-safety)
|
|
||||||
if (HAVE_WTHREAD_SAFETY)
|
|
||||||
add_definitions(-DHAVE_WTHREAD_SAFETY)
|
|
||||||
cxx_feature_check(THREAD_SAFETY_ATTRIBUTES)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Link time optimisation
|
# Link time optimisation
|
||||||
if (BENCHMARK_ENABLE_LTO)
|
if (BENCHMARK_ENABLE_LTO)
|
||||||
add_cxx_compiler_flag(-flto)
|
set(CMAKE_CXX_FLAGS_RELEASE "/GL")
|
||||||
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "/LTCG")
|
||||||
find_program(GCC_AR gcc-ar)
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/LTCG")
|
||||||
if (GCC_AR)
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
|
||||||
set(CMAKE_AR ${GCC_AR})
|
endif()
|
||||||
endif()
|
else()
|
||||||
find_program(GCC_RANLIB gcc-ranlib)
|
# Try and enable C++11. Don't use C++14 because it doesn't work in some
|
||||||
if (GCC_RANLIB)
|
# configurations.
|
||||||
set(CMAKE_RANLIB ${GCC_RANLIB})
|
add_cxx_compiler_flag(-std=c++11)
|
||||||
|
if (NOT HAVE_CXX_FLAG_STD_CXX11)
|
||||||
|
add_cxx_compiler_flag(-std=c++0x)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Turn compiler warnings up to 11
|
||||||
|
add_cxx_compiler_flag(-Wall)
|
||||||
|
|
||||||
|
add_cxx_compiler_flag(-Wextra)
|
||||||
|
add_cxx_compiler_flag(-Wshadow)
|
||||||
|
add_cxx_compiler_flag(-Werror RELEASE)
|
||||||
|
add_cxx_compiler_flag(-pedantic)
|
||||||
|
add_cxx_compiler_flag(-pedantic-errors)
|
||||||
|
add_cxx_compiler_flag(-Wshorten-64-to-32)
|
||||||
|
add_cxx_compiler_flag(-Wfloat-equal)
|
||||||
|
add_cxx_compiler_flag(-Wzero-as-null-pointer-constant)
|
||||||
|
add_cxx_compiler_flag(-fstrict-aliasing)
|
||||||
|
if (HAVE_CXX_FLAG_FSTRICT_ALIASING)
|
||||||
|
add_cxx_compiler_flag(-Wstrict-aliasing)
|
||||||
|
endif()
|
||||||
|
add_cxx_compiler_flag(-Wthread-safety)
|
||||||
|
if (HAVE_WTHREAD_SAFETY)
|
||||||
|
add_definitions(-DHAVE_WTHREAD_SAFETY)
|
||||||
|
cxx_feature_check(THREAD_SAFETY_ATTRIBUTES)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Link time optimisation
|
||||||
|
if (BENCHMARK_ENABLE_LTO)
|
||||||
|
add_cxx_compiler_flag(-flto)
|
||||||
|
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||||
|
find_program(GCC_AR gcc-ar)
|
||||||
|
if (GCC_AR)
|
||||||
|
set(CMAKE_AR ${GCC_AR})
|
||||||
|
endif()
|
||||||
|
find_program(GCC_RANLIB gcc-ranlib)
|
||||||
|
if (GCC_RANLIB)
|
||||||
|
set(CMAKE_RANLIB ${GCC_RANLIB})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
|
|
||||||
# Coverage build type
|
# Coverage build type
|
||||||
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING
|
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING
|
||||||
"Flags used by the C++ compiler during coverage builds."
|
"Flags used by the C++ compiler during coverage builds."
|
||||||
FORCE)
|
FORCE)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
||||||
"${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING
|
"${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING
|
||||||
"Flags used for linking binaries during coverage builds."
|
"Flags used for linking binaries during coverage builds."
|
||||||
FORCE)
|
FORCE)
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
|
set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
|
||||||
"${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING
|
"${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING
|
||||||
"Flags used by the shared libraries linker during coverage builds."
|
"Flags used by the shared libraries linker during coverage builds."
|
||||||
FORCE)
|
FORCE)
|
||||||
mark_as_advanced(
|
mark_as_advanced(
|
||||||
CMAKE_CXX_FLAGS_COVERAGE
|
CMAKE_CXX_FLAGS_COVERAGE
|
||||||
CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
||||||
CMAKE_SHARED_LINKER_FLAGS_COVERAGE)
|
CMAKE_SHARED_LINKER_FLAGS_COVERAGE)
|
||||||
set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
|
set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
|
||||||
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage."
|
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage."
|
||||||
FORCE)
|
FORCE)
|
||||||
add_cxx_compiler_flag(--coverage COVERAGE)
|
add_cxx_compiler_flag(--coverage COVERAGE)
|
||||||
|
endif()
|
||||||
|
|
||||||
# C++ feature checks
|
# C++ feature checks
|
||||||
cxx_feature_check(STD_REGEX)
|
cxx_feature_check(STD_REGEX)
|
||||||
|
|
84
appveyor.yml
84
appveyor.yml
|
@ -12,9 +12,16 @@ platform:
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
|
- compiler: msvc-12-seh
|
||||||
|
- compiler: msvc-14-seh
|
||||||
- compiler: gcc-4.9.2-posix
|
- compiler: gcc-4.9.2-posix
|
||||||
# - compiler: gcc-4.8.4-posix
|
# - compiler: gcc-4.8.4-posix
|
||||||
# - compiler: msvc-12-seh
|
|
||||||
|
artifacts:
|
||||||
|
- path: '_build/CMakeFiles/*.log'
|
||||||
|
name: logs
|
||||||
|
- path: '_build/Testing/**/*.xml'
|
||||||
|
name: test_results
|
||||||
|
|
||||||
install:
|
install:
|
||||||
# derive some extra information
|
# derive some extra information
|
||||||
|
@ -35,18 +42,83 @@ before_build:
|
||||||
- if "%compiler_name%"=="gcc" (set "build=mingw32-make -j4")
|
- if "%compiler_name%"=="gcc" (set "build=mingw32-make -j4")
|
||||||
- if "%compiler_name%"=="gcc" (set "test=mingw32-make CTEST_OUTPUT_ON_FAILURE=1 test")
|
- if "%compiler_name%"=="gcc" (set "test=mingw32-make CTEST_OUTPUT_ON_FAILURE=1 test")
|
||||||
# msvc specific commands
|
# msvc specific commands
|
||||||
# TODO :)
|
- if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x86" (set "generator=Visual Studio 12 2013")
|
||||||
|
- if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x64" (set "generator=Visual Studio 12 2013 Win64")
|
||||||
|
- if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x86" (set "generator=Visual Studio 14 2015")
|
||||||
|
- if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x64" (set "generator=Visual Studio 14 2015 Win64")
|
||||||
|
- if "%compiler_name%"=="msvc" (set "build=cmake --build . --config %variant%")
|
||||||
|
- if "%compiler_name%"=="msvc" (set "test=ctest -c Release -D CTEST_OUTPUT_ON_FAILURE:STRING=1")
|
||||||
# add the compiler path if needed
|
# add the compiler path if needed
|
||||||
- if not "%compiler_path%"=="" (set "PATH=%PATH%;%compiler_path%")
|
- if not "%compiler_path%"=="" (set "PATH=%PATH%;%compiler_path%")
|
||||||
# git bash conflicts with MinGW makefiles
|
# git bash conflicts with MinGW makefiles
|
||||||
- if "%generator%"=="MinGW Makefiles" (set "PATH=%PATH:C:\Program Files (x86)\Git\bin=%")
|
- if "%generator%"=="MinGW Makefiles" (set "PATH=%PATH:C:\Program Files\Git\usr\bin;=%")
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cmake -G "%generator%" "-DCMAKE_BUILD_TYPE=%variant%" "-DBUILD_SHARED_LIBS=%shared%"
|
- ps: |
|
||||||
- cmd /c "%build%"
|
md _build -Force
|
||||||
|
cd _build
|
||||||
|
& cmake -G "$env:generator" "-DCMAKE_BUILD_TYPE=$env:variant" "-DBUILD_SHARED_LIBS=$env:shared" ..
|
||||||
|
if ($LastExitCode -ne 0) {
|
||||||
|
throw "Exec: $ErrorMessage"
|
||||||
|
}
|
||||||
|
iex "& $env:build"
|
||||||
|
if ($LastExitCode -ne 0) {
|
||||||
|
throw "Exec: $ErrorMessage"
|
||||||
|
}
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- cmd /c "%test%"
|
- ps: |
|
||||||
|
iex "& $env:test"
|
||||||
|
if ($LastExitCode -ne 0) {
|
||||||
|
throw "Exec: $ErrorMessage"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Add-CTest-Result($testResult)
|
||||||
|
{
|
||||||
|
$tests = ([xml](get-content $testResult)).Site.Testing
|
||||||
|
$testsCount = 0
|
||||||
|
$anyFailures = $FALSE
|
||||||
|
|
||||||
|
foreach ($test in $tests.test) {
|
||||||
|
$testsCount++
|
||||||
|
$testName = $test.Name
|
||||||
|
$testpath = $test.Path
|
||||||
|
$timeNode = $test.SelectSingleNode('Results/NamedMeasurement[@name="Execution Time"]/Value')
|
||||||
|
if ($test.status -eq "failure") {
|
||||||
|
$time = ([double]$timeNode.InnerText * 1000)
|
||||||
|
Add-AppveyorTest $testName -Outcome Failed -FileName $testpath -Duration $time -ErrorMessage $($test.results.measurement.value)
|
||||||
|
Add-AppveyorMessage `"$testName failed`" -Category Error
|
||||||
|
$anyFailures = $TRUE
|
||||||
|
}
|
||||||
|
elseif ($test.status -eq "skipped") {
|
||||||
|
Add-AppveyorTest $testName -Outcome Ignored -Filename $testpath
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$time = ([double]$timeNode.InnerText * 1000)
|
||||||
|
Add-AppveyorTest $testName -Outcome Passed -FileName $testpath -Duration $time -StdOut $($test.results.measurement.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $testsCount, $anyFailures
|
||||||
|
}
|
||||||
|
|
||||||
|
$testsCount = 0
|
||||||
|
$anyFailures = $FALSE
|
||||||
|
|
||||||
|
# Run tests and upload results to AppVeyor one by one
|
||||||
|
Get-ChildItem ".\Testing\*.xml" -Recurse | foreach {
|
||||||
|
$testfile = $_.fullname
|
||||||
|
$count, $testsResult = Add-CTest-Result $testfile
|
||||||
|
Write-Host "Found $testfile with $count tests"
|
||||||
|
$testsCount = $testsCount + $count
|
||||||
|
$anyFailures = $anyFailures -or $testsResult
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "There are $testsCount tests found"
|
||||||
|
|
||||||
|
if ($anyFailures -eq $TRUE){
|
||||||
|
Write-Host "Failing build as there are broken tests"
|
||||||
|
$host.SetShouldExit(1)
|
||||||
|
}
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
|
|
Loading…
Reference in New Issue