Встроенная поддержка:
CMake не поддерживает IAR для чего-либо, кроме архитектур, перечисленных в IAR-C.cmake
, если вы хотите использовать CMake для чего-то другого, вам нужно будет отправить сообщение о проблеме на страницу gitlab CMake. Я не уверен, захочет ли кто-либо из разработчиков CMake основной линии добавить время для поддержки C51, так что это может не произойти, если вы не захотите сделать это самостоятельно.
Судя по вашему сообщению об ошибке, вы, вероятно, используете "старую" версию cmake. Последняя версия, над которой я работал, была 3.14, и в то время она поддерживала только AVR и ARM с IAR. Похоже, что последняя версия IAR-C.cmake
поддерживает несколько других архитектур. Сообщение об ошибке (если вы посмотрите внизу файла, на который вы ссылаетесь) должно быть
CMAKE_C_COMPILER_ARCHITECTURE_ID not detected. This should be automatic.
Более новый код модуля IAR находится в CMake 3.15.0, поэтому вы должны получить последнюю версию с веб-сайта CMake.
Добавление поддержки:
Я внес некоторые изменения в модуль IAR-CXX.cmake
для лучшей поддержки AVR, но, на мой взгляд, он все еще экспериментален. Проблема заключается в том, что двоичные файлы, создаваемые IAR-AVR, имеют трудный для анализа собственный формат , компилятор не поддерживает определенный стандарт C ++ (он использует внедренный c ++ ), а параметры командной строки не легко отображаются на значения по умолчанию для cmake.
У меня нет компилятора IAR 8051, но я перечислю то, что я считаю основными изменениями, которые необходимо внести. поскольку все это находится в *.cmake
файлах в папке модуля, вам не нужно будет перекомпилировать cmake , он просто изменит вашу существующую установку. Конечно, если вы работаете, вы должны отправить запрос на включение и отправить его в mainline cmake!
вам потребуется: руководство по компилятору IAR 8051 и редактирование следующих файлов в вашей установке CMake относительно C:\Program Files\CMake\share
:
- CMake-3.15.0 \ Modules \ Compiler \ IAR-DetermineCompiler.cmake
- CMake-3.15.0 \ Modules \ CMakePlatformId.h.in
- CMake-3.15.0 \ Modules \ Compiler \ IAR-C.cmake
CMake-3.15.0 \ Modules \ Compiler \ IAR-DetermineCompiler.cmake
этот файл определяет некоторые шаблоны макросов, которые скомпилированы в простой файл C. Затем CMake выгружает строки из созданного объектного файла, чтобы прочитать эти макросы и найти информацию о компиляторе.
На странице 391 руководства по компилятору вы можете увидеть, как компилятор IAR 8051 определяет __IAR_SYSTEMS_ICC__
, __VER__
и __ICC8051__
. отличный! первые два уже обработаны, вам просто нужно добавить || defined(__ICC8051__)
в конец цепочки #elif
в строке 34.
CMake-3.15.0 \ Modules \ CMakePlatformId.h.in
этот файл является шаблоном, который является частью файла, который компилируется для теста конфигурации. начиная со строки 155 вы можете видеть все макросы компилятора IAR, которые были определены. Как раз перед # else /* unknown architecture */
в строке 173 вы должны добавить
# elif defined(__ICC8051__)
# define ARCHITECTURE_ID "8051"
CMake-3.15.0 \ Modules \ Compiler \ IAR-C.cmake
компилятору C51 потребуется еще один elseif
в IAR-C.cmake, например:
# CMAKE_C_COMPILER_ARCHITECTURE_ID should be 8051 because of our edit in the template file
elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "8051")
# pretty sure 8051 IAR uses xlink? (compiler guide page 42)
__compiler_iar_xlink(C)
# after `C` the format is compiler version followed by default C standard
# the compiler manual i found says the default version is C99, but I have no idea
# what the compiler version is. 10.2 is the latest...
__compiler_check_default_language_standard(C 10.2 99)
# set to output extension you need, or remove if you want an .elf
set(CMAKE_C_OUTPUT_EXTENSION ".r90")
Попробуйте снова настроить
На данный момент вы можете попробовать очистить кеш и перенастроить проект. Cmake будет использовать модули, которые мы только что изменили, и если вам повезет, это сработает. Я написал все это без доступа к компилятору, так что, надеюсь, вы отредактируете мой ответ с любыми дополнительными шагами, которые вам необходимо предпринять.
Дополнительные предложения
Добавьте строку set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
в файл набора инструментов. Это не позволяет компилятору теста cmake пытаться связать. Часто для работы встроенных компоновщиков нужны специальные скрипты, флаги и т. Д. Это приводит к сбою шага настройки с сообщением The C compiler ... is not able to compile a simple test program.
Также, если вам нужно установить некоторые флаги в наборе инструментов, чтобы компилятор работал на базовом уровне, обратитесь к этому ответу .