Используя CMake, сделайте и активируйте-none-eabi-gcc в WindowsC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Используя CMake, сделайте и активируйте-none-eabi-gcc в Windows

Сообщение Гость »


Я являюсь частью команды, которая разрабатывает приложения для микроконтроллеров ARM. Цель, как вы могли догадаться по заголовку поста, — «голое железо», мы используем STM32CubeIDE, который собирает проекты как на Windows, так и на Linux, но мы пытаемся Чтобы отказаться от программного обеспечения, предоставленного поставщиком, с помощью VsCode и сценариев сборки, в Linux мне удалось создать сценарий, который выполняет сборку с использованием CMake, make и набора инструментов, предоставленного ARM, с дополнением к файлу nosys.specs. скрипт:

def build(self): пытаться: os.madeirs(self.repo_root + "/build/" + self.output_dir) кроме FileExistsError: проходить вывод = self.repo_root + "/build/" + self.output_dir stlib = subprocess.call(["/opt/ST-LIB/tools/build.py", "-bb", self.buildconfig, "-t", self.target, "-eth",self.ethernet]) если stlib != 0: поднять исключение («Сборка STLIB не удалась») если self.buildconfig == "Выпустить": если self.target == "ДОСКА": subprocess.call(["cmake", self.repo_root, "-B", вывод, "-DRELEASE=TRUE","-DNUCLEO=FALSE"]) еще: subprocess.call(["cmake", self.repo_root, "-B", вывод, "-DRELEASE=TRUE","-DNUCLEO=TRUE"]) еще: если self.target == "ДОСКА": subprocess.call(["cmake", self.repo_root, "-B", вывод, "-DRELEASE=FALSE", "-DNUCLEO=FALSE"]) еще: subprocess.call(["cmake", self.repo_root, "-B", вывод, "-DRELEASE=FALSE", "-DNUCLEO=TRUE"]) потоки = os.cpu_count() print( Fore.BLUE + "\n\nВызов make с {} потоками\n\n".format(threads)) retval = subprocess.call(["make","-j",str(threads),"-C", вывод]) если ретвал != 0: print(Fore.RED + «Произошли ошибки\n») поднять исключение («ошибка при вызове make») print(Fore.GREEN + "\nСборка успешно завершена!!\n" + Fore.YELLOW) пытаться: os.madeirs(self.repo_root + "/build/" + self.output_dir + "/bin") кроме FileExistsError: проходить elf_ori = self.repo_root + "/build/" + self.output_dir + "/" + self.find_file(self.repo_root + "/build/" + self.output_dir) elf_dir = self.repo_root + "/build/" + self.output_dir + "/bin" subprocess.call(["mv",elf_ori,elf_dir]) CMakeLists.txt

cmake_minimum_required (ВЕРСИЯ 3.4) включить (arm-none-eabi.cmake) проект (шаблон-проект ASM C CXX) установить (CMAKE_CXX_STANDARD 20) установить (CMAKE_CXX_STANDARD_REQUIRED True) установить (CMAKE_EXPORT_COMPILE_COMMANDS ON) set(ИСПОЛНИТЕЛЬНЫЙ ТАБЛИЦ ${PROJECT_NAME}.elf) файл (GLOB_RECURSE SOURCE_C ${CMAKE_SOURCE_DIR}/Core/*.c ${CMAKE_SOURCE_DIR}/Drivers/*.c ${CMAKE_SOURCE_DIR}/Middlewares/*.c ${CMAKE_SOURCE_DIR}/LWIP/*.c) файл (GLOB_RECURSE SOURCE_CPP ${CMAKE_SOURCE_DIR}/Core/*.cpp ${CMAKE_SOURCE_DIR}/Drivers/*.cpp ${CMAKE_SOURCE_DIR}/Middlewares/*.cpp ${CMAKE_SOURCE_DIR}/LWIP/*.cpp) файл (GLOB_RECURSE SOURCE_H ${CMAKE_SOURCE_DIR}/Core/*.h ${CMAKE_SOURCE_DIR}/Drivers/*.h ${CMAKE_SOURCE_DIR}/Middlewares/*.h ${CMAKE_SOURCE_DIR}/LWIP/*.h) файл (GLOB_RECURSE SOURCE_HPP ${CMAKE_SOURCE_DIR}/Core/*.hpp ${CMAKE_SOURCE_DIR}/Drivers/*.hpp ${CMAKE_SOURCE_DIR}/Middlewares/*.hpp ${CMAKE_SOURCE_DIR}/LWIP/*.hpp) set(STLIB_DIR "/opt/ST-LIB") если(${NUCLEO}) add_definitions(-DNUCLEO) add_definitions(-DHSE_VALUE=8000000) еще() add_definitions(-DBOARD) add_definitions(-DHSE_VALUE=25000000) конециф() если(${РЕЛИЗ}) установить(ОПТИМИЗАЦИЯ -O3) установить (DEBUG_CONFIGURATION -g0) set(STLIB_LIBRARY ${STLIB_DIR}/build/Release/lib) еще() установить(ОПТИМИЗАЦИЯ -O0) установить (DEBUG_CONFIGURATION -g3) set(STLIB_LIBRARY ${STLIB_DIR}/build/Debug/lib) конециф() add_executable(${ИСПОЛНИТЕЛЬНЫЙ} ${SOURCE_C} ${SOURCE_CPP} ${SOURCE_H} ${SOURCE_HPP} Ядро/Запуск/startup_stm32h723zgtx.s ) target_link_libraries(${EXECUTABLE} PUBLIC ${STLIB_LIBRARY}/libst-lib.a) target_compile_definitions(${EXECUTABLE} ПУБЛИЧНЫЙ -DUSE_HAL_DRIVER -DSTM32H723xx -DDATA_IN_D2_SRAM ) сообщение("\n\nCMAKE:\n") message(STATUS "[DEBUG, RELEASE]: RELEASE: " ${RELEASE}) message(STATUS "Значение оптимизации: " ${OPTIMIZATION}) message(STATUS "Значение конфигурации отладки: " ${DEBUG_CONFIGURATION}) message(STATUS "[BOARD, NUCLEO] Конфигурация: NUCLEO: " ${NUCLEO}) target_compile_options(${EXECUTABLE} ПУБЛИЧНЫЙ -mcpu=кора-m7 -mfpu=fpv5-d16 -mfloat-abi=жесткий -мпалец ${ОПТИМИЗАЦИЯ} ${DEBUG_CONFIGURATION} -ffunction-разделы -fdata-разделы -fno-исключения $ $ -Стена -specs=/usr/lib/arm-none-eabi/lib/nosys.specs ) target_include_directories(${EXECUTABLE} ПУБЛИЧНЫЙ ## включает ) target_link_options(${EXECUTABLE} ПУБЛИЧНЫЙ -T${CMAKE_SOURCE_DIR}/STM32H723ZGTX_FLASH.ld -mcpu=кора-m7 -мпалец -mfpu=fpv5-d16 -mfloat-abi=жесткий -specs=nosys.specs -lc -лм -lnosys -Wl,-Map=${PROJECT_NAME}.map,--cref -Wl,--gc-разделы ) Наконец, Arm-none-eabi.cmake

set(CMAKE_SYSTEM_NAME Generic) установить (CMAKE_SYSTEM_PROCESSOR ARM) если (MINGW ИЛИ CYGWIN ИЛИ WIN32) установить (UTIL_SEARCH_CMD где) elseif(UNIX ИЛИ APPLE) установить (UTIL_SEARCH_CMD который) конециф() set(TOOLCHAIN_PREFIX рука-нет-еаби-) set(ASM_OPTIONS "-x ассемблер-с-cpp") set(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}") выполнить_процесс( КОМАНДА ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc OUTPUT_VARIABLE BINUTILS_PATH OUTPUT_STRIP_TRAILING_WHITESPACE ) установить (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) установить (CMAKE_ASM_COMPILER $ {CMAKE_C_COMPILER}) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) get_filename_comComponent (ARM_TOOLCHAIN_DIR ${BINUTILS_PATH} КАТАЛОГ) установить (CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) set(CMAKE_OBJCOPY ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy CACHE INTERNAL "инструмент objcopy") set(CMAKE_SIZE_UTIL ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size CACHE INTERNAL "инструмент размера") установить (CMAKE_FIND_ROOT_PATH $ {BINUTILS_PATH}) установить (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM НИКОГДА) установить (ТОЛЬКО CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) установить (ТОЛЬКО CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) Процесс сборки хорошо работает в нескольких дистрибутивах Linux, Ubuntu, Arch, и мне интересно узнать, возможно ли это в Windows

Я знаю, что такие утилиты, как make, зависят от ОС, и теоретически компилятор gcc также зависит от ОС, поэтому в Windows есть MinGW или для приложений, ориентированных на x86_64 MSVC, но сам по себе есть компилятор, доступный в Windows для ARM сайт: https://developer.arm.com/downloads/-/a ... -downloads

Может быть, проверка CMakeLists.txt текущей ОС позволит использовать make через cygwin в Windows и использовать «обычный» make в Linux?

Просто болтаю здесь.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ПРЕДУПРЕЖДЕНИЕ Python: повторение (повторный (total = 4, connect = none, read = none, redirect = none, nate = none))
    Anonymous » » в форуме Python
    0 Ответы
    73 Просмотры
    Последнее сообщение Anonymous
  • Android Terminal-Ide: Terminal-GCC Ошибка: ARM-EABI-GCC не найден
    Гость » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Гость
  • Исключить стандартные библиотеки из Arm-None-Eabi
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Инициализировать список GCOV с использованием Python и GDB на ARM-None-EABI 4.9.3 [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Установите gcc из исходного кода: bash: gcc -v /usr/bin/gcc: это каталог
    Гость » » в форуме C++
    0 Ответы
    152 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»