152 lines
4.1 KiB
CMake
152 lines
4.1 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
project(SafeInt VERSION 3.0.26)
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
|
|
|
# Runtime tests are:
|
|
# - default
|
|
# - without built-in 128-bit support
|
|
# - without intrinsics
|
|
|
|
# Compile time tests are:
|
|
# - default C++11
|
|
# - C++14
|
|
# - TODO - consider adding in 17, 20 just to see if anything breaks
|
|
# - compile without exceptions
|
|
|
|
# Supported compilers:
|
|
# - Microsoft
|
|
# - clang
|
|
# - gcc
|
|
# - Intel (not regularly tested)
|
|
# other compilers on a best effort
|
|
|
|
# test for g++
|
|
find_program(MSVC_CL "cl.exe")
|
|
|
|
if(NOT MSVC_CL)
|
|
message(STATUS "Skipping MSVC testing")
|
|
else()
|
|
message(STATUS "MSVC available, configuring MSVC tests")
|
|
set(CMAKE_CXX_COMPILER ${MSVC_CL})
|
|
|
|
# the standard level is already at C++11, which is what we need for runtime tests
|
|
add_compile_options(/Wall /wd4710 /wd4711)
|
|
|
|
# This will test whatever the mainline code can do, typically using int128
|
|
add_executable(SafeIntTest_msvc
|
|
../AddVerify.cpp
|
|
../AddTestCase.cpp
|
|
../CastVerify.cpp
|
|
../DivVerify.cpp
|
|
../DivTestCase.cpp
|
|
../IncDecVerify.cpp
|
|
../ModVerify.cpp
|
|
../MultVerify.cpp
|
|
../MultTestCase.cpp
|
|
../SubVerify.cpp
|
|
../SubTestCase.cpp
|
|
../TestMain.cpp
|
|
../TestMain.h
|
|
../../SafeInt.hpp
|
|
)
|
|
|
|
# Forces use of the older, less efficient code that can't use either int128 or intrinsics
|
|
add_executable(SafeIntTest_msvc_NoIntrinsic
|
|
../AddVerify.cpp
|
|
../AddTestCase.cpp
|
|
../CastVerify.cpp
|
|
../DivVerify.cpp
|
|
../DivTestCase.cpp
|
|
../IncDecVerify.cpp
|
|
../ModVerify.cpp
|
|
../MultVerify.cpp
|
|
../MultTestCase.cpp
|
|
../SubVerify.cpp
|
|
../SubTestCase.cpp
|
|
../TestMain.cpp
|
|
../TestMain.h
|
|
../../SafeInt.hpp
|
|
)
|
|
|
|
target_compile_definitions(SafeIntTest_msvc_NoIntrinsic PUBLIC "SAFEINT_USE_INTRINSICS=0" "SAFEINT_HAS_INT128=0")
|
|
|
|
# compilation tests, these are good if they just build
|
|
add_executable(CompileTest_msvc
|
|
../CompileTest.cpp
|
|
../ConstExpr.cpp
|
|
../CleanCompile.cpp
|
|
../../SafeInt.hpp
|
|
)
|
|
|
|
target_compile_options(CompileTest_msvc PUBLIC /wd4711 /wd4710)
|
|
|
|
add_executable(CompileTest_msvc14
|
|
../CompileTest.cpp
|
|
../ConstExpr.cpp
|
|
../CleanCompile.cpp
|
|
../../SafeInt.hpp
|
|
)
|
|
|
|
target_compile_options(CompileTest_msvc14 PUBLIC /std:c++14 /wd4711)
|
|
|
|
add_executable(CompileTest_msvc17
|
|
../CompileTest.cpp
|
|
../ConstExpr.cpp
|
|
../CleanCompile.cpp
|
|
../../SafeInt.hpp
|
|
)
|
|
|
|
target_compile_options(CompileTest_msvc17 PUBLIC /std:c++17)
|
|
|
|
# compilation tests, these are good if they just build
|
|
add_executable(CompileTest_msvc_noexcept
|
|
../CompileTest.cpp
|
|
../ConstExpr.cpp
|
|
../CleanCompile.cpp
|
|
../../SafeInt.hpp
|
|
)
|
|
|
|
target_compile_options(CompileTest_msvc_noexcept PUBLIC /wd4711 /wd4710 /EHsc)
|
|
|
|
add_executable(safe_math_test_msvc
|
|
../c_safe_math/safe_math_test.c
|
|
../c_safe_math/safe_math_test.h
|
|
../c_safe_math/safe_math_test_add.cpp
|
|
../c_safe_math/safe_math_test_div.cpp
|
|
../c_safe_math/safe_math_test_mult.cpp
|
|
../c_safe_math/safe_math_test_sub.cpp
|
|
../c_safe_math/compile_test.c
|
|
../AddTestCase.cpp
|
|
../DivTestCase.cpp
|
|
../MultTestCase.cpp
|
|
../SubTestCase.cpp
|
|
)
|
|
|
|
target_compile_definitions(safe_math_test_msvc PUBLIC)
|
|
target_compile_options(safe_math_test_msvc PUBLIC /wd4464)
|
|
|
|
add_executable(safe_math_compile_msvc
|
|
../c_safe_math/safe_math_compile.c
|
|
../c_safe_math/compile_test.c
|
|
../../safe_math.h
|
|
../../safe_math_impl.h
|
|
)
|
|
|
|
target_compile_options(safe_math_compile_msvc PUBLIC -Wall /wd4464)
|
|
|
|
endif()
|
|
|
|
enable_testing()
|
|
|
|
if(MSVC_CL)
|
|
add_test(NAME SafeIntTest_msvc COMMAND SafeIntTest_msvc)
|
|
add_test(NAME SafeIntTest_msvc_NoIntrinsic COMMAND SafeIntTest_msvc_NoIntrinsic)
|
|
add_test(NAME safe_math_test_msvc COMMAND safe_math_test_msvc)
|
|
|
|
set_tests_properties(SafeIntTest_msvc
|
|
SafeIntTest_msvc_NoIntrinsic
|
|
safe_math_test_msvc
|
|
PROPERTIES FAIL_REGULAR_EXPRESSION "Error")
|
|
endif() |