Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сборка проекта stm через cmake
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
zemlemer
Добрый день. Есть проект, который собирается и работает из под eclips-а. Так как смог осилить заливку через dfu-util, хотелось бы попытаться избавиться от eclipse и перевести разработку на cmake. Написал файл тулчейна, и проекта. При сборке cmake по команде cmake -DCMAKE_TOOLCHAIN_FILE=~/Projects/Sampler/stm32.cmake -G "Unix Makefiles" говорит:
Код
-- The C compiler identification is GNU 4.5.2
-- The CXX compiler identification is GNU 4.5.2
-- Check for working C compiler: /opt/codesourcery/arm-2011.03/bin/arm-none-eabi-gcc
-- Check for working C compiler: /opt/codesourcery/arm-2011.03/bin/arm-none-eabi-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /opt/codesourcery/arm-2011.03/bin/arm-none-eabi-g++
-- Check for working CXX compiler: /opt/codesourcery/arm-2011.03/bin/arm-none-eabi-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- The ASM compiler identification is GNU
-- Found assembler: /opt/codesourcery/arm-2011.03/bin/arm-none-eabi-as
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxxx/Projects/Sampler


Далее по команде make идет идет компиляция всех исходников, кроме, почему-то ассемблерного файла с векторами, хотя он в целях указан. Далее следует ошибка линкера:
Код
/opt/codesourcery/arm-2011.03/bin/../lib/gcc/arm-none-eabi/4.5.2/../../../../arm-none-eabi/bin/ld: cannot open linker script file -nostartfiles: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [Sampler.elf] Error 1
make[1]: *** [CMakeFiles/Sampler.elf.dir/all] Error 2
make: *** [all] Error 2


Отсюда 3 вопроса:
1. Как заставить cmake брать arm-none-eabi-ld вместо ld из другой директории (хотя, судя по всему, файлы одинаковые).
2. Почему не хочет браться ассмеблерный файл с векторами?
3. Как его попытаться уговорить собраться?
mdmitry
Цитата(zemlemer @ Apr 16 2013, 17:22) *
[code]/opt/codesourcery/arm-2011.03/bin/../lib/gcc/arm-none-eabi/4.5.2/../../../../arm-none-eabi/bin/ld: cannot open linker script file -nostartfiles: No such file or directory

Судя по сообщению не правильно сгенерированы опции для линкера.
К сожалению Вы не приложили сгенерированный makefile. Попробуйте запустить make c опцией -n и посмотрите вывод на предмет правильности ключей для компилятора, линкера и ассемблера. Ассемблировать можно и с помощью gcc (g++), задав необходимые ключи.
zemlemer
Цитата(mdmitry @ Apr 16 2013, 18:05) *
Судя по сообщению не правильно сгенерированы опции для линкера.
К сожалению Вы не приложили сгенерированный makefile. Попробуйте запустить make c опцией -n и посмотрите вывод на предмет правильности ключей для компилятора, линкера и ассемблера. Ассемблировать можно и с помощью gcc (g++), задав необходимые ключи.


Опции для линкера прописаны в файле тулчейна и проекта. Утилита cmake генерит множество неудобочитаемых make файлов.
wПри проходе make -n вызывается странное: /usr/bin/cmake -E cmake_link_script CMakeFiles/Sampler.elf.dir/link.txt --verbose= содержимое которого вызов gcc с ключами компиляции линекра и перечислением всех сгенерированных объектников, кроме ассемблерного файла с векторами. К сожалению, вопрос остается открытым. Спасибо.
mdmitry
Цитата(zemlemer @ Apr 16 2013, 18:48) *
Опции для линкера прописаны в файле тулчейна и проекта. Утилита cmake генерит множество неудобочитаемых make файлов.
wПри проходе make -n вызывается странное: /usr/bin/cmake -E cmake_link_script CMakeFiles/Sampler.elf.dir/link.txt --verbose= содержимое которого вызов gcc с ключами компиляции линекра и перечислением всех сгенерированных объектников, кроме ассемблерного файла с векторами. К сожалению, вопрос остается открытым. Спасибо.

make файлы автоматически сгенерированные понять можно, в них обычно нет неявных правил с шаблонами.
насколько я помню, cmake генерирует файл для запуска make, а в него включены сгенерированные файлы.
А ключи линкера правильные?

На форуме есть пользователь с ником SyncLair, он использует cmake и имеет разработку для ARM (ссылка). Гляньте, может пригодится его конфигурация.
SyncLair
Цитата(zemlemer @ Apr 16 2013, 17:22) *
Добрый день. Есть проект, который собирается и работает из под eclips-а. Так как смог осилить заливку через dfu-util, хотелось бы попытаться избавиться от eclipse и перевести разработку на cmake.

Отсюда 3 вопроса:
1. Как заставить cmake брать arm-none-eabi-ld вместо ld из другой директории (хотя, судя по всему, файлы одинаковые).
2. Почему не хочет браться ассмеблерный файл с векторами?
3. Как его попытаться уговорить собраться?


1. Судя по всему у вас проблемы с ld-файлом (попробуйте другой)

2. Чтобы собирался ассмеблерный файл с векторами нужно чтобы в проекте был включён язык Ассемблера или для библиотеки входящей в проект включён язык ассемблера и расширение у него должно быть то ли *.s то ли *.S


занимаюсь сборкой проекта для NXP c CMAKE-ом -- веду свой проекта на sourceforge.com

пробывал также создать поддержку АVR и STM -- вроде работает -- давайте спишемся по почте пока ваш проект нет времени посмотреть

Для STM получаются сложные CMAKE -файлы тем не менее у меня получалось собирать проект
с исполтзованием кода от STM
zemlemer
Цитата(SyncLair @ Apr 16 2013, 19:15) *
1. Судя по всему у вас проблемы с ld-файлом (попробуйте другой)

2. Чтобы собирался ассмеблерный файл с векторами нужно чтобы в проекте был включён язык Ассемблера или для библиотеки входящей в проект включён язык ассемблера и расширение у него должно быть то ли *.s то ли *.S


занимаюсь сборкой проекта для NXP c CMAKE-ом -- веду свой проекта на sourceforge.com

пробывал также создать поддержку АVR и STM -- вроде работает -- давайте спишемся по почте пока ваш проект нет времени посмотреть

Для STM получаются сложные CMAKE -файлы тем не менее у меня получалось собирать проект
с исполтзованием кода от STM


Я пытался переключить линекер директивой SET(CMAKE_C_LINK_EXECUTABLE ${TOOLCHAIN_BIN_DIR}/arm-none-eabi-ld CACHE INTERNAL "").
Полный развал cmake: перестает находить компилятор. А со строчкой SET(CMAKE_LINKER ${TOOLCHAIN_BIN_DIR}/arm-none-eabi-ld CACHE INTERNAL "") - ситуация не изменяется.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.