Make Go an optional build dependency for the CMake build Matching the various pre-generated builds, the CMake build no longer actually requires Go. The only things that need it are: - Running tests - Builds with -DFIPS=1 - Builds with the experimental symbol prefixing thing Bug: 542 Change-Id: I52bb427f54dd6e5719cfe77773e87fc394410380 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/67367 Commit-Queue: David Benjamin <davidben@google.com> Reviewed-by: Adam Langley <agl@google.com>
diff --git a/BUILDING.md b/BUILDING.md index e10d964..d78d283 100644 --- a/BUILDING.md +++ b/BUILDING.md
@@ -31,14 +31,6 @@ GCC (6.1+) and Clang should work on non-Windows platforms, and maybe on Windows too. - * The most recent stable version of [Go](https://golang.org/dl/) is required. - Note Go is exempt from the five year support window. If not found by CMake, - the go executable may be configured explicitly by setting `GO_EXECUTABLE`. - - * On x86_64 Linux, the tests have an optional - [libunwind](https://www.nongnu.org/libunwind/) dependency to test the - assembly more thoroughly. - ## Building Using Ninja (note the 'N' is capitalized in the cmake invocation): @@ -127,7 +119,8 @@ BoringSSL's build system has experimental support for adding a custom prefix to all symbols. This can be useful when linking multiple versions of BoringSSL in -the same project to avoid symbol conflicts. +the same project to avoid symbol conflicts. Symbol prefixing requires the most +recent stable version of [Go](https://go.dev/). In order to build with prefixed symbols, the `BORINGSSL_PREFIX` CMake variable should specify the prefix to add to all symbols, and the @@ -195,6 +188,16 @@ # Running Tests +There are two additional dependencies for running tests: + + * The most recent stable version of [Go](https://go.dev/) is required. + Note Go is exempt from the five year support window. If not found by CMake, + the go executable may be configured explicitly by setting `GO_EXECUTABLE`. + + * On x86_64 Linux, the tests have an optional + [libunwind](https://www.nongnu.org/libunwind/) dependency to test the + assembly more thoroughly. + There are two sets of tests: the C/C++ tests and the blackbox tests. For former are built by Ninja and can be run from the top-level directory with `go run util/all_tests.go`. The latter have to be run separately by running `go test`
diff --git a/CMakeLists.txt b/CMakeLists.txt index 869dfac..39352d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -59,6 +59,7 @@ endforeach() if(BORINGSSL_PREFIX AND BORINGSSL_PREFIX_SYMBOLS) + require_go() add_definitions(-DBORINGSSL_PREFIX=${BORINGSSL_PREFIX}) # CMake automatically connects include_directories to the NASM command-line, # but not add_definitions. @@ -309,6 +310,7 @@ endif() if(FIPS) + require_go() add_definitions(-DBORINGSSL_FIPS) if(FIPS_BREAK_TEST) add_definitions("-DBORINGSSL_FIPS_BREAK_${FIPS_BREAK_TEST}=1") @@ -726,22 +728,29 @@ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS util/go_tests.txt) -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) +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() if(INSTALL_ENABLED) # CMake versions before 3.14 do not have default destination values. Executable
diff --git a/cmake/go.cmake b/cmake/go.cmake index 51ecb45..76fcfeb 100644 --- a/cmake/go.cmake +++ b/cmake/go.cmake
@@ -1,9 +1,15 @@ +# Go is an optional dependency. It's a necessary dependency if running tests or +# the FIPS build, which will check these. find_program(GO_EXECUTABLE go) -if(NOT GO_EXECUTABLE) - message(FATAL_ERROR "Could not find Go") -endif() + +function(require_go) + if(NOT GO_EXECUTABLE) + message(FATAL_ERROR "Could not find Go") + endif() +endfunction() function(go_executable dest package) + require_go() set(godeps "${PROJECT_SOURCE_DIR}/util/godeps.go") if(NOT CMAKE_GENERATOR STREQUAL "Ninja") # The DEPFILE parameter to add_custom_command only works with Ninja. Query