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/__init__.py | 0 waftools/detections/compiler.py | 57 +++++++++++++++++++++++++++++++++++++++++ waftools/detections/cpu.py | 28 ++++++++++++++++++++ waftools/detections/devices.py | 29 +++++++++++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 waftools/detections/__init__.py create mode 100644 waftools/detections/compiler.py create mode 100644 waftools/detections/cpu.py create mode 100644 waftools/detections/devices.py (limited to 'waftools/detections') diff --git a/waftools/detections/__init__.py b/waftools/detections/__init__.py new file mode 100644 index 0000000000..e69de29bb2 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__) + diff --git a/waftools/detections/cpu.py b/waftools/detections/cpu.py new file mode 100644 index 0000000000..ce342fdd73 --- /dev/null +++ b/waftools/detections/cpu.py @@ -0,0 +1,28 @@ +def x86(ctx): + ctx.define('ARCH_X86', 1) + ctx.define('ARCH_X86_32', 1) + +def x86_64(ctx): + ctx.define('ARCH_X86', 1) + ctx.define('ARCH_X86_64', 1) + ctx.define('HAVE_FAST_64BIT', 1) + +def ia64(ctx): + ctx.define('HAVE_FAST_64BIT', 1) + +def default(ctx): + pass + +def configure(ctx): + ctx.define('ARCH_X86', 0) + ctx.define('ARCH_X86_32', 0) + ctx.define('ARCH_X86_64', 0) + ctx.define('HAVE_FAST_64BIT', 0) + + ctx.define('HAVE_MMX', 'ARCH_X86', quote=False) + ctx.define('HAVE_MMX2', 'ARCH_X86', quote=False) + ctx.define('HAVE_SSE', 'ARCH_X86', quote=False) + ctx.define('HAVE_SSE2', 'ARCH_X86', quote=False) + ctx.define('HAVE_SSSE3', 'ARCH_X86', quote=False) + + globals().get(ctx.env.DEST_CPU, default)(ctx) diff --git a/waftools/detections/devices.py b/waftools/detections/devices.py new file mode 100644 index 0000000000..2533788691 --- /dev/null +++ b/waftools/detections/devices.py @@ -0,0 +1,29 @@ +__cdrom_devices_map__ = { + 'win32': 'D:', + 'cygwin': 'D:', + 'darwin': '/dev/disk1', + 'freebsd': '/dev/cd0', + 'openbsd': '/dev/rcd0r', + 'default': '/dev/cdrom' +} + +__dvd_devices_map__ = { + 'win32': 'D:', + 'cygwin': 'D:', + 'darwin': '/dev/rdiskN', + 'freebsd': '/dev/cd0', + 'openbsd': '/dev/rcd0r', + 'default': '/dev/dvd' +} + +def __default_cdrom_device__(ctx): + default = __cdrom_devices_map__['default'] + return __cdrom_devices_map__.get(ctx.env.DEST_OS, default) + +def __default_dvd_device__(ctx): + default = __dvd_devices_map__['default'] + return __dvd_devices_map__.get(ctx.env.DEST_OS, default) + +def configure(ctx): + ctx.define('DEFAULT_DVD_DEVICE', __default_dvd_device__(ctx)) + ctx.define('DEFAULT_CDROM_DEVICE', __default_cdrom_device__(ctx)) -- cgit v1.2.3