2014-02-10 01:10:30 +00:00
import os
2016-04-02 18:26:12 +00:00
import sys
2014-11-19 21:09:39 +00:00
import platform
2014-02-10 01:10:30 +00:00
def is_active ( ) :
2016-11-02 21:26:55 +00:00
return True
2016-04-02 18:26:12 +00:00
2016-11-02 21:29:36 +00:00
2014-02-10 01:10:30 +00:00
def get_name ( ) :
2016-11-02 21:26:55 +00:00
return " X11 "
2014-02-10 01:10:30 +00:00
def can_build ( ) :
2016-11-02 21:28:28 +00:00
if ( os . name != " posix " ) :
2016-11-02 21:26:55 +00:00
return False
2014-02-10 01:10:30 +00:00
2016-11-02 21:26:55 +00:00
if sys . platform == " darwin " :
2016-11-02 21:28:28 +00:00
return False # no x11 on mac for now
2014-02-10 01:10:30 +00:00
2017-07-30 22:14:04 +00:00
x11_error = os . system ( " pkg-config --version > /dev/null " )
if ( x11_error ) :
2016-11-02 21:26:55 +00:00
print ( " pkg-config not found.. x11 disabled. " )
return False
2016-04-02 18:26:12 +00:00
2016-11-02 21:28:28 +00:00
x11_error = os . system ( " pkg-config x11 --modversion > /dev/null " )
2016-11-02 21:26:55 +00:00
if ( x11_error ) :
print ( " X11 not found.. x11 disabled. " )
return False
2014-02-10 01:10:30 +00:00
2016-11-02 21:28:28 +00:00
x11_error = os . system ( " pkg-config xcursor --modversion > /dev/null " )
2016-11-02 21:26:55 +00:00
if ( x11_error ) :
print ( " xcursor not found.. x11 disabled. " )
return False
2016-04-02 18:26:12 +00:00
2016-11-02 21:28:28 +00:00
x11_error = os . system ( " pkg-config xinerama --modversion > /dev/null " )
2016-11-02 21:26:55 +00:00
if ( x11_error ) :
print ( " xinerama not found.. x11 disabled. " )
return False
2014-04-29 00:56:43 +00:00
2016-11-02 21:28:28 +00:00
x11_error = os . system ( " pkg-config xrandr --modversion > /dev/null " )
2016-11-02 21:26:55 +00:00
if ( x11_error ) :
print ( " xrandr not found.. x11 disabled. " )
return False
2016-06-09 16:54:06 +00:00
2016-11-02 21:28:28 +00:00
return True # X11 enabled
2016-04-02 18:26:12 +00:00
2016-11-02 21:29:36 +00:00
2014-02-10 01:10:30 +00:00
def get_opts ( ) :
2016-11-02 21:26:55 +00:00
return [
2016-11-02 21:28:28 +00:00
( ' use_llvm ' , ' Use llvm compiler ' , ' no ' ) ,
2018-02-16 17:24:46 +00:00
( ' use_static_cpp ' , ' Link libgcc and libstdc++ statically for better portability ' , ' no ' ) ,
2016-11-02 21:28:28 +00:00
( ' use_sanitizer ' , ' Use llvm compiler sanitize address ' , ' no ' ) ,
( ' use_leak_sanitizer ' , ' Use llvm compiler sanitize memory leaks ' , ' no ' ) ,
2017-01-25 18:40:54 +00:00
( ' use_lto ' , ' Use link time optimization ' , ' no ' ) ,
2016-11-02 21:28:28 +00:00
( ' pulseaudio ' , ' Detect & Use pulseaudio ' , ' yes ' ) ,
( ' udev ' , ' Use udev for gamepad connection callbacks ' , ' no ' ) ,
( ' debug_release ' , ' Add debug symbols to release version ' , ' no ' ) ,
2017-11-29 20:01:20 +00:00
( ' touch ' , ' Enable touch events ' , ' yes ' ) ,
2016-11-02 21:26:55 +00:00
]
2016-04-02 18:26:12 +00:00
2016-11-02 21:29:36 +00:00
2014-02-10 01:10:30 +00:00
def get_flags ( ) :
2016-11-02 21:26:55 +00:00
return [
2016-11-02 23:23:55 +00:00
( ' builtin_freetype ' , ' no ' ) ,
( ' builtin_libpng ' , ' no ' ) ,
( ' builtin_openssl ' , ' no ' ) ,
( ' builtin_zlib ' , ' no ' ) ,
2016-11-02 21:26:55 +00:00
]
2016-04-02 18:26:12 +00:00
2014-02-10 01:10:30 +00:00
def configure ( env ) :
2016-11-02 21:28:28 +00:00
is64 = sys . maxsize > 2 * * 32
2014-10-07 04:31:49 +00:00
2016-11-02 21:28:28 +00:00
if ( env [ " bits " ] == " default " ) :
2016-11-02 21:26:55 +00:00
if ( is64 ) :
2016-11-02 21:28:28 +00:00
env [ " bits " ] = " 64 "
2016-11-02 21:26:55 +00:00
else :
2016-11-02 21:28:28 +00:00
env [ " bits " ] = " 32 "
2014-10-07 04:31:49 +00:00
2016-11-02 21:26:55 +00:00
env . Append ( CPPPATH = [ ' #platform/x11 ' ] )
2016-11-02 21:28:28 +00:00
if ( env [ " use_llvm " ] == " yes " ) :
2016-11-02 21:26:55 +00:00
if ' clang++ ' not in env [ ' CXX ' ] :
2016-11-02 21:28:28 +00:00
env [ " CC " ] = " clang "
env [ " CXX " ] = " clang++ "
env [ " LD " ] = " clang++ "
2016-11-02 21:26:55 +00:00
env . Append ( CPPFLAGS = [ ' -DTYPED_METHOD_BIND ' ] )
2016-11-02 21:28:28 +00:00
env . extra_suffix = " .llvm "
2017-08-27 09:10:37 +00:00
elif ( os . system ( " gcc --version > /dev/null 2>&1 " ) == 0 ) : # GCC
# Hack to prevent building this branch with GCC 6+, which trigger segfaults due to UB when dereferencing pointers in Object::cast_to
# This is fixed in the master branch, for 2.1 we just prevent using too recent GCC versions.
import subprocess
2019-06-03 14:26:13 +00:00
gcc_major = subprocess . check_output ( [ ' gcc ' , ' -dumpversion ' ] ) . decode ( ' ascii ' ) . split ( ' . ' ) [ 0 ]
2017-08-27 09:10:37 +00:00
if ( int ( gcc_major ) > 5 ) :
print ( " Your configured compiler appears to be GCC %s , which triggers issues in release builds for this version of Godot (fixed in Godot 3.0+). " % gcc_major )
print ( " You can use the Clang compiler instead with the `use_llvm=yes` option, or configure another compiler such as GCC 5 using the CC, CXX and LD flags. " )
print ( " Aborting.. " )
sys . exit ( 255 )
2015-01-27 10:10:17 +00:00
2016-11-02 21:28:28 +00:00
if ( env [ " use_sanitizer " ] == " yes " ) :
2017-01-25 18:40:54 +00:00
env . Append ( CCFLAGS = [ ' -fsanitize=address ' , ' -fno-omit-frame-pointer ' ] )
2016-11-02 21:26:55 +00:00
env . Append ( LINKFLAGS = [ ' -fsanitize=address ' ] )
2016-11-02 21:28:28 +00:00
env . extra_suffix + = " s "
2014-02-10 01:10:30 +00:00
2016-11-02 21:28:28 +00:00
if ( env [ " use_leak_sanitizer " ] == " yes " ) :
2017-01-25 18:40:54 +00:00
env . Append ( CCFLAGS = [ ' -fsanitize=address ' , ' -fno-omit-frame-pointer ' ] )
2016-11-02 21:26:55 +00:00
env . Append ( LINKFLAGS = [ ' -fsanitize=address ' ] )
2016-11-02 21:28:28 +00:00
env . extra_suffix + = " s "
2015-04-20 22:38:02 +00:00
2016-11-02 21:28:28 +00:00
# if (env["tools"]=="no"):
2016-11-02 21:26:55 +00:00
# #no tools suffix
# env['OBJSUFFIX'] = ".nt"+env['OBJSUFFIX']
# env['LIBSUFFIX'] = ".nt"+env['LIBSUFFIX']
2014-02-10 01:10:30 +00:00
2017-01-25 18:40:54 +00:00
if ( env [ " use_lto " ] == " yes " ) :
env . Append ( CCFLAGS = [ ' -flto ' ] )
env . Append ( LINKFLAGS = [ ' -flto ' ] )
env . Append ( CCFLAGS = [ ' -pipe ' ] )
env . Append ( LINKFLAGS = [ ' -pipe ' ] )
2015-05-22 20:14:16 +00:00
2017-01-25 18:40:54 +00:00
if ( env [ " target " ] == " release " ) :
env . Prepend ( CCFLAGS = [ ' -Ofast ' ] )
2016-11-02 21:28:28 +00:00
if ( env [ " debug_release " ] == " yes " ) :
2017-01-25 18:40:54 +00:00
env . Prepend ( CCFLAGS = [ ' -g2 ' ] )
2014-02-10 01:10:30 +00:00
2016-11-02 21:28:28 +00:00
elif ( env [ " target " ] == " release_debug " ) :
2014-02-10 01:10:30 +00:00
2017-01-25 18:40:54 +00:00
env . Prepend ( CCFLAGS = [ ' -O2 ' , ' -ffast-math ' , ' -DDEBUG_ENABLED ' ] )
2016-11-02 21:28:28 +00:00
if ( env [ " debug_release " ] == " yes " ) :
2017-01-25 18:40:54 +00:00
env . Prepend ( CCFLAGS = [ ' -g2 ' ] )
2014-02-10 01:10:30 +00:00
2016-11-02 21:28:28 +00:00
elif ( env [ " target " ] == " debug " ) :
2014-02-10 01:10:30 +00:00
2017-03-25 07:36:00 +00:00
env . Prepend ( CCFLAGS = [ ' -g2 ' , ' -DDEBUG_ENABLED ' , ' -DDEBUG_MEMORY_ENABLED ' ] )
2017-08-04 00:07:16 +00:00
env . Append ( LINKFLAGS = [ ' -rdynamic ' ] )
2014-02-10 01:10:30 +00:00
2016-11-02 21:26:55 +00:00
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 xrandr --cflags --libs ' )
2015-08-23 23:54:13 +00:00
2017-11-29 20:01:20 +00:00
if ( env [ ' touch ' ] == ' yes ' ) :
x11_error = os . system ( " pkg-config xi --modversion > /dev/null " )
if ( x11_error ) :
print ( " xi not found.. cannot build with touch. Aborting. " )
sys . exit ( 255 )
env . ParseConfig ( ' pkg-config xi --cflags --libs ' )
env . Append ( CPPFLAGS = [ ' -DTOUCH_ENABLED ' ] )
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_openssl ' ] == ' no ' ) :
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config openssl --cflags --libs ' )
2014-02-10 01:10:30 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_libwebp ' ] == ' no ' ) :
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config libwebp --cflags --libs ' )
2016-10-11 21:35:58 +00:00
2017-01-08 16:13:30 +00:00
# freetype depends on libpng and zlib, so bundling one of them while keeping others
# as shared libraries leads to weird issues
if ( env [ ' builtin_freetype ' ] == ' yes ' or env [ ' builtin_libpng ' ] == ' yes ' or env [ ' builtin_zlib ' ] == ' yes ' ) :
env [ ' builtin_freetype ' ] = ' yes '
env [ ' builtin_libpng ' ] = ' yes '
env [ ' builtin_zlib ' ] = ' yes '
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_freetype ' ] == ' no ' ) :
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config freetype2 --cflags --libs ' )
2015-09-11 00:40:34 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_libpng ' ] == ' no ' ) :
2016-11-19 12:38:46 +00:00
env . ParseConfig ( ' pkg-config libpng --cflags --libs ' )
2014-02-10 01:10:30 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_squish ' ] == ' no ' and env [ " tools " ] == " yes " ) :
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config libsquish --cflags --libs ' )
2016-10-13 19:48:06 +00:00
2016-11-02 21:26:55 +00:00
# Sound and video libraries
# Keep the order as it triggers chained dependencies (ogg needed by others, etc.)
2016-10-13 17:40:40 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_libtheora ' ] == ' no ' ) :
env [ ' builtin_libogg ' ] = ' no ' # Needed to link against system libtheora
env [ ' builtin_libvorbis ' ] = ' no ' # Needed to link against system libtheora
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config theora theoradec --cflags --libs ' )
2016-10-12 18:37:38 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_libvorbis ' ] == ' no ' ) :
env [ ' builtin_libogg ' ] = ' no ' # Needed to link against system libvorbis
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config vorbis vorbisfile --cflags --libs ' )
2016-10-12 18:37:38 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_opus ' ] == ' no ' ) :
env [ ' builtin_libogg ' ] = ' no ' # Needed to link against system opus
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config opus opusfile --cflags --libs ' )
2016-10-13 17:40:40 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_libogg ' ] == ' no ' ) :
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config ogg --cflags --libs ' )
2016-10-12 18:37:38 +00:00
2016-11-02 21:26:55 +00:00
env . Append ( CPPFLAGS = [ ' -DOPENGL_ENABLED ' ] )
2016-01-10 16:24:23 +00:00
2016-11-02 23:23:55 +00:00
if ( env [ ' builtin_glew ' ] == ' no ' ) :
2016-11-02 21:26:55 +00:00
env . ParseConfig ( ' pkg-config glew --cflags --libs ' )
2016-10-14 06:27:59 +00:00
2016-11-02 21:28:28 +00:00
if os . system ( " pkg-config --exists alsa " ) == 0 :
2016-11-02 21:26:55 +00:00
print ( " Enabling ALSA " )
env . Append ( CPPFLAGS = [ " -DALSA_ENABLED " ] )
env . ParseConfig ( ' pkg-config alsa --cflags --libs ' )
else :
print ( " ALSA libraries not found, disabling driver " )
2015-12-21 21:39:03 +00:00
2016-11-02 21:26:55 +00:00
if ( platform . system ( ) == " Linux " ) :
env . Append ( CPPFLAGS = [ " -DJOYDEV_ENABLED " ] )
2016-11-02 21:28:28 +00:00
if ( env [ " udev " ] == " yes " ) :
2016-11-02 21:26:55 +00:00
# pkg-config returns 0 when the lib exists...
found_udev = not os . system ( " pkg-config --exists libudev " )
2016-02-14 14:13:11 +00:00
2016-11-02 21:26:55 +00:00
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 " )
2015-11-19 23:05:26 +00:00
2016-11-02 21:28:28 +00:00
if ( env [ " pulseaudio " ] == " yes " ) :
2016-11-02 21:26:55 +00:00
if not os . system ( " pkg-config --exists libpulse-simple " ) :
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 " )
2014-12-19 12:44:34 +00:00
2017-01-08 16:13:30 +00:00
if ( env [ ' builtin_zlib ' ] == ' no ' ) :
env . ParseConfig ( ' pkg-config zlib --cflags --libs ' )
2016-11-02 21:28:28 +00:00
env . Append ( CPPFLAGS = [ ' -DX11_ENABLED ' , ' -DUNIX_ENABLED ' , ' -DGLES2_ENABLED ' , ' -DGLES_OVER_GL ' ] )
2017-01-08 16:13:30 +00:00
env . Append ( LIBS = [ ' GL ' , ' pthread ' ] )
2016-11-02 21:26:55 +00:00
if ( platform . system ( ) == " Linux " ) :
2017-01-08 16:13:30 +00:00
env . Append ( LIBS = [ ' dl ' ] )
2016-11-02 21:28:28 +00:00
# env.Append(CPPFLAGS=['-DMPC_FIXED_POINT'])
2014-10-07 04:31:49 +00:00
2017-03-25 07:36:00 +00:00
# host compiler is default..
2014-10-07 04:31:49 +00:00
2016-11-02 21:28:28 +00:00
if ( is64 and env [ " bits " ] == " 32 " ) :
2016-11-02 21:26:55 +00:00
env . Append ( CPPFLAGS = [ ' -m32 ' ] )
2016-11-02 21:28:28 +00:00
env . Append ( LINKFLAGS = [ ' -m32 ' , ' -L/usr/lib/i386-linux-gnu ' ] )
elif ( not is64 and env [ " bits " ] == " 64 " ) :
2016-11-02 21:26:55 +00:00
env . Append ( CPPFLAGS = [ ' -m64 ' ] )
2016-11-02 21:28:28 +00:00
env . Append ( LINKFLAGS = [ ' -m64 ' , ' -L/usr/lib/i686-linux-gnu ' ] )
2014-02-26 17:25:42 +00:00
2016-11-02 21:26:55 +00:00
import methods
2014-02-10 01:10:30 +00:00
2017-06-25 12:26:24 +00:00
env . Append ( BUILDERS = { ' GLSL120 ' : env . Builder ( action = methods . build_legacygl_headers , suffix = ' glsl.gen.h ' , src_suffix = ' .glsl ' ) } )
env . Append ( BUILDERS = { ' GLSL ' : env . Builder ( action = methods . build_glsl_headers , suffix = ' glsl.gen.h ' , src_suffix = ' .glsl ' ) } )
env . Append ( BUILDERS = { ' GLSL120GLES ' : env . Builder ( action = methods . build_gles2_headers , suffix = ' glsl.gen.h ' , src_suffix = ' .glsl ' ) } )
#env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.gen.h',src_suffix = '.hlsl') } )
2014-02-10 01:10:30 +00:00
2018-02-16 17:24:46 +00:00
# Link those statically for portability
2016-11-02 21:28:28 +00:00
if ( env [ " use_static_cpp " ] == " yes " ) :
2018-02-16 17:24:46 +00:00
env . Append ( LINKFLAGS = [ ' -static-libgcc ' , ' -static-libstdc++ ' ] )
2016-02-04 23:47:19 +00:00
2016-11-02 21:26:55 +00:00
list_of_x86 = [ ' x86_64 ' , ' x86 ' , ' i386 ' , ' i586 ' ]
if any ( platform . machine ( ) in s for s in list_of_x86 ) :
2016-11-02 21:28:28 +00:00
env [ " x86_libtheora_opt_gcc " ] = True