diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2017-06-30 19:21:38 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2017-07-01 08:20:51 +0200 |
commit | e91a267a7c9e1e82118ab4f98ed60908c34de115 (patch) | |
tree | 0c5dcb787980082f3dcfc1a5c92f2a4e5a304992 /platform/x11 | |
parent | cb59236ce938fdf3ffe20b1f77c4f7058ddaadf1 (diff) |
Buildsystem: Improve detect.py readability and fix issues
Tried to organize the configure(env) calls in sections, using the same order
for all platforms whenever possible.
Apart from cosmetic changes, the following issues were fixed:
- Android: cleanup linkage, remove GLESv1_CM and GLESv2
- iPhone: Remove obsolete "ios_gles22_override" option
- OSX:
* Fix bits detection (default to 64) and remove obsolete "force_64_bits" option
(closes #9449)
* Make "fat" bits argument explicit
- Server: sync with X11
- Windows: clean up old DirectX 9 stuff
- X11:
* Do not require system OpenSSL for building (closes #9443)
* Fix typo'ed use_leak_sanitizer option
* Fix .llvm suffix overriding custom extra_suffix
Diffstat (limited to 'platform/x11')
-rw-r--r-- | platform/x11/detect.py | 151 |
1 files changed, 65 insertions, 86 deletions
diff --git a/platform/x11/detect.py b/platform/x11/detect.py index 0ba0f68393..79778136ad 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -1,7 +1,6 @@ - import os -import sys import platform +import sys def is_active(): @@ -14,15 +13,12 @@ def get_name(): def can_build(): - if (os.name != "posix"): + if (os.name != "posix" or sys.platform == "darwin"): return False - if sys.platform == "darwin": - return False # no x11 on mac for now - - errorval = os.system("pkg-config --version > /dev/null") - - if (errorval): + # Check the minimal dependencies + x11_error = os.system("pkg-config --version > /dev/null") + if (x11_error): print("pkg-config not found.. x11 disabled.") return False @@ -31,11 +27,6 @@ def can_build(): print("X11 not found.. x11 disabled.") return False - ssl_error = os.system("pkg-config openssl --modversion > /dev/null ") - if (ssl_error): - print("OpenSSL not found.. x11 disabled.") - return False - x11_error = os.system("pkg-config xcursor --modversion > /dev/null ") if (x11_error): print("xcursor not found.. x11 disabled.") @@ -51,18 +42,18 @@ def can_build(): print("xrandr not found.. x11 disabled.") return False - return True # X11 enabled + return True def get_opts(): return [ - ('use_llvm', 'Use llvm compiler', 'no'), - ('use_static_cpp', 'link stdc++ statically', 'no'), - ('use_sanitizer', 'Use llvm compiler sanitize address', 'no'), - ('use_leak_sanitizer', 'Use llvm compiler sanitize memory leaks', 'no'), + ('use_llvm', 'Use the LLVM compiler', 'no'), + ('use_static_cpp', 'Link stdc++ statically', 'no'), + ('use_sanitizer', 'Use LLVM compiler address sanitizer', 'no'), + ('use_leak_sanitizer', 'Use LLVM compiler memory leaks sanitizer (implies use_sanitizer)', 'no'), ('use_lto', 'Use link time optimization', 'no'), - ('pulseaudio', 'Detect & Use pulseaudio', 'yes'), + ('pulseaudio', 'Detect & use pulseaudio', 'yes'), ('udev', 'Use udev for gamepad connection callbacks', 'no'), ('debug_release', 'Add debug symbols to release version', 'no'), ] @@ -80,66 +71,62 @@ def get_flags(): def configure(env): - is64 = sys.maxsize > 2**32 + ## Build type + + if (env["target"] == "release"): + env.Prepend(CCFLAGS=['-Ofast']) + if (env["debug_release"] == "yes"): + env.Prepend(CCFLAGS=['-g2']) + + elif (env["target"] == "release_debug"): + env.Prepend(CCFLAGS=['-O2', '-ffast-math', '-DDEBUG_ENABLED']) + if (env["debug_release"] == "yes"): + env.Prepend(CCFLAGS=['-g2']) + + elif (env["target"] == "debug"): + env.Prepend(CCFLAGS=['-g2', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) + + ## Architecture + is64 = sys.maxsize > 2**32 if (env["bits"] == "default"): - if (is64): - env["bits"] = "64" - else: - env["bits"] = "32" + env["bits"] = "64" if is64 else "32" + + ## Compiler configuration - env.Append(CPPPATH=['#platform/x11']) if (env["use_llvm"] == "yes"): - if 'clang++' not in env['CXX']: + if ('clang++' not in env['CXX']): env["CC"] = "clang" env["CXX"] = "clang++" env["LD"] = "clang++" env.Append(CPPFLAGS=['-DTYPED_METHOD_BIND']) - env.extra_suffix = ".llvm" - - if (env["use_sanitizer"] == "yes"): - env.Append(CCFLAGS=['-fsanitize=address', '-fno-omit-frame-pointer']) - env.Append(LINKFLAGS=['-fsanitize=address']) - env.extra_suffix += "s" + env.extra_suffix = ".llvm" + env.extra_suffix - if (env["use_leak_sanitizer"] == "yes"): + # leak sanitizer requires (address) sanitizer + if (env["use_sanitizer"] == "yes" or env["use_leak_sanitizer"] == "yes"): env.Append(CCFLAGS=['-fsanitize=address', '-fno-omit-frame-pointer']) env.Append(LINKFLAGS=['-fsanitize=address']) env.extra_suffix += "s" - - # if (env["tools"]=="no"): - # #no tools suffix - # env['OBJSUFFIX'] = ".nt"+env['OBJSUFFIX'] - # env['LIBSUFFIX'] = ".nt"+env['LIBSUFFIX'] + if (env["use_leak_sanitizer"] == "yes"): + env.Append(CCFLAGS=['-fsanitize=leak']) + env.Append(LINKFLAGS=['-fsanitize=leak']) if (env["use_lto"] == "yes"): env.Append(CCFLAGS=['-flto']) env.Append(LINKFLAGS=['-flto']) - env.Append(CCFLAGS=['-pipe']) env.Append(LINKFLAGS=['-pipe']) - if (env["target"] == "release"): - env.Prepend(CCFLAGS=['-Ofast']) - if (env["debug_release"] == "yes"): - env.Prepend(CCFLAGS=['-g2']) - - elif (env["target"] == "release_debug"): - - env.Prepend(CCFLAGS=['-O2', '-ffast-math', '-DDEBUG_ENABLED']) - if (env["debug_release"] == "yes"): - env.Prepend(CCFLAGS=['-g2']) - - elif (env["target"] == "debug"): - - env.Prepend(CCFLAGS=['-g2', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) + ## Dependencies env.ParseConfig('pkg-config x11 --cflags --libs') - env.ParseConfig('pkg-config xinerama --cflags --libs') env.ParseConfig('pkg-config xcursor --cflags --libs') + env.ParseConfig('pkg-config xinerama --cflags --libs') env.ParseConfig('pkg-config xrandr --cflags --libs') + # FIXME: Check for existence of the libs before parsing their flags with pkg-config + if (env['builtin_openssl'] == 'no'): # Currently not compatible with OpenSSL 1.1.0+ # https://github.com/godotengine/godot/issues/8624 @@ -196,47 +183,51 @@ def configure(env): if (env['builtin_libogg'] == 'no'): env.ParseConfig('pkg-config ogg --cflags --libs') - env.Append(CPPFLAGS=['-DOPENGL_ENABLED']) + if (env['builtin_libtheora'] != 'no'): + list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] + if any(platform.machine() in s for s in list_of_x86): + env["x86_libtheora_opt_gcc"] = True + + ## Flags - if os.system("pkg-config --exists alsa") == 0: + if (os.system("pkg-config --exists alsa") == 0): # 0 means found print("Enabling ALSA") env.Append(CPPFLAGS=["-DALSA_ENABLED"]) env.ParseConfig('pkg-config alsa --cflags --libs') else: print("ALSA libraries not found, disabling driver") - if (platform.system() == "Linux"): - env.Append(CPPFLAGS=["-DJOYDEV_ENABLED"]) - if (env["udev"] == "yes"): - # pkg-config returns 0 when the lib exists... - found_udev = not os.system("pkg-config --exists libudev") - - if (found_udev): - print("Enabling udev support") - env.Append(CPPFLAGS=["-DUDEV_ENABLED"]) - env.ParseConfig('pkg-config libudev --cflags --libs') - else: - print("libudev development libraries not found, disabling udev support") - if (env["pulseaudio"] == "yes"): - if not os.system("pkg-config --exists libpulse-simple"): + if (os.system("pkg-config --exists libpulse-simple") == 0): # 0 means found print("Enabling PulseAudio") env.Append(CPPFLAGS=["-DPULSEAUDIO_ENABLED"]) env.ParseConfig('pkg-config --cflags --libs libpulse-simple') else: print("PulseAudio development libraries not found, disabling driver") + if (platform.system() == "Linux"): + env.Append(CPPFLAGS=["-DJOYDEV_ENABLED"]) + + if (env["udev"] == "yes"): + if (os.system("pkg-config --exists libudev") == 0): # 0 means found + print("Enabling udev support") + env.Append(CPPFLAGS=["-DUDEV_ENABLED"]) + env.ParseConfig('pkg-config libudev --cflags --libs') + else: + print("libudev development libraries not found, disabling udev support") + + # Linkflags below this line should typically stay the last ones if (env['builtin_zlib'] == 'no'): env.ParseConfig('pkg-config zlib --cflags --libs') - env.Append(CPPFLAGS=['-DX11_ENABLED', '-DUNIX_ENABLED', '-DGLES2_ENABLED', '-DGLES_OVER_GL']) + env.Append(CPPPATH=['#platform/x11']) + env.Append(CPPFLAGS=['-DX11_ENABLED', '-DUNIX_ENABLED', '-DOPENGL_ENABLED', '-DGLES2_ENABLED', '-DGLES_OVER_GL']) env.Append(LIBS=['GL', 'pthread']) if (platform.system() == "Linux"): env.Append(LIBS=['dl']) - # env.Append(CPPFLAGS=['-DMPC_FIXED_POINT']) - # host compiler is default.. + ## Cross-compilation if (is64 and env["bits"] == "32"): env.Append(CPPFLAGS=['-m32']) @@ -245,17 +236,5 @@ def configure(env): env.Append(CPPFLAGS=['-m64']) env.Append(LINKFLAGS=['-m64', '-L/usr/lib/i686-linux-gnu']) - import methods - - # FIXME: Commented out when moving to gles3 - #env.Append(BUILDERS={'GLSL120': env.Builder(action=methods.build_legacygl_headers, suffix='glsl.h', src_suffix='.glsl')}) - #env.Append(BUILDERS={'GLSL': env.Builder(action=methods.build_glsl_headers, suffix='glsl.h', src_suffix='.glsl')}) - #env.Append(BUILDERS={'GLSL120GLES': env.Builder(action=methods.build_gles2_headers, suffix='glsl.h', src_suffix='.glsl')}) - #env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } ) - if (env["use_static_cpp"] == "yes"): env.Append(LINKFLAGS=['-static-libstdc++']) - - list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] - if any(platform.machine() in s for s in list_of_x86): - env["x86_libtheora_opt_gcc"] = True |