Skip to content

Instantly share code, notes, and snippets.

@oclero
Created October 27, 2021 07:53
Show Gist options
  • Save oclero/1d85b0259936bcca63e0e3d7ecc8cb45 to your computer and use it in GitHub Desktop.
Save oclero/1d85b0259936bcca63e0e3d7ecc8cb45 to your computer and use it in GitHub Desktop.
CMake utilities
# Get the whole directory content size (in bytes). Recursively adds all the files sizes.
function(get_directory_content_size DIR OUTPUT)
message("Getting size of: ${DIR}")
file(GLOB_RECURSE DIR_FILES "${DIR}/*.*")
set(TOTAL_SIZE 0)
set(TOTAL_COUNT 0)
foreach(DIR_FILE ${DIR_FILES})
file(SIZE ${DIR_FILE} DIR_FILE_SIZE)
math(EXPR TOTAL_COUNT "${TOTAL_COUNT}+1")
math(EXPR TOTAL_SIZE "${TOTAL_SIZE}+${DIR_FILE_SIZE}")
endforeach()
message("Found ${TOTAL_COUNT} file(s) of total size ${TOTAL_SIZE}B")
set(${OUTPUT} ${TOTAL_SIZE} PARENT_SCOPE)
endfunction()
# Transforms a decimal number to hex form (0x00000000).
function(decimal_to_hex DEC OUTPUT)
while(DEC GREATER 0)
math(EXPR REMAINDER "${DEC} % 16")
math(EXPR DEC "${DEC} / 16")
if(REMAINDER EQUAL 10)
set(REMAINDER "a")
elseif(REMAINDER EQUAL 11)
set(REMAINDER "b")
elseif(REMAINDER EQUAL 12)
set(REMAINDER "c")
elseif(REMAINDER EQUAL 13)
set(REMAINDER "d")
elseif(REMAINDER EQUAL 14)
set(REMAINDER "e")
elseif(REMAINDER EQUAL 15)
set(REMAINDER "f")
endif()
set(HEX "${REMAINDER}${HEX}")
endwhile()
set(${OUTPUT} "0x${HEX}" PARENT_SCOPE)
endfunction()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment