From 1ac1fef14ed56b7bb548253e12962e2a9a82da74 Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Thu, 27 Aug 2020 09:59:24 +0200 Subject: [PATCH 1/4] cmake: Rephrase message about git absence during source hash computing This message shoulddn't be in imperative mode, to follow rules. Signed-off-by: Karol Trzcinski --- scripts/cmake/version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cmake/version.cmake b/scripts/cmake/version.cmake index e0a22a51266e..102195a30c89 100644 --- a/scripts/cmake/version.cmake +++ b/scripts/cmake/version.cmake @@ -84,7 +84,7 @@ if(EXISTS ${CMAKE_SOURCE_DIR}/.git/) message(STATUS "Source content hash: ${SOF_SRC_HASH}") else() string(SUBSTRING ${GIT_LOG_HASH} 0 8 SOF_SRC_HASH) - message(WARNING "Source content hash can't be calculated, use GIT_LOG_HASH") + message(WARNING "Source content hash not computed without git, using GIT_LOG_HASH instead") endif() # for SOF_BUILD From f1c45a0ff3e8e3b9dc97ee0ecb6eaf824ddebadb Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Thu, 27 Aug 2020 10:16:54 +0200 Subject: [PATCH 2/4] cmake: Look for .git folder in SOF_ROOT_SOURCE_DIRECTORY directory This is possible location of .git folder, instead of CMAKE_SOURCE_DIR. Without this patch, checked condition always return false and GIT_LOG_HASH is used instead source code hash. Signed-off-by: Karol Trzcinski --- scripts/cmake/version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cmake/version.cmake b/scripts/cmake/version.cmake index 102195a30c89..9e5d8c7fe1b9 100644 --- a/scripts/cmake/version.cmake +++ b/scripts/cmake/version.cmake @@ -60,7 +60,7 @@ if(NOT SOF_TAG) endif() # Calculate source hash value, used to check ldc file and firmware compatibility -if(EXISTS ${CMAKE_SOURCE_DIR}/.git/) +if(EXISTS ${SOF_ROOT_SOURCE_DIRECTORY}/.git/) # list tracked files from src directory execute_process(COMMAND git ls-files src WORKING_DIRECTORY ${SOF_ROOT_SOURCE_DIRECTORY} From 616bcb98c47f67fdcfbc10221d45bf456c8f9d54 Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Thu, 27 Aug 2020 11:55:13 +0200 Subject: [PATCH 3/4] cmake: Keep temporary files used to compute source hash Temporary files are useful to understand and debug the build. Moving output to another directory, keeps binary directory clean. Signed-off-by: Karol Trzcinski --- scripts/cmake/version.cmake | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/cmake/version.cmake b/scripts/cmake/version.cmake index 9e5d8c7fe1b9..2f3cd63c951c 100644 --- a/scripts/cmake/version.cmake +++ b/scripts/cmake/version.cmake @@ -61,25 +61,26 @@ endif() # Calculate source hash value, used to check ldc file and firmware compatibility if(EXISTS ${SOF_ROOT_SOURCE_DIRECTORY}/.git/) + set(SOURCE_HASH_DIR "${SOF_ROOT_BINARY_DIRECTORY}/source_hash") + file(MAKE_DIRECTORY ${SOURCE_HASH_DIR}) # list tracked files from src directory execute_process(COMMAND git ls-files src WORKING_DIRECTORY ${SOF_ROOT_SOURCE_DIRECTORY} - OUTPUT_FILE tracked_file_list + OUTPUT_FILE "${SOURCE_HASH_DIR}/tracked_file_list" ) # calculate hash of each listed files (from file version saved in file system) execute_process(COMMAND git hash-object --stdin-paths WORKING_DIRECTORY ${SOF_ROOT_SOURCE_DIRECTORY} - INPUT_FILE tracked_file_list - OUTPUT_FILE tracked_file_hash_list + INPUT_FILE "${SOURCE_HASH_DIR}/tracked_file_list" + OUTPUT_FILE "${SOURCE_HASH_DIR}/tracked_file_hash_list" ) # then calculate single hash of previously calculated hash list execute_process(COMMAND git hash-object --stdin WORKING_DIRECTORY ${SOF_ROOT_SOURCE_DIRECTORY} OUTPUT_STRIP_TRAILING_WHITESPACE - INPUT_FILE tracked_file_hash_list + INPUT_FILE "${SOURCE_HASH_DIR}/tracked_file_hash_list" OUTPUT_VARIABLE SOF_SRC_HASH_LONG ) - file(REMOVE tracked_file_list tracked_file_hash_list) string(SUBSTRING ${SOF_SRC_HASH_LONG} 0 8 SOF_SRC_HASH) message(STATUS "Source content hash: ${SOF_SRC_HASH}") else() From ea9fe6509a04e085899d8f14cf41fbb32af518c7 Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Mon, 31 Aug 2020 10:44:43 +0200 Subject: [PATCH 4/4] cmake: Handle empty SOF_SRC_HASH_LONG SOF_SRC_HASH always must have integer value, because of usage them to initialize global variable in source code. Variables, which may be empty should be used inside quotation to prevent cmake incorect number of arguments error. Signed-off-by: Karol Trzcinski --- scripts/cmake/version.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/cmake/version.cmake b/scripts/cmake/version.cmake index 2f3cd63c951c..9d234963fc7d 100644 --- a/scripts/cmake/version.cmake +++ b/scripts/cmake/version.cmake @@ -84,7 +84,11 @@ if(EXISTS ${SOF_ROOT_SOURCE_DIRECTORY}/.git/) string(SUBSTRING ${SOF_SRC_HASH_LONG} 0 8 SOF_SRC_HASH) message(STATUS "Source content hash: ${SOF_SRC_HASH}") else() - string(SUBSTRING ${GIT_LOG_HASH} 0 8 SOF_SRC_HASH) + if("${GIT_LOG_HASH}") + string(SUBSTRING "${GIT_LOG_HASH}" 0 8 SOF_SRC_HASH) + else() + set(SOF_SRC_HASH "0") + endif() message(WARNING "Source content hash not computed without git, using GIT_LOG_HASH instead") endif()