cmake: Enable googletest unit tests (#1720)

Also don't inherit compile warnings from wpiutil

There's not a good way to disable inherited compiler flags.
This commit is contained in:
Peter Johnson
2019-06-23 12:44:28 -07:00
committed by GitHub
parent 223d47af0e
commit 372ca4f456
11 changed files with 140 additions and 11 deletions

View File

@@ -48,6 +48,7 @@ option(WITHOUT_JAVA "don't include java and JNI in the build" OFF)
option(BUILD_SHARED_LIBS "build with shared libs (needed for JNI)" ON)
option(WITHOUT_CSCORE "Don't build cscore (removes OpenCV requirement)" OFF)
option(WITHOUT_ALLWPILIB "Don't build allwpilib (removes OpenCV requirement)" ON)
option(WITH_TESTS "build unit tests (requires internet connection)" OFF)
option(USE_EXTERNAL_HAL "Use a separately built HAL" OFF)
set(EXTERNAL_HAL_FILE "" CACHE FILEPATH "Location to look for an external HAL CMake File")
option(USE_VCPKG_LIBUV "Use vcpkg libuv" OFF)
@@ -96,6 +97,12 @@ endif()
set(FILENAME_DEP_REPLACE "get_filename_component(SELF_DIR \"$\{CMAKE_CURRENT_LIST_FILE\}\" PATH)")
set(SELF_DIR "$\{SELF_DIR\}")
if (WITH_TESTS)
enable_testing()
add_subdirectory(googletest)
include(GoogleTest)
endif()
add_subdirectory(wpiutil)
add_subdirectory(ntcore)

View File

@@ -1,5 +1,8 @@
project(cameraserver)
include(CompileWarnings)
include(AddTest)
find_package( OpenCV REQUIRED )
# Java bindings
@@ -32,6 +35,7 @@ set_target_properties(cameraserver PROPERTIES DEBUG_POSTFIX "d")
target_include_directories(cameraserver PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/include>
$<INSTALL_INTERFACE:${include_dest}/cameraserver>)
wpilib_target_warnings(cameraserver)
target_link_libraries(cameraserver PUBLIC ntcore cscore wpiutil ${OpenCV_LIBS})
set_property(TARGET cameraserver PROPERTY FOLDER "libraries")
@@ -55,6 +59,12 @@ install(EXPORT cameraserver DESTINATION ${cameraserver_config_dir})
file(GLOB multiCameraServer_src multiCameraServer/src/main/native/cpp/*.cpp)
add_executable(multiCameraServer ${multiCameraServer_src})
wpilib_target_warnings(multiCameraServer)
target_link_libraries(multiCameraServer cameraserver)
set_property(TARGET multiCameraServer PROPERTY FOLDER "examples")
if (WITH_TESTS)
wpilib_add_test(cameraserver src/test/native/cpp)
target_link_libraries(cameraserver_test cameraserver gtest)
endif()

View File

@@ -0,0 +1,14 @@
include(CompileWarnings)
macro(wpilib_add_test name srcdir)
file(GLOB_RECURSE test_src ${srcdir}/*.cpp)
add_executable(${name}_test ${test_src})
wpilib_target_warnings(${name}_test)
if (BUILD_SHARED_LIBS)
target_compile_definitions(${name}_test PRIVATE -DGTEST_LINKED_AS_SHARED_LIBRARY)
endif()
if (MSVC)
target_compile_options(${name}_test PRIVATE /wd4251 /wd4101)
endif()
add_test(NAME ${name} COMMAND ${name}_test)
endmacro()

View File

@@ -0,0 +1,7 @@
macro(wpilib_target_warnings target)
if(NOT MSVC)
target_compile_options(${target} PRIVATE -Wall -pedantic -Wextra -Werror -Wno-unused-parameter)
else()
target_compile_options(${target} PRIVATE /wd4244 /wd4267 /wd4146 /WX /wd4996)
endif()
endmacro()

View File

@@ -1,6 +1,8 @@
project(cscore)
include(SubDirList)
include(CompileWarnings)
include(AddTest)
find_package( OpenCV REQUIRED )
@@ -21,14 +23,15 @@ if(NOT MSVC)
endif()
else()
target_sources(cscore PRIVATE ${cscore_windows_src})
target_compile_options(cscore PUBLIC -DNOMINMAX)
target_compile_options(cscore PRIVATE -D_CRT_SECURE_NO_WARNINGS)
target_compile_definitions(cscore PUBLIC -DNOMINMAX)
target_compile_definitions(cscore PRIVATE -D_CRT_SECURE_NO_WARNINGS)
endif()
target_include_directories(cscore PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/include>
$<INSTALL_INTERFACE:${include_dest}/cscore>)
target_include_directories(cscore PRIVATE src/main/native/cpp)
wpilib_target_warnings(cscore)
target_link_libraries(cscore PUBLIC wpiutil ${OpenCV_LIBS})
set_property(TARGET cscore PROPERTY FOLDER "libraries")
@@ -51,6 +54,7 @@ foreach(example ${cscore_examples})
file(GLOB cscore_example_src examples/${example}/*.cpp)
if(cscore_example_src)
add_executable(cscore_${example} ${cscore_example_src})
wpilib_target_warnings(cscore_${example})
target_link_libraries(cscore_${example} cscore)
set_property(TARGET cscore_${example} PROPERTY FOLDER "examples")
endif()
@@ -103,6 +107,7 @@ if (NOT WITHOUT_JAVA)
set_property(TARGET cscore_jar PROPERTY FOLDER "java")
add_library(cscorejni ${cscore_jni_src})
wpilib_target_warnings(cscorejni)
target_link_libraries(cscorejni PUBLIC cscore wpiutil ${OpenCV_LIBS})
set_property(TARGET cscorejni PROPERTY FOLDER "libraries")
@@ -122,3 +127,8 @@ if (NOT WITHOUT_JAVA)
install(TARGETS cscorejni EXPORT cscorejni DESTINATION "${main_lib_dest}")
endif()
if (WITH_TESTS)
wpilib_add_test(cscore src/test/native/cpp)
target_link_libraries(cscore_test cscore gmock)
endif()

24
googletest/CMakeLists.txt Normal file
View File

@@ -0,0 +1,24 @@
# Download and unpack googletest at configure time
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
if(result)
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
if(result)
message(FATAL_ERROR "Build step for googletest failed: ${result}")
endif()
# Prevent overriding the parent project's compiler/linker
# settings on Windows
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
# Add googletest directly to our build. This defines
# the gtest and gtest_main targets.
add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
${CMAKE_CURRENT_BINARY_DIR}/googletest-build
EXCLUDE_FROM_ALL)

View File

@@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 2.8.2)
project(googletest-download NONE)
include(ExternalProject)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG b4676595c03a26bb84f68542c8b74d3d89b38b68
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)

View File

@@ -1,5 +1,7 @@
project(hal)
include(CompileWarnings)
include(AddTest)
file(STRINGS src/generate/Instances.txt RAW_INSTANCES)
file(STRINGS src/generate/ResourceType.txt RAW_RESOURCE_TYPES)
@@ -28,6 +30,7 @@ file(GLOB
hal_sim_native_src src/main/native/sim/*.cpp
hal_sim_native_src src/main/native/sim/mockdata/*.cpp)
add_library(hal ${hal_shared_native_src})
wpilib_target_warnings(hal)
set_target_properties(hal PROPERTIES DEBUG_POSTFIX "d")
if(USE_EXTERNAL_HAL)
@@ -105,6 +108,7 @@ if (NOT WITHOUT_JAVA)
set_target_properties(haljni PROPERTIES OUTPUT_NAME "wpiHaljni")
wpilib_target_warnings(haljni)
target_link_libraries(haljni PUBLIC hal wpiutil)
set_property(TARGET haljni PROPERTY FOLDER "libraries")
@@ -124,3 +128,8 @@ if (NOT WITHOUT_JAVA)
install(TARGETS haljni EXPORT haljni DESTINATION "${main_lib_dest}")
endif()
if (WITH_TESTS)
wpilib_add_test(hal src/test/native/cpp)
target_link_libraries(hal_test hal gtest)
endif()

View File

@@ -1,5 +1,8 @@
project(ntcore)
include(CompileWarnings)
include(AddTest)
file(GLOB
ntcore_native_src src/main/native/cpp/*.cpp
ntcore_native_src src/main/native/cpp/networktables/*.cpp
@@ -9,6 +12,7 @@ set_target_properties(ntcore PROPERTIES DEBUG_POSTFIX "d")
target_include_directories(ntcore PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/include>
$<INSTALL_INTERFACE:${include_dest}/ntcore>)
wpilib_target_warnings(ntcore)
target_link_libraries(ntcore PUBLIC wpiutil)
set_property(TARGET ntcore PROPERTY FOLDER "libraries")
@@ -52,6 +56,7 @@ if (NOT WITHOUT_JAVA)
set_property(TARGET ntcore_jar PROPERTY FOLDER "java")
add_library(ntcorejni ${ntcore_jni_src})
wpilib_target_warnings(ntcorejni)
target_link_libraries(ntcorejni PUBLIC ntcore wpiutil)
set_property(TARGET ntcorejni PROPERTY FOLDER "libraries")
@@ -71,3 +76,9 @@ if (NOT WITHOUT_JAVA)
install(TARGETS ntcorejni EXPORT ntcorejni DESTINATION "${main_lib_dest}")
endif()
if (WITH_TESTS)
wpilib_add_test(ntcore src/test/native/cpp)
target_include_directories(ntcore_test PRIVATE src/main/native/cpp)
target_link_libraries(ntcore_test ntcore gmock_main)
endif()

View File

@@ -1,5 +1,8 @@
project(wpilibc)
include(CompileWarnings)
include(AddTest)
find_package( OpenCV REQUIRED )
configure_file(src/generate/WPILibVersion.cpp.in WPILibVersion.cpp)
@@ -13,6 +16,7 @@ set_target_properties(wpilibc PROPERTIES DEBUG_POSTFIX "d")
target_include_directories(wpilibc PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/main/native/include>
$<INSTALL_INTERFACE:${include_dest}/wpilibc>)
wpilib_target_warnings(wpilibc)
target_link_libraries(wpilibc PUBLIC cameraserver hal ntcore cscore wpiutil ${OpenCV_LIBS})
set_property(TARGET wpilibc PROPERTY FOLDER "libraries")
@@ -29,3 +33,14 @@ endif()
configure_file(wpilibc-config.cmake.in ${CMAKE_BINARY_DIR}/wpilibc-config.cmake )
install(FILES ${CMAKE_BINARY_DIR}/wpilibc-config.cmake DESTINATION ${wpilibc_config_dir})
install(EXPORT wpilibc DESTINATION ${wpilibc_config_dir})
if (WITH_TESTS)
wpilib_add_test(wpilibc src/test/native/cpp)
target_include_directories(wpilibc_test PRIVATE src/test/native/include)
target_link_libraries(wpilibc_test wpilibc gmock_main)
if (NOT MSVC)
target_compile_options(wpilibc_test PRIVATE -Wno-error)
else()
target_compile_options(wpilibc_test PRIVATE /WX-)
endif()
endif()

View File

@@ -2,6 +2,8 @@ project(wpiutil)
include(SubDirList)
include(GenResources)
include(CompileWarnings)
include(AddTest)
# Java bindings
if (NOT WITHOUT_JAVA)
@@ -78,14 +80,11 @@ set_target_properties(wpiutil PROPERTIES DEBUG_POSTFIX "d")
set_property(TARGET wpiutil PROPERTY FOLDER "libraries")
target_compile_features(wpiutil PUBLIC cxx_std_17)
if (NOT MSVC)
target_compile_options(wpiutil PUBLIC $<BUILD_INTERFACE:-Wall -pedantic -Wextra -Werror -Wno-unused-parameter>)
else()
target_compile_options(wpiutil PUBLIC /wd4244 /wd4267 /wd4146)
target_compile_options(wpiutil PUBLIC $<BUILD_INTERFACE:/WX /wd4996 /permissive- /Zc:throwingNew>)
target_compile_options(wpiutil PRIVATE -D_CRT_SECURE_NO_WARNINGS)
if (MSVC)
target_compile_options(wpiutil PUBLIC /permissive- /Zc:throwingNew)
target_compile_definitions(wpiutil PRIVATE -D_CRT_SECURE_NO_WARNINGS)
endif()
wpilib_target_warnings(wpiutil)
target_link_libraries(wpiutil Threads::Threads ${CMAKE_DL_LIBS})
if (NOT USE_VCPKG_LIBUV)
@@ -103,11 +102,11 @@ if (NOT USE_VCPKG_LIBUV)
else()
target_sources(wpiutil PRIVATE ${uv_linux_src})
endif()
target_compile_options(wpiutil PRIVATE -D_GNU_SOURCE)
target_compile_definitions(wpiutil PRIVATE -D_GNU_SOURCE)
else()
target_sources(wpiutil PRIVATE ${uv_windows_src})
if(BUILD_SHARED_LIBS)
target_compile_options(wpiutil PRIVATE -DBUILDING_UV_SHARED)
target_compile_definitions(wpiutil PRIVATE -DBUILDING_UV_SHARED)
endif()
endif()
else()
@@ -141,6 +140,7 @@ foreach(example ${wpiutil_examples})
file(GLOB wpiutil_example_src examples/${example}/*.cpp)
if(wpiutil_example_src)
add_executable(wpiutil_${example} ${wpiutil_example_src})
wpilib_target_warnings(wpiutil_${example})
target_link_libraries(wpiutil_${example} wpiutil)
set_property(TARGET wpiutil_${example} PROPERTY FOLDER "examples")
endif()
@@ -154,11 +154,18 @@ endif()
file(GLOB netconsoleServer_src src/netconsoleServer/native/cpp/*.cpp)
add_executable(netconsoleServer ${netconsoleServer_src})
wpilib_target_warnings(netconsoleServer)
target_link_libraries(netconsoleServer wpiutil ${LIBUTIL})
file(GLOB netconsoleTee_src src/netconsoleTee/native/cpp/*.cpp)
add_executable(netconsoleTee ${netconsoleTee_src})
wpilib_target_warnings(netconsoleTee)
target_link_libraries(netconsoleTee wpiutil)
set_property(TARGET netconsoleServer PROPERTY FOLDER "examples")
set_property(TARGET netconsoleTee PROPERTY FOLDER "examples")
if (WITH_TESTS)
wpilib_add_test(wpiutil src/test/native/cpp)
target_link_libraries(wpiutil_test wpiutil ${LIBUTIL} gmock_main)
endif()