Jump to content

    
Sign in to follow this  
nanorobot

Не могу собрать OpenOCD. Linux Mint 19

Recommended Posts

Перешел на линкс минт 19, до этого была 18.  Имею набор проблем, среди них  много раз ранее выполнявшаяся, и никогда не вызывавшая проблем, сборка OpenOCD. Сейчас make завершается с ошибками:

src/svf/svf.c: In function ‘svf_read_command_from_file’:
src/svf/svf.c:663:7: error: this statement may fall through [-Werror=implicit-fallthrough=]
     i = -1;
     ~~^~~~
src/svf/svf.c:664:4: note: here
    case '\r':
    ^~~~
src/svf/svf.c:667:8: error: this statement may fall through [-Werror=implicit-fallthrough=]
     if (!cmd_pos)
        ^
src/svf/svf.c:669:4: note: here
    default:
    ^~~~~~~
cc1: all warnings being treated as errors

гугл что то по этой теме находит, но проблему решить не удается.

ЕЩЕ: сборка buildroot для платы SL-ATSAMA5D3 также завершается с ошибкой ранее не встречавшейся.
 

ACC conformance test FAILED

Догадываюсь что проблемы родственные, какие то несовместимости с новым GCC, но так бывало (со сборкой билдрут) и ранее, но совсем то  в тупик еще не заводило.

Share this post


Link to post
Share on other sites
9 minutes ago, arhiv6 said:

Buildroot 2013-11   штатный от стартеркит.ру

 

gcc version 7.3.0
OpenOCD

  0.10.0-10

 

Edited by nanorobot

Share this post


Link to post
Share on other sites

Судя из описания openocd-build/README.md они на 7.3 сборку не тестировали

Цитата

... build environments based on GCC 7.2 ...

Buildroot 2013-11 соответственно тоже не будет собираться, ставьте пакеты с gcc той версии что были в минт 18, ну или хотя бы 6.*

Share this post


Link to post
Share on other sites
6 hours ago, Grizzly said:

Это из-за отсутствия break в switch. Пропатчите систему сборки openocd, добавив 


-Wno-error=implicit-fallthrough=

https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/

Спасибо, получилось. Еще пару раз пришлось makefile поправить аналогичным образом. Как оказалось, GCC сам в листинге подсказку дает, надо только увидеть.

Share this post


Link to post
Share on other sites
9 часов назад, Grizzly сказал:

Пропатчите систему сборки openocd, добавив 

Это неправильно. Надо патчить исходник и патч отправить в апстрим, если там ещё не исправлено.

Share this post


Link to post
Share on other sites
1 hour ago, andrew_b said:

Это неправильно. Надо патчить исходник и патч отправить в апстрим, если там ещё не исправлено.

Почему неправильно? А если fallthrough и нужен в том месте?
Там же написано в логах, что не собирается из-за того, что уровень всех warning'ов повышен до error'ов.

Share this post


Link to post
Share on other sites
22 минуты назад, one_eight_seven сказал:

Почему неправильно?

Потому что надо править некорректный код, а не городить пути объезда.

23 минуты назад, one_eight_seven сказал:

А если fallthrough и нужен в том месте?

У автора темы произошёл переход на новую версию дистрибутива. Соответственно, обновился компилятор. Наверняка используется gcc. У gcc есть __attribute__((fallthrough)). Вот это и надо вписать там, где нужно, чтобы не было варнингов.

Share this post


Link to post
Share on other sites
Quote

Вот это и надо вписать там, где нужно, чтобы не было варнингов.

Clang и ICC это тоже поддерживают? Или городить #ifdef __GNUC__, и т.п.?
отсутствие break - это не есть неправильный код. Это задокументированная возможность языка. Нередко этим пользуются (правда, есть правила, что такое всегда должно сопровождаться комментариями), но мне в код лезть не хочется. Если признано авторами, что в этом месте кода именно ошибка - это одно, если же это результат того, что в новом gcc появился warning на falltrhough, а в системе сборки все предурпеждения повышаются до ошибок, то это не ошибка в коде.

Share this post


Link to post
Share on other sites

Я согласен, что патчить исходники - это правильное решение, но в данном случае можно отключить ошибку. Код корректный в данном случае, и сам разработчик считает, что ошибка, а что верное использование. Тем более, это релиз, а не сборка для себя debug для отладки.

Share this post


Link to post
Share on other sites
36 минут назад, andrew_b сказал:

Потому что надо править некорректный код, а не городить пути объезда.

Проблема в том что в чистом С в отличии от плюсов нет [[fallthrough]].

Share this post


Link to post
Share on other sites

Для понимания напишите 

case 'A':

case "B':

     // actions ...

     break;

а потом

case 'A':

     // actions ...

case "B':

     // actions ...

     break;

И будет вам счастье

Share this post


Link to post
Share on other sites
13 минут назад, Kabdim сказал:

Проблема в том что в чистом С в отличии от плюсов нет [[fallthrough]].

Конкретно в ГЦЦ есть штатный путь подавления этого предупреждения:

            case 'G':
                flags.uppercase = 1;
                // fall through - это для ГЦЦ
                // no break  - это для эклипсы
            case 'g':
 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this