Honor the BUILD_TESTING option This requires importing CTest to declare the BUILD_TESTING option (in particular default it to ON). I've not registered our tests with CTest or anything, though that may be something to explore and perhaps retire all_tests.go. Bug: 389897612 Change-Id: I5e9a853f6a5fea9229bcd3a2a202c91627f6d3de Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/78608 Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Adam Langley <agl@google.com> Commit-Queue: Adam Langley <agl@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt index 4076f77..d849bec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -36,6 +36,9 @@ enable_language(C) enable_language(CXX) +# TODO(crbug,com/389897612): Register tests with CTest. For now, we include this +# only to pick up the standard |BUILD_TESTING| option. +include(CTest) include(GNUInstallDirs) set(INSTALL_ENABLED 1) @@ -476,31 +479,34 @@ target_link_libraries(libcxx libcxxabi) endif() -# Add minimal googletest targets. The provided one has many side-effects, and -# googletest has a very straightforward build. -add_library( - boringssl_gtest - third_party/googletest/googlemock/src/gmock-all.cc - third_party/googletest/googletest/src/gtest-all.cc -) -if(USE_CUSTOM_LIBCXX) - target_link_libraries(boringssl_gtest libcxx) -endif() -target_include_directories( +if(BUILD_TESTING) + # Add minimal googletest targets. The provided one has many side-effects, and + # googletest has a very straightforward build. + add_library( boringssl_gtest - PUBLIC - third_party/googletest/googlemock/include - third_party/googletest/googletest/include - PRIVATE - third_party/googletest/googlemock - third_party/googletest/googletest -) + third_party/googletest/googlemock/src/gmock-all.cc + third_party/googletest/googletest/src/gtest-all.cc + ) + if(USE_CUSTOM_LIBCXX) + target_link_libraries(boringssl_gtest libcxx) + endif() + target_include_directories( + boringssl_gtest + PUBLIC + third_party/googletest/googlemock/include + third_party/googletest/googletest/include + PRIVATE + third_party/googletest/googlemock + third_party/googletest/googletest + ) -# Declare a dummy target to build all unit tests. Test targets should inject -# themselves as dependencies next to the target definition. -add_custom_target(all_tests) + # Declare a dummy target to build all unit tests. Test targets should inject + # themselves as dependencies next to the target definition. + add_custom_target(all_tests) -add_subdirectory(ssl/test) + add_subdirectory(ssl/test) +endif() + add_subdirectory(util/fipstools) add_subdirectory(util/fipstools/acvp/modulewrapper) @@ -658,52 +664,50 @@ add_library(decrepit ${DECREPIT_SOURCES}) target_link_libraries(decrepit ssl crypto) -add_library(test_support_lib STATIC - ${TEST_SUPPORT_SOURCES} ${TEST_SUPPORT_SOURCES_ASM_USED}) -if(LIBUNWIND_FOUND) - target_compile_options(test_support_lib PRIVATE ${LIBUNWIND_CFLAGS_OTHER}) - target_include_directories(test_support_lib PRIVATE ${LIBUNWIND_INCLUDE_DIRS}) - target_link_libraries(test_support_lib ${LIBUNWIND_LDFLAGS}) -endif() -if(WIN32) - target_link_libraries(test_support_lib dbghelp) -endif() -target_link_libraries(test_support_lib boringssl_gtest crypto) - -# urandom_test is a separate binary because it needs to be able to observe the -# PRNG initialisation, which means that it can't have other tests running before -# it does. -add_executable(urandom_test ${URANDOM_TEST_SOURCES}) -target_link_libraries(urandom_test test_support_lib boringssl_gtest crypto) -add_dependencies(all_tests urandom_test) - -add_executable(crypto_test ${CRYPTO_TEST_SOURCES}) -target_link_libraries(crypto_test test_support_lib boringssl_gtest crypto) -add_dependencies(all_tests crypto_test) - -add_executable(ssl_test ${SSL_TEST_SOURCES}) -target_link_libraries(ssl_test test_support_lib boringssl_gtest ssl crypto) -add_dependencies(all_tests ssl_test) -add_executable(decrepit_test ${DECREPIT_TEST_SOURCES}) -target_link_libraries(decrepit_test test_support_lib boringssl_gtest - decrepit ssl crypto) -add_dependencies(all_tests decrepit_test) - if(APPLE) set(PKI_CXX_FLAGS "-fno-aligned-new") endif() - add_library(pki ${PKI_SOURCES}) target_link_libraries(pki crypto) +target_compile_options(pki PRIVATE ${PKI_CXX_FLAGS}) -add_executable(pki_test ${PKI_TEST_SOURCES}) -target_link_libraries(pki_test test_support_lib boringssl_gtest pki crypto) -add_dependencies(all_tests pki_test) +if(BUILD_TESTING) + add_library(test_support_lib STATIC + ${TEST_SUPPORT_SOURCES} ${TEST_SUPPORT_SOURCES_ASM_USED}) + if(LIBUNWIND_FOUND) + target_compile_options(test_support_lib PRIVATE ${LIBUNWIND_CFLAGS_OTHER}) + target_include_directories(test_support_lib PRIVATE ${LIBUNWIND_INCLUDE_DIRS}) + target_link_libraries(test_support_lib ${LIBUNWIND_LDFLAGS}) + endif() + if(WIN32) + target_link_libraries(test_support_lib dbghelp) + endif() + target_link_libraries(test_support_lib boringssl_gtest crypto) -set_target_properties( - pki pki_test - PROPERTIES - COMPILE_FLAGS "${PKI_CXX_FLAGS}") + # urandom_test is a separate binary because it needs to be able to observe the + # PRNG initialisation, which means that it can't have other tests running before + # it does. + add_executable(urandom_test ${URANDOM_TEST_SOURCES}) + target_link_libraries(urandom_test test_support_lib boringssl_gtest crypto) + add_dependencies(all_tests urandom_test) + + add_executable(crypto_test ${CRYPTO_TEST_SOURCES}) + target_link_libraries(crypto_test test_support_lib boringssl_gtest crypto) + add_dependencies(all_tests crypto_test) + + add_executable(ssl_test ${SSL_TEST_SOURCES}) + target_link_libraries(ssl_test test_support_lib boringssl_gtest ssl crypto) + add_dependencies(all_tests ssl_test) + add_executable(decrepit_test ${DECREPIT_TEST_SOURCES}) + target_link_libraries(decrepit_test test_support_lib boringssl_gtest + decrepit ssl crypto) + add_dependencies(all_tests decrepit_test) + + add_executable(pki_test ${PKI_TEST_SOURCES}) + target_link_libraries(pki_test test_support_lib boringssl_gtest pki crypto) + target_compile_options(pki_test PRIVATE ${PKI_CXX_FLAGS}) + add_dependencies(all_tests pki_test) +endif() add_executable(bssl ${BSSL_SOURCES}) target_link_libraries(bssl ssl crypto) @@ -736,56 +740,58 @@ set(HANDSHAKER_ARGS "-handshaker-path" $<TARGET_FILE:handshaker>) endif() -if(FIPS) - add_custom_target( - acvp_tests - COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_CURRENT_BINARY_DIR}/acvptool - boringssl.googlesource.com/boringssl.git/util/fipstools/acvp/acvptool - COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_CURRENT_BINARY_DIR}/testmodulewrapper - boringssl.googlesource.com/boringssl.git/util/fipstools/acvp/acvptool/testmodulewrapper - COMMAND cd util/fipstools/acvp/acvptool/test && - ${GO_EXECUTABLE} run check_expected.go - -tool ${CMAKE_CURRENT_BINARY_DIR}/acvptool - -module-wrappers modulewrapper:$<TARGET_FILE:modulewrapper>,testmodulewrapper:${CMAKE_CURRENT_BINARY_DIR}/testmodulewrapper - -tests tests.json - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS modulewrapper - USES_TERMINAL) - - add_custom_target( - fips_specific_tests_if_any - DEPENDS acvp_tests - ) -else() - add_custom_target(fips_specific_tests_if_any) -endif() - -file(STRINGS util/go_tests.txt GO_TESTS) -set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS - util/go_tests.txt) - -if(GO_EXECUTABLE) - add_custom_target( - run_tests - COMMAND ${CMAKE_COMMAND} -E echo "Running Go tests" - COMMAND ${GO_EXECUTABLE} test ${GO_TESTS} - COMMAND ${CMAKE_COMMAND} -E echo - COMMAND ${CMAKE_COMMAND} -E echo "Running unit tests" - COMMAND ${GO_EXECUTABLE} run util/all_tests.go -build-dir - ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E echo - COMMAND ${CMAKE_COMMAND} -E echo "Running SSL tests" - COMMAND cd ssl/test/runner && - ${GO_EXECUTABLE} test -shim-path $<TARGET_FILE:bssl_shim> - ${HANDSHAKER_ARGS} ${RUNNER_ARGS} +if(BUILD_TESTING) + if(FIPS) + add_custom_target( + acvp_tests + COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_CURRENT_BINARY_DIR}/acvptool + boringssl.googlesource.com/boringssl.git/util/fipstools/acvp/acvptool + COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_CURRENT_BINARY_DIR}/testmodulewrapper + boringssl.googlesource.com/boringssl.git/util/fipstools/acvp/acvptool/testmodulewrapper + COMMAND cd util/fipstools/acvp/acvptool/test && + ${GO_EXECUTABLE} run check_expected.go + -tool ${CMAKE_CURRENT_BINARY_DIR}/acvptool + -module-wrappers modulewrapper:$<TARGET_FILE:modulewrapper>,testmodulewrapper:${CMAKE_CURRENT_BINARY_DIR}/testmodulewrapper + -tests tests.json WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS all_tests bssl_shim handshaker fips_specific_tests_if_any + DEPENDS modulewrapper USES_TERMINAL) -else() - add_custom_target( - run_tests - COMMAND ${CMAKE_COMMAND} -E echo "Running tests requires Go" - COMMAND ${CMAKE_COMMAND} -E false) + + add_custom_target( + fips_specific_tests_if_any + DEPENDS acvp_tests + ) + else() + add_custom_target(fips_specific_tests_if_any) + endif() + + file(STRINGS util/go_tests.txt GO_TESTS) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS + util/go_tests.txt) + + if(GO_EXECUTABLE) + add_custom_target( + run_tests + COMMAND ${CMAKE_COMMAND} -E echo "Running Go tests" + COMMAND ${GO_EXECUTABLE} test ${GO_TESTS} + COMMAND ${CMAKE_COMMAND} -E echo + COMMAND ${CMAKE_COMMAND} -E echo "Running unit tests" + COMMAND ${GO_EXECUTABLE} run util/all_tests.go -build-dir + ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E echo + COMMAND ${CMAKE_COMMAND} -E echo "Running SSL tests" + COMMAND cd ssl/test/runner && + ${GO_EXECUTABLE} test -shim-path $<TARGET_FILE:bssl_shim> + ${HANDSHAKER_ARGS} ${RUNNER_ARGS} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS all_tests bssl_shim handshaker fips_specific_tests_if_any + USES_TERMINAL) + else() + add_custom_target( + run_tests + COMMAND ${CMAKE_COMMAND} -E echo "Running tests requires Go" + COMMAND ${CMAKE_COMMAND} -E false) + endif() endif() if(INSTALL_ENABLED)
diff --git a/util/fipstools/CMakeLists.txt b/util/fipstools/CMakeLists.txt index ff33b4f..e2bcb19 100644 --- a/util/fipstools/CMakeLists.txt +++ b/util/fipstools/CMakeLists.txt
@@ -1,6 +1,8 @@ -add_executable( - test_fips +if(BUILD_TESTING) + add_executable( + test_fips - test_fips.cc -) -target_link_libraries(test_fips crypto) + test_fips.cc + ) + target_link_libraries(test_fips crypto) +endif()