Bump the minimum CMake version to 3.22
See https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md
Change-Id: Id465dbff5ccac66597c0d987ed6e7e80a54489f0
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/82067
Auto-Submit: David Benjamin <davidben@google.com>
Commit-Queue: Lily Chen <chlily@google.com>
Reviewed-by: Lily Chen <chlily@google.com>
diff --git a/BUILDING.md b/BUILDING.md
index 5915652..3e67e15 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -14,7 +14,7 @@
[Abseil guidelines](https://abseil.io/about/compatibility). If in doubt, use the
most recent stable version of each tool.
- * [CMake](https://cmake.org/download/) 3.12 or later is required.
+ * [CMake](https://cmake.org/download/) 3.22 or later is required.
* Building with [Ninja](https://ninja-build.org/) instead of Make is
recommended, because it makes builds faster. On Windows, CMake's Visual
@@ -74,8 +74,8 @@
### Building for Android
It's possible to build BoringSSL with the Android NDK using CMake. Recent
-versions of the NDK include a CMake toolchain file which works with CMake 3.6.0
-or later. This has been tested with version r16b of the NDK.
+versions of the NDK include a CMake toolchain file. This has been tested with
+version r16b of the NDK.
Unpack the Android NDK somewhere and export `ANDROID_NDK` to point to the
directory. Then run CMake like this:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c86687a..1e086c5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-cmake_minimum_required(VERSION 3.16)
+cmake_minimum_required(VERSION 3.22)
# Defer enabling C and CXX languages.
project(BoringSSL NONE)
@@ -43,11 +43,6 @@
set(INSTALL_ENABLED 1)
-if(CMAKE_VERSION VERSION_LESS 3.21 AND
- CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
- set(PROJECT_IS_TOP_LEVEL 1)
-endif()
-
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT CMAKE_CROSSCOMPILING AND
BUILD_TESTING)
find_package(PkgConfig QUIET)
@@ -384,16 +379,6 @@
if (NOT OPENSSL_NO_ASM)
set(OPENSSL_ASM TRUE)
endif()
- # Work around https://gitlab.kitware.com/cmake/cmake/-/issues/20771 in older
- # CMake versions.
- if(APPLE AND CMAKE_VERSION VERSION_LESS 3.19)
- if(CMAKE_OSX_SYSROOT)
- set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -isysroot \"${CMAKE_OSX_SYSROOT}\"")
- endif()
- foreach(arch ${CMAKE_OSX_ARCHITECTURES})
- set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch ${arch}")
- endforeach()
- endif()
if(NOT WIN32)
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack")
endif()
@@ -742,12 +727,8 @@
endif()
if(RUST_BINDINGS)
- find_program(BINDGEN_EXECUTABLE bindgen)
- if(NOT BINDGEN_EXECUTABLE)
- message(FATAL_ERROR "Could not find bindgen but was asked to generate Rust bindings.")
- else()
- add_subdirectory(rust)
- endif()
+ find_program(BINDGEN_EXECUTABLE bindgen REQUIRED)
+ add_subdirectory(rust)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
diff --git a/cmake/go.cmake b/cmake/go.cmake
index 9b2f411..13d21a5 100644
--- a/cmake/go.cmake
+++ b/cmake/go.cmake
@@ -25,37 +25,19 @@
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
- # the sources at configure time. Additionally, everything depends on go.mod.
- # That affects what external packages to use.
- #
- # TODO(davidben): Starting CMake 3.20, it also works with Make. Starting
- # 3.21, it works with Visual Studio and Xcode too.
- execute_process(COMMAND ${GO_EXECUTABLE} run ${godeps} -format cmake
- -pkg ${package}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- OUTPUT_VARIABLE sources
- RESULT_VARIABLE godeps_result)
- add_custom_command(OUTPUT ${dest}
- COMMAND ${GO_EXECUTABLE} build
- -o ${CMAKE_CURRENT_BINARY_DIR}/${dest} ${package}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS ${sources} ${PROJECT_SOURCE_DIR}/go.mod)
- else()
- # Ninja expects the target in the depfile to match the output. This is a
- # relative path from the build directory.
- binary_dir_relative_path(${dest} target)
+ # Ninja expects the target in the depfile to match the output. This is a
+ # relative path from the build directory.
+ set(target "${CMAKE_CURRENT_BINARY_DIR}/${dest}")
+ cmake_path(RELATIVE_PATH target BASE_DIRECTORY "${CMAKE_BINARY_DIR}")
- set(depfile "${CMAKE_CURRENT_BINARY_DIR}/${dest}.d")
- add_custom_command(OUTPUT ${dest}
- COMMAND ${GO_EXECUTABLE} build
- -o ${CMAKE_CURRENT_BINARY_DIR}/${dest} ${package}
- COMMAND ${GO_EXECUTABLE} run ${godeps} -format depfile
- -target ${target} -pkg ${package} -out ${depfile}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS ${godeps} ${PROJECT_SOURCE_DIR}/go.mod
- DEPFILE ${depfile})
- endif()
+ set(depfile "${CMAKE_CURRENT_BINARY_DIR}/${dest}.d")
+ add_custom_command(OUTPUT ${dest}
+ COMMAND ${GO_EXECUTABLE} build
+ -o ${CMAKE_CURRENT_BINARY_DIR}/${dest} ${package}
+ COMMAND ${GO_EXECUTABLE} run ${godeps} -format depfile
+ -target ${target} -pkg ${package} -out ${depfile}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS ${godeps} ${PROJECT_SOURCE_DIR}/go.mod
+ DEPFILE ${depfile})
endfunction()
diff --git a/cmake/paths.cmake b/cmake/paths.cmake
index 625b188..c6285f9 100644
--- a/cmake/paths.cmake
+++ b/cmake/paths.cmake
@@ -12,18 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# binary_dir_relative_path sets outvar to
-# ${CMAKE_CURRENT_BINARY_DIR}/${cur_bin_dir_relative}, but expressed relative to
-# ${CMAKE_BINARY_DIR}.
-#
-# TODO(davidben): When we require CMake 3.20 or later, this can be replaced with
-# the built-in cmake_path(RELATIVE_PATH) function.
-function(binary_dir_relative_path cur_bin_dir_relative outvar)
- string(LENGTH "${CMAKE_BINARY_DIR}/" root_dir_length)
- string(SUBSTRING "${CMAKE_CURRENT_BINARY_DIR}/${cur_bin_dir_relative}" ${root_dir_length} -1 result)
- set(${outvar} ${result} PARENT_SCOPE)
-endfunction()
-
# copy_post_build causes targets in ${ARGN} to be copied to
# ${CMAKE_CURRENT_BINARY_DIR}/${dir} after being built.
function(copy_post_build dir)
diff --git a/rust/bssl-sys/CMakeLists.txt b/rust/bssl-sys/CMakeLists.txt
index a5ca2c3..c5ea315 100644
--- a/rust/bssl-sys/CMakeLists.txt
+++ b/rust/bssl-sys/CMakeLists.txt
@@ -3,8 +3,10 @@
# the depfile using the same syntax as the command-line argument, and ninja
# requires a path relative to the top-level build directory.
set(wrapper_rs wrapper_${RUST_BINDINGS}.rs)
-binary_dir_relative_path(${wrapper_rs} wrapper_rs_relative)
-binary_dir_relative_path(${wrapper_rs}.d depfile_relative)
+set(wrapper_rs_relative "${CMAKE_CURRENT_BINARY_DIR}/${wrapper_rs}")
+set(depfile_relative "${CMAKE_CURRENT_BINARY_DIR}/${wrapper_rs}.d")
+cmake_path(RELATIVE_PATH wrapper_rs_relative BASE_DIRECTORY "${CMAKE_BINARY_DIR}")
+cmake_path(RELATIVE_PATH depfile_relative BASE_DIRECTORY "${CMAKE_BINARY_DIR}")
add_custom_command(
OUTPUT ${wrapper_rs} wrapper.c