реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Определение версии LIBC в makefile, avr-libc
demiurg_spb
сообщение Dec 5 2016, 11:02
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Подскажите пожалуйста, как можно наиболее просто определить версию avr-libc в makefile, чтобы цеплять правильные библиотеки.
Единственное место где я смог откопать версию - это файл version.h из самой avr-libc.
В нём есть такая строчка:
Код
#define __AVR_LIBC_VERSION__        20000UL

Никаких более подобных предопределённых символов я нигде не нашёл.
Парсить version.h не очень хочется, но если нет вариантов то буду...

Смотрел либы при помощи objdump
Код
objdump -t libgcc.a
Смотрел вывод компилятора на команду
Код
echo "" | avr-gcc -E -dM -x c - | sort | more
- никаких зацепок.

Кто-нибудь решал такую задачку?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Dec 5 2016, 12:40
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Официально avr-libc user-manual
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 5 2016, 14:05
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(DmitryM @ Dec 5 2016, 15:40) *
Вы вопрос мой, видимо, не поняли.
Всё что написано по Вашей ссылке мне прекрасно известно.
Задача стоит следующая: как внутри makefile, (ещё до начала компиляции) узнать версию avr-libc, чтобы изменить правило сборки в зависимости от этой версии.
Я нашёл лишь одно решение - парсить файл version.h (на который Вы тоже дали ссылку).
Это не очень удобно. Я хочу получить совет, как это сделать максимально красиво.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 5 2016, 14:33
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg_spb @ Dec 5 2016, 16:05) *
Задача стоит следующая: как внутри makefile, (ещё до начала компиляции) узнать версию avr-libc, чтобы изменить правило сборки в зависимости от этой версии.

Не совсем понятен подход к делу - вместо указания конкретного варианта сборки проекта со всеми конкретными библиотеками, вдруг берется одна случайная версия библиотека и под нее все подгоняется sad.gif. По мне так явно указать в make одну из возможных версий, при компиляции проверять и ругаться. Дальше или менять библиотеку, либо ключи в make под сборку с другой библиотекой. Не люблю неявного поведения sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 5 2016, 14:51
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(zltigo @ Dec 5 2016, 17:33) *
Тут всё просто: avr-libc ранее не разделял таргеты вплоть до конкретной модели MCU.
Теперь они переиграли структуру и стали использовать механизм спецификаций и теперь нужно линковаться с ключём
Код
-l$(MCU)
Ранее без него всё собиралось.
Чтобы учесть эту фичу нужен костыль в мейке.
Ничего случайного тут нет.
Просто поменялся API c версии avr-libc-2.0.0 (или даже чуть ранее - пока не выяснил).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 5 2016, 17:05
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(demiurg_spb @ Dec 5 2016, 16:02) *
Смотрел вывод компилятора на команду
Код
echo "" | avr-gcc -E -dM -x c - | sort | more
- никаких зацепок.

Может, что-то типа
Код
echo "#include <version.h>" | avr-gcc -E -dM...
?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 6 2016, 09:40
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(AHTOXA @ Dec 5 2016, 20:05) *
пробовал
Код
echo "#include <avr/io.h>" | avr-gcc -E -dM -mmcu=atmega8 - | sort | less
echo "#include <avr/version.h>" | avr-gcc -E -dM -mmcu=atmega8 - | sort | less
ни на что влияет наличие "#include <...>"

О! Вот так работает!!!
Код
echo "" | avr-gcc -include "avr/io.h" -E -dM  -mmcu=atmega8 - | sort | less

Вот таким макаром можно узнать __AVR_LIBC_MAJOR__
Код
echo "" | avr-gcc -include "avr/version.h" -E -dM - | grep __AVR_LIBC_MAJOR__ | gawk '{ print $3 }'
- это то что мне нужно!

Антоха, спасибо за наводку!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 01:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01345 секунд с 7
ELECTRONIX ©2004-2016