Добавление поддержки новому поставщику компилятора в CMake (кросс-компиляция) - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу кросс-компилировать встроенное приложение, используя Tasking TriCore toolchain и CMake (3.16 в порядке).

Я начал с полного файла toolchain, где все пути к двоичным файлам и правилам были указаны, но затем я прочитал этот поток и использовал сценарии Compiler/IAR* в качестве примера (https://github.com/Kitware/CMake/blob/master/Modules/Compiler), чтобы закончить с более чистым способом.

Я знаю, что по умолчанию в проектах C / CXX CMake пытается скомпилировать простую тестовую программу CMakeCCompilerId.c для определения поставщика и версии идентификатора компилятора. С IAR-DetermineCompiler.cmake я создал свой собственный Tasking-DetermineCompiler.cmake, в котором использовались бы символы, определенные компилятором ct c. Но даже если этот файл выполняется CMake (там обнаружены синтаксические ошибки), он не оказывает никакого влияния на сгенерированный исходный тестовый файл.

Это означает, что механизм по умолчанию для идентификации компилятора не работает для моего компилятора и я получаю сообщение «Идентификатор C неизвестен». В моем файле набора инструментов мне нужно заставить идентификацию:

set(CMAKE_SYSTEM_NAME Generic)
# will load Platform/Generic.cmake under CMAKE_MODULE_PATH

# Normalize, convert Windows backslashes to forward slashes or CMake will crash
get_filename_component(TASKING_ROOT_PATH "$ENV{TASKING_TRICORE_PATH}" ABSOLUTE)

# Specify the compiler
# will load Platform/Generic-ctc.cmake CMAKE_MODULE_PATH
foreach (_prefix C CXX)
    if ("${CMAKE_${_prefix}_COMPILER}" STREQUAL "")
        set(CMAKE_${_prefix}_COMPILER "${TASKING_ROOT_PATH}/bin/cctc.exe")
    endif()
  # This is used only if we skip auto compiler identification
  set(CMAKE_${_prefix}_COMPILER_ID "Tasking")
  set(CMAKE_${_prefix}_COMPILER_VERSION "6.3.1r1")
  # Skip compiler ID identification: use "Tasking"
  set(CMAKE_${_prefix}_COMPILER_ID_RUN TRUE)
  set(CMAKE_${_prefix}_COMPILER_FORCED TRUE)
endforeach()

# will load Compiler/Tasking.cmake under CMAKE_MODULE_PATH
# and Compiler/Tasking-FindBinUtils.cmake as well

Пока что это работает , но я хотел бы понять, возможно ли использовать способ CMake по умолчанию для идентификации идентификатора и версии компилятора. Я не смог найти как добавить других поставщиков в документацию!

Большое спасибо

...