Перейти к содержанию
    

Определение версии LIBC в makefile

Подскажите пожалуйста, как можно наиболее просто определить версию 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

- никаких зацепок.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы вопрос мой, видимо, не поняли.

Всё что написано по Вашей ссылке мне прекрасно известно.

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

Я нашёл лишь одно решение - парсить файл version.h (на который Вы тоже дали ссылку).

Это не очень удобно. Я хочу получить совет, как это сделать максимально красиво.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут всё просто: avr-libc ранее не разделял таргеты вплоть до конкретной модели MCU.

Теперь они переиграли структуру и стали использовать механизм спецификаций и теперь нужно линковаться с ключём

-l$(MCU)

Ранее без него всё собиралось.

Чтобы учесть эту фичу нужен костыль в мейке.

Ничего случайного тут нет.

Просто поменялся API c версии avr-libc-2.0.0 (или даже чуть ранее - пока не выяснил).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрел вывод компилятора на команду

echo "" | avr-gcc -E -dM -x c - | sort | more

- никаких зацепок.

Может, что-то типа

echo "#include <version.h>" | avr-gcc -E -dM...

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пробовал

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 }'

- это то что мне нужно!

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...