[flashrom] [PATCH] Fix and improve Windows/MinGW/MSYS build
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Sun Jul 3 21:16:06 CEST 2011
Am 03.07.2011 16:42 schrieb Uwe Hermann:
> On Sun, Jul 03, 2011 at 01:11:51AM +0200, Carl-Daniel Hailfinger wrote:
>
>>> - Explicitly set CC=gcc in the Makefile, otherwise you get an error like
>>> "cc: command not found" on MinGW.
>>>
>>>
>> Mh. Would CC?=gcc work as well?
>>
> Doesn't work unfortunately.
>
>
>
>>> - serial.c: Add missing casts to avoid compile errors due to -Werror.
>>>
>>>
>> Those casts seem to use a Windows-specific cast.
>>
> Yes (they're in the _WIN32 ifdef though).
>
>
>
>>> ifeq ($(CONFIG_FT2232_SPI), yes)
>>> +ifeq ($(OS_ARCH), MINGW32_NT-5.1)
>>> +# No pkg-config files for libftdi on Windows/MinGW, just assume it's installed.
>>> +FTDILIBS := -lftdi -lusb
>>>
>>>
>> Umm... if pkg-config fails, the fallback below will do exactly what you
>> did manually above. Does the fallback fail for you?
>>
> Oops, true, I removed that hunk.
>
>
>
>>> - WriteFile(sp_fd, buf, writecnt, &tmp, NULL);
>>> + WriteFile(sp_fd, buf, writecnt, (PDWORD)&tmp, NULL);
>>>
>>>
>> Use (uint32_t *) instead of (PDWORD). That said, this might mess up
>> aliasing handling in the compiler, and we should fix the type of tmp
>> instead.
>>
> WriteFile(), a Windows API call, expects an 'LPDWORD', i.e. a pointer to
> a DWORD, I think it makes sense to use that (in the _WIN32 ifdef part).
>
> http://msdn.microsoft.com/en-us/library/aa365747%28VS.85%29.aspx
> http://msdn.microsoft.com/en-us/library/cc230318%28PROT.10%29.aspx
>
> We do similar things with 'fdtype' on MinGW:
>
> programmer.h:typedef HANDLE fdtype;
> programmer.h:typedef int fdtype;
>
>
>
>>> #else
>>> tmp = write(sp_fd, buf, writecnt);
>>>
> This write() here, however, returns an ssize_t, so I changed "long tmp"
> to "ssize_t tmp" here, too.
>
>
> Updated patch attached.
>
> Fix and improve Windows/MinGW/MSYS build.
>
> - Makefile: Use $(OS_ARCH) to add some MinGW-specific workarounds and
> settings, so that a simple "make" is sufficient on MinGW (instead of
> manual Makefile hacking).
>
> - Explicitly set CC=gcc in the Makefile, otherwise you get an error like
> "cc: command not found" on MinGW.
>
> - MinGW doesn't have ffs(), use gcc's __builtin_ffs() instead.
>
> - Add /usr/local/include and /usr/local/lib to CPPFLAGS/LDFLAGS, that's
> where libusb-win32 and libftdi stuff is usually placed on MinGW/MSYS.
>
> - Disable serprog (no sockets) and all PCI-based programmers (no libpci)
> for now. That leaves dummy, ft2232_spi, and buspirate_spi enabled on
> MinGW per default.
>
Is it really impossible to enable serprog? IIRC it works with Cygwin.
> - serial.c: Use correct type for 'tmp', both on Windows/MinGW (DWORD)
> and POSIX (ssize_t).
>
> Signed-off-by: Uwe Hermann <uwe at hermann-uwe.de>
>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
Regards,
Carl-Daniel
--
http://www.hailfinger.org/
More information about the flashrom
mailing list