From 7e2edad8efea55e8df1faa695d1389ef4e326d7c Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Tue, 16 Jul 2013 13:28:28 +0200 Subject: switch the build system to waf This commit adds a new build system based on waf. configure and Makefile are deprecated effective immediately and someday in the future they will be removed (they are still available by running ./old-configure). You can find how the choice for waf came to be in `DOCS/waf-buildsystem.rst`. TL;DR: we couldn't get the same level of abstraction and customization with other build systems we tried (CMake and autotools). For guidance on how to build the software now, take a look at README.md and the cross compilation guide. CREDITS: This is a squash of ~250 commits. Some of them are not by me, so here is the deserved attribution: - @wm4 contributed some Windows fixes, renamed configure to old-configure and contributed to the bootstrap script. Also, GNU/Linux testing. - @lachs0r contributed some Windows fixes and the bootstrap script. - @Nikoli contributed a lot of testing and discovered many bugs. - @CrimsonVoid contributed changes to the bootstrap script. --- waftools/detections/compiler.py | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 waftools/detections/compiler.py (limited to 'waftools/detections/compiler.py') diff --git a/waftools/detections/compiler.py b/waftools/detections/compiler.py new file mode 100644 index 0000000000..1fee446409 --- /dev/null +++ b/waftools/detections/compiler.py @@ -0,0 +1,57 @@ +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 "" + +def __add_generic_flags__(ctx): + ctx.env.CFLAGS += ["-D_ISOC99_SOURCE", "-D_GNU_SOURCE", + "-D_LARGEFILE_SOURCE", "-D_FILE_OFFSET_BITS=64", + "-D_LARGEFILE64_SOURCE", + "-std=gnu99", "-Wall"] + + if ctx.is_debug_build(): + ctx.env.CFLAGS += ['-g'] + +def __add_gcc_flags__(ctx): + ctx.env.CFLAGS += ["-Wundef", "-Wmissing-prototypes", + "-Wno-switch", "-Wno-parentheses", "-Wpointer-arith", + "-Wredundant-decls", "-Wno-pointer-sign", + "-Werror=implicit-function-declaration", + "-Wno-error=deprecated-declarations", + "-Wno-error=unused-function" ] + +def __add_clang_flags__(ctx): + ctx.env.CFLAGS += ["-Wno-logical-op-parentheses", "-fcolor-diagnostics"] + +def __add_mingw_flags__(ctx): + ctx.env.CFLAGS += ['-D__USE_MINGW_ANSI_STDIO=1'] + ctx.env.CFLAGS += ['-DBYTE_ORDER=1234'] + ctx.env.CFLAGS += ['-DLITLE_ENDIAN=1234'] + ctx.env.CFLAGS += ['-DBIG_ENDIAN=4321'] + ctx.env.LAST_LINKFLAGS += ['-mconsole'] + +__compiler_map__ = { + '__GNUC__': __add_gcc_flags__, + '__clang__': __add_clang_flags__, + '__MINGW32__': __add_mingw_flags__, +} + +def __apply_map__(ctx, fnmap): + if 'CC_ENV_VARS' not in ctx.env: + ctx.env.CC_ENV_VARS = str(__get_cc_env_vars__(ctx.env.CC)) + for k, fn in fnmap.items(): + if ctx.env.CC_ENV_VARS.find(k) > 0: + fn(ctx) + +def configure(ctx): + __add_generic_flags__(ctx) + __apply_map__(ctx, __compiler_map__) + -- cgit v1.2.3