-
Notifications
You must be signed in to change notification settings - Fork 115
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move Go CMake support into its own file.
Slowly reduce clutter in the top-level CMake file. Change-Id: Ib7ca2aee7337db82ed1989c56bbaaf6ee5da0768 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/56569 Reviewed-by: Bob Beck <[email protected]> Commit-Queue: David Benjamin <[email protected]> (cherry picked from commit 261ec612e21b81a4c16bbda615d0850556483b4f)
- Loading branch information
Showing
2 changed files
with
58 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
if(ANDROID) | ||
# Android-NDK CMake files reconfigure the path and so Go won't be found. | ||
# However, ninja will still find them in $PATH if we just name them. | ||
if(NOT DISABLE_GO AND NOT GO_EXECUTABLE) | ||
set(GO_EXECUTABLE "go") | ||
endif() | ||
else() | ||
if(NOT DISABLE_GO) | ||
find_program(GO_EXECUTABLE go) | ||
endif() | ||
endif() | ||
|
||
if(NOT GO_EXECUTABLE AND NOT DISABLE_GO) | ||
message(FATAL_ERROR "Could not find Go") | ||
endif() | ||
|
||
function(go_executable dest package) | ||
set(godeps "${CMAKE_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} ${CMAKE_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. | ||
string(LENGTH "${CMAKE_BINARY_DIR}" root_dir_length) | ||
math(EXPR root_dir_length "${root_dir_length} + 1") | ||
string(SUBSTRING "${CMAKE_CURRENT_BINARY_DIR}" ${root_dir_length} -1 target) | ||
set(target "${target}/${dest}") | ||
|
||
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} ${CMAKE_SOURCE_DIR}/go.mod | ||
DEPFILE ${depfile}) | ||
endif() | ||
endfunction() | ||
|