crosstool_version_check.cmake
1 # Function to check the toolchain used the expected version 2 # of crosstool, and warn otherwise 3 4 set(ctng_version_warning "Check Getting Started documentation or proceed at own risk.") 5 6 function(gcc_version_check expected_gcc_version) 7 if(NOT "${CMAKE_C_COMPILER_VERSION}" STREQUAL "${expected_gcc_version}") 8 message(WARNING "Xtensa toolchain ${CMAKE_C_COMPILER} version ${CMAKE_C_COMPILER_VERSION} " 9 "is not the supported version ${expected_gcc_version}. ${ctng_version_warning}") 10 endif() 11 endfunction() 12 13 function(crosstool_version_check expected_ctng_version) 14 execute_process( 15 COMMAND ${CMAKE_C_COMPILER} --version 16 OUTPUT_VARIABLE toolchain_version 17 ERROR_QUIET) 18 19 string(REGEX REPLACE ".*(crosstool-NG ([^\)]+)).*\n" "\\2" ctng_version "${toolchain_version}") 20 # We use FIND to match version instead of STREQUAL because some toolchains are built 21 # with longer git hash strings than others. This will match any version which starts with 22 # the expected version string. 23 string(FIND "${ctng_version}" "${expected_ctng_version}" found_expected_version) 24 if(NOT ctng_version) 25 message(WARNING "Xtensa toolchain ${CMAKE_C_COMPILER} does not appear to be built with crosstool-ng. " 26 "${ctng_version_warning}") 27 elseif(found_expected_version EQUAL -1) 28 message(WARNING "Xtensa toolchain ${CMAKE_C_COMPILER} crosstool-ng version ${ctng_version} " 29 "doesn't match supported version ${expected_ctng_version}. ${ctng_version_warning}") 30 endif() 31 endfunction() 32 33 function(get_expected_ctng_version _toolchain_ver _gcc_ver) 34 idf_build_get_property(idf_path IDF_PATH) 35 file(STRINGS ${idf_path}/tools/toolchain_versions.mk config_contents) 36 foreach(name_and_value ${config_contents}) 37 # Strip spaces 38 string(REPLACE " " "" name_and_value ${name_and_value}) 39 # Find variable name 40 string(REGEX MATCH "^[^=]+" name ${name_and_value}) 41 # Find the value 42 string(REPLACE "${name}=" "" value ${name_and_value}) 43 # Getting values 44 if("${name}" STREQUAL "SUPPORTED_TOOLCHAIN_COMMIT_DESC") 45 set("${_toolchain_ver}" "${value}" PARENT_SCOPE) 46 elseif("${name}" STREQUAL "SUPPORTED_TOOLCHAIN_GCC_VERSIONS") 47 set(${_gcc_ver} "${value}" PARENT_SCOPE) 48 endif() 49 endforeach() 50 endfunction()