+
+# specify -D_GNU_SOURCE unconditionally
+add_project_arguments('-D_GNU_SOURCE', language: 'c')
+
+# specify -D__BSD_VISIBLE for FreeBSD
+if is_freebsd
+ add_project_arguments('-D__BSD_VISIBLE', language: 'c')
+endif
+
+if is_windows
+ # Minimum supported API is Windows 7.
+ add_project_arguments('-D_WIN32_WINNT=0x0601', language: 'c')
+
+ # Use MinGW-w64 stdio, because DPDK assumes ANSI-compliant formatting.
+ if cc.get_id() == 'gcc'
+ add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: 'c')
+ endif
+endif
+
+if get_option('b_lto')
+ if cc.has_argument('-ffat-lto-objects')
+ add_project_arguments('-ffat-lto-objects', language: 'c')
+ else
+ error('compiler does not support fat LTO objects - please turn LTO off')
+ endif
+ # workaround for gcc bug 81440
+ if cc.get_id() == 'gcc' and cc.version().version_compare('<8.0')
+ add_project_arguments('-Wno-lto-type-mismatch', language: 'c')
+ add_project_link_arguments('-Wno-lto-type-mismatch', language: 'c')
+ endif
+endif