2013-07-16 11:28:28 +00:00
|
|
|
from waflib import Utils
|
|
|
|
|
|
|
|
def __get_cc_env_vars__(cc):
|
|
|
|
cmd = cc + ['-dM', '-E', '-']
|
|
|
|
try:
|
|
|
|
p = Utils.subprocess.Popen(cmd, stdin=Utils.subprocess.PIPE,
|
|
|
|
stdout=Utils.subprocess.PIPE,
|
|
|
|
stderr=Utils.subprocess.PIPE)
|
|
|
|
p.stdin.write('\n'.encode())
|
|
|
|
return p.communicate()[0]
|
|
|
|
except Exception:
|
|
|
|
return ""
|
|
|
|
|
2014-04-26 21:44:15 +00:00
|
|
|
def __test_and_add_flags__(ctx, flags):
|
|
|
|
for flag in flags:
|
2019-09-21 22:11:02 +00:00
|
|
|
if ctx.check_cc(cflags='-Werror ' + flag, mandatory=False):
|
|
|
|
ctx.env.CFLAGS += [flag]
|
2014-04-26 21:44:15 +00:00
|
|
|
|
2013-07-16 11:28:28 +00:00
|
|
|
def __add_generic_flags__(ctx):
|
2014-07-10 07:25:37 +00:00
|
|
|
ctx.env.CFLAGS += ["-D_ISOC99_SOURCE", "-D_GNU_SOURCE",
|
2019-06-29 23:27:26 +00:00
|
|
|
"-D_FILE_OFFSET_BITS=64", "-Wall"]
|
2018-05-20 21:33:07 +00:00
|
|
|
|
|
|
|
if ctx.check_cc(cflags="-std=c11", mandatory=False):
|
|
|
|
ctx.env.CFLAGS += ["-std=c11"]
|
|
|
|
else:
|
|
|
|
ctx.env.CFLAGS += ["-std=c99"]
|
2013-07-16 11:28:28 +00:00
|
|
|
|
2014-07-19 16:45:43 +00:00
|
|
|
if ctx.is_optimization():
|
|
|
|
ctx.env.CFLAGS += ['-O2']
|
|
|
|
|
2013-07-16 11:28:28 +00:00
|
|
|
if ctx.is_debug_build():
|
|
|
|
ctx.env.CFLAGS += ['-g']
|
|
|
|
|
2014-12-14 19:44:27 +00:00
|
|
|
__test_and_add_flags__(ctx, ["-Werror=implicit-function-declaration",
|
|
|
|
"-Wno-error=deprecated-declarations",
|
|
|
|
"-Wno-error=unused-function",
|
|
|
|
"-Wempty-body",
|
|
|
|
"-Wdisabled-optimization",
|
|
|
|
"-Wstrict-prototypes",
|
2014-12-17 21:24:20 +00:00
|
|
|
"-Wno-format-zero-length",
|
2015-05-09 17:59:52 +00:00
|
|
|
"-Werror=format-security",
|
2017-07-24 06:08:14 +00:00
|
|
|
"-Wno-redundant-decls",
|
2018-10-11 03:45:47 +00:00
|
|
|
"-Wvla",
|
2019-12-11 16:23:39 +00:00
|
|
|
"-Wno-format-truncation",
|
|
|
|
"-Wimplicit-fallthrough",
|
|
|
|
])
|
2014-12-17 21:24:20 +00:00
|
|
|
|
|
|
|
def __add_gcc_flags__(ctx):
|
|
|
|
ctx.env.CFLAGS += ["-Wall", "-Wundef", "-Wmissing-prototypes", "-Wshadow",
|
2015-03-02 18:09:25 +00:00
|
|
|
"-Wno-switch", "-Wparentheses", "-Wpointer-arith",
|
2016-06-07 11:39:43 +00:00
|
|
|
"-Wno-pointer-sign",
|
|
|
|
# GCC bug 66425
|
|
|
|
"-Wno-unused-result"]
|
2013-07-16 11:28:28 +00:00
|
|
|
|
|
|
|
def __add_clang_flags__(ctx):
|
2014-02-13 22:14:00 +00:00
|
|
|
ctx.env.CFLAGS += ["-Wno-logical-op-parentheses", "-fcolor-diagnostics",
|
2014-04-26 21:44:15 +00:00
|
|
|
"-Wno-tautological-compare",
|
2014-02-13 22:14:00 +00:00
|
|
|
"-Wno-tautological-constant-out-of-range-compare" ]
|
2013-07-16 11:28:28 +00:00
|
|
|
|
2015-01-07 20:33:14 +00:00
|
|
|
def __add_mswin_flags__(ctx):
|
2017-10-23 10:01:45 +00:00
|
|
|
ctx.env.CFLAGS += ['-D_WIN32_WINNT=0x0602', '-DUNICODE', '-DCOBJMACROS',
|
2016-09-27 12:44:18 +00:00
|
|
|
'-DINITGUID', '-U__STRICT_ANSI__']
|
2015-12-07 07:51:25 +00:00
|
|
|
ctx.env.LAST_LINKFLAGS += ['-Wl,--major-os-version=6,--minor-os-version=0',
|
|
|
|
'-Wl,--major-subsystem-version=6,--minor-subsystem-version=0']
|
2015-01-07 20:33:14 +00:00
|
|
|
|
2013-07-16 11:28:28 +00:00
|
|
|
def __add_mingw_flags__(ctx):
|
2015-01-07 20:33:14 +00:00
|
|
|
__add_mswin_flags__(ctx)
|
2019-06-29 23:29:06 +00:00
|
|
|
ctx.env.CFLAGS += ['-D__USE_MINGW_ANSI_STDIO=1']
|
|
|
|
ctx.env.LAST_LINKFLAGS += ['-mwindows']
|
2013-07-16 11:28:28 +00:00
|
|
|
|
2013-11-22 20:30:00 +00:00
|
|
|
def __add_cygwin_flags__(ctx):
|
2015-01-07 20:33:14 +00:00
|
|
|
__add_mswin_flags__(ctx)
|
2013-11-22 20:30:00 +00:00
|
|
|
ctx.env.CFLAGS += ['-mwin32']
|
|
|
|
|
2013-07-16 11:28:28 +00:00
|
|
|
__compiler_map__ = {
|
|
|
|
'__GNUC__': __add_gcc_flags__,
|
|
|
|
'__clang__': __add_clang_flags__,
|
|
|
|
'__MINGW32__': __add_mingw_flags__,
|
2013-11-22 20:30:00 +00:00
|
|
|
'__CYGWIN__': __add_cygwin_flags__,
|
2013-07-16 11:28:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
def __apply_map__(ctx, fnmap):
|
2013-11-24 13:10:35 +00:00
|
|
|
if not getattr(ctx, 'CC_ENV_VARS', None):
|
|
|
|
ctx.CC_ENV_VARS = str(__get_cc_env_vars__(ctx.env.CC))
|
2013-07-16 11:28:28 +00:00
|
|
|
for k, fn in fnmap.items():
|
2013-11-24 13:10:35 +00:00
|
|
|
if ctx.CC_ENV_VARS.find(k) > 0:
|
2013-07-16 11:28:28 +00:00
|
|
|
fn(ctx)
|
|
|
|
|
|
|
|
def configure(ctx):
|
|
|
|
__add_generic_flags__(ctx)
|
|
|
|
__apply_map__(ctx, __compiler_map__)
|