/ tools / cmake / crosstool_version_check.cmake
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()