Jump to content

    

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

Перешел на линкс минт 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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this