Package Details: mingw-w64-cmake 1-13

Git Clone URL: (read-only)
Package Base: mingw-w64-cmake
Description: CMake wrapper for MinGW (mingw-w64)
Upstream URL:
Licenses: GPL
Submitter: brcha
Maintainer: xantares
Last Packager: xantares
Votes: 28
Popularity: 2.061308
First Submitted: 2013-04-17 12:11
Last Updated: 2016-07-13 18:18

Required by (83)

Sources (3)

  • toolchain-mingw.cmake

Latest Comments

xantares commented on 2016-07-13 20:05

You can override the -02 flag by appending -O0, ie "-O2 -O0" are valid CFLAGS, the last (-O0) value overrides the level 2 optimization O2.

Martchus commented on 2016-07-13 19:59

Of course I know that debug symbols are stripped anyways. I was just wondering about the combination with -O2 but your explanation makes sense.

I just mentioned -g because I've read the previous discussion. Actually I want to get rid of -O2 as a workaround for the mentioned issue (see my first comment). Hence overwriting (and not just appending) would still be useful for me. Maybe there are other use cases, too. If you like, you can try to reproduce the issue (should only take 1 minute).

xantares commented on 2016-07-13 19:40

"-g -O2" makes great sense actually: when you're debugging you want your code to behave like the the release code in order to better reproduce bugs.
Debug symbols are actually removed by the strip commands so if you wanted to override flags just to disable -g it's useless.

Martchus commented on 2016-07-13 18:32

Thanks for your fast response :-)

I know appending is possible in mingw-w64-configure. If you look at the code in my repo you'll see I also added this for mingw-w64-cmake. However, it would be nice to get completely rid of some flags. That is why I'd like to introduce another environment variable for that. I think this wouldn't hurt anyone.

BTW: I also read the previous discussion about the default flags and I have to say that these are a bit strange indeed. In particular the combination of -g (which generated debugger information) and -O2 (which enables most of the available optimizations) doesn't make very much sense to me.

EDIT: kalev from #fedora-mingw just told me that the reason they chose those particular build flags is to match the build flags regular Fedora binaries use as similar as possible.

xantares commented on 2016-07-13 18:16

good idea, you can already do that in mingw-w64-configure by calling CFLAGS="-foo" ${_arch}-configure for flags to be appended to the default flags.
I'll do the same here so you could do CFLAGS="-O0" ${_arch}-cmake

Martchus commented on 2016-07-13 18:01

The default build flags should be configurable. I would propose to make the default build flags configurable via the environment variable CUSTOM_MINGW_FLAGS.

Achieving this would be very simple: mingw_flags="${CUSTOM_MINGW_FLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4}"

For consistency the changes should also be included in mingw-w64-configure.

For the full source code of the proposed changes for both packages check out my PKGBUILDs repository:

The reason I want to customize the build flags is that I the default ones are currently causing some trouble for me. In particular the compiler flag -O2 is causing page faults in the resulting application when an instance of std::stringstream is created in a shared library. As a workaround I need to use -O0 when building the shared library.
If you want to reproduce the issue, here is a small example application and library:
The commands to compile and run are also provided.
I haven't had the time yet for further investigations of the issue, eg. to check whether other classes and the i686 architecture are also affected. Hence I haven't filed a bug report yet.

xantares commented on 2016-04-03 07:36

@chenxiaolong, thanks!

chenxiaolong commented on 2016-04-03 00:45

@xantares: As an alternative to copying DLLs in, you could simply set the WINEPATH environment variable to the bin directory.

For example, I run my CMake tests with:

WINEPATH="/usr/i686-w64-mingw32/bin;$(pwd)/libmblog" ctest -VV

Something similar should also work in your script.

Cloudef commented on 2015-12-10 00:16


- You make good point of the native cflags. I did not consider those. It's weird fedora uses those weird flags as well (such as forcing exceptions, defining ssp parameter without enabling it, and just blatantly forcing -O2, -g, -Wall and -pipe, which are all situational options)

- Yeah I sort of assumed this. I'm not sure what implications with moving the variables to the toolchain file would be though. In theory it should work the same, just without the warnings.

Anyhow, thanks for your explanations.

xantares commented on 2015-12-08 13:10

All comments