[flashrom] Building on Windows with mingw

Antonio Ospite ao2 at ao2.it
Tue Feb 27 23:13:58 CET 2018


On Tue, 27 Feb 2018 20:12:20 +0100
Márton Miklós <martonmiklosqdev at gmail.com> wrote:

[...]
> Hey Antonio,
> 
> Thank you very much for your email, it solves one part of the problem on 
> Windows.
> Now I got the following warnings:
> 
> dummyflasher.c: In function 'dummy_init':
> dummyflasher.c:379:12: warning: unknown conversion type character 'j' in 
> format [-Wformat=]
>     msg_pdbg("Found persistent image %s, %jd B ",
>              ^
> flash.h:350:49: note: in definition of macro 'msg_pdbg'
>   #define msg_pdbg(...) print(FLASHROM_MSG_DEBUG, __VA_ARGS__) /* 
> programmer debug */
>                                                   ^~~~~~~~~~~
> dummyflasher.c:379:12: warning: too many arguments for format 
> [-Wformat-extra-args]
>     msg_pdbg("Found persistent image %s, %jd B ",
>              ^
> 

This is one of the possible warnings I was talking about, and it
derives from the very fact that __MINGW_PRINTF_FORMAT is not defined in
your installation, and the default "printf" format is not enough.

The proper solution would be to get a MinGW version which defines
__MINGW_PRINTF_FORMAT, I see that it has been added "only" in 2012 :)
https://sourceforge.net/p/mingw-w64/mingw-w64/ci/77bc5d6103b5fb9f59fbddab1583e69549913312/

Anyways, one possible workaround to support older MinGW versions would
be to use "gnu_printf" directly as a printf format, like this:


diff --git a/flash.h b/flash.h
index a80a9c2..40a7f1a 100644
--- a/flash.h
+++ b/flash.h
@@ -360,6 +360,9 @@ int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap
 /* Let gcc and clang check for correct printf-style format strings. */
 int print(enum flashrom_log_level level, const char *fmt, ...)
 #ifdef __MINGW32__
+#  ifndef __MINGW_PRINTF_FORMAT
+#    define __MINGW_PRINTF_FORMAT gnu_printf
+#  endif
 __attribute__((format(__MINGW_PRINTF_FORMAT, 2, 3)));
 #else
 __attribute__((format(printf, 2, 3)));


This should be OK because the define is only applied when using MinGW.                                           

JFYI I decided for a less backward compatible solution in the other
project:
https://git.ao2.it/libam7xxx.git/commitdiff/bbebd199987581ee6f344c89bfb02237dc0ab0bd

Ciao,
   Antonio

-- 
Antonio Ospite
https://ao2.it
https://twitter.com/ao2it

A: Because it messes up the order in which people normally read text.
   See http://en.wikipedia.org/wiki/Posting_style
Q: Why is top-posting such a bad thing?



More information about the flashrom mailing list