diff --git a/docs/win32-build.md b/docs/win32-build.md index 4bf696e6f..81dee0465 100644 --- a/docs/win32-build.md +++ b/docs/win32-build.md @@ -65,10 +65,10 @@ Building software that just *uses* GLib or GTK also require to have the right compiler set up the right way. If you intend to use MinGW-GCC, follow the relevant instructions below in that case, too. -You should link to GLib using the `-mms-bitfields` GCC flag. It is the default -since 2012 (GCC 4.7). This flag means that the struct layout rules are identical -to those used by MSVC. This is essential if the same DLLs are to be usable both -from gcc- and MSVC-compiled code. +You should link to GLib using the `-mms-bitfields` GCC flag. This flag means +that the struct layout rules are identical to those used by MSVC. This is +essential if the same DLLs are to be usable both from gcc- and MSVC-compiled +code. ## Cross-CRT issues diff --git a/glib/meson.build b/glib/meson.build index f4889243d..c26a35e42 100644 --- a/glib/meson.build +++ b/glib/meson.build @@ -443,7 +443,7 @@ pkg.generate(libglib, libraries : [libintl_deps], libraries_private : [win32_ldflags], subdirs : ['glib-2.0'], - extra_cflags : ['-I${libdir}/glib-2.0/include'], + extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags, variables : [ 'bindir=' + '${prefix}' / get_option('bindir'), 'datadir=' + '${prefix}' / get_option('datadir'), diff --git a/meson.build b/meson.build index 178bf0bbb..97fc0f119 100644 --- a/meson.build +++ b/meson.build @@ -50,6 +50,7 @@ if cc.get_id() == 'msvc' noseh_link_args = ['/SAFESEH:NO'] else noseh_link_args = [] + # -mms-bitfields vs -fnative-struct ? endif host_system = host_machine.system() @@ -2351,8 +2352,15 @@ else export_dynamic_ldflags = ['-Wl,--export-dynamic'] endif +win32_cflags = [] win32_ldflags = [] if host_system == 'windows' and cc.get_id() != 'msvc' and cc.get_id() != 'clang-cl' + # Ensure MSVC-compatible struct packing convention is used when + # compiling for Win32 with gcc. It is used for the whole project and exposed + # in glib-2.0.pc. + win32_cflags = ['-mms-bitfields'] + add_project_arguments(win32_cflags, language : 'c') + # Win32 API libs, used only by libglib and exposed in glib-2.0.pc win32_ldflags = ['-lws2_32', '-lole32', '-lwinmm', '-lshlwapi', '-luuid'] elif host_system == 'cygwin'