2014-02-10 01:10:30 +00:00
import os
2016-04-02 18:26:12 +00:00
import sys
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 " Server "
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:28:28 +00:00
return True # 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 ' ) ,
( ' force_32_bits ' , ' Force 32 bits binary ' , ' no ' )
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-04-02 18:26:12 +00:00
2014-02-10 01:10:30 +00:00
def configure ( env ) :
2016-11-02 21:26:55 +00:00
env . Append ( CPPPATH = [ ' #platform/server ' ] )
2016-11-02 21:28:28 +00:00
if ( env [ " use_llvm " ] == " yes " ) :
env [ " CC " ] = " clang "
env [ " CXX " ] = " clang++ "
env [ " LD " ] = " clang++ "
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
gcc_major = subprocess . check_output ( [ ' gcc ' , ' -dumpversion ' ] ) [ 0 ] . split ( ) [ 0 ]
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 )
2014-02-10 01:10:30 +00:00
2016-11-02 21:28:28 +00:00
is64 = sys . maxsize > 2 * * 32
2014-02-10 01:10:30 +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-02-10 01:10:30 +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
2016-11-02 21:28:28 +00:00
if ( env [ " target " ] == " release " ) :
2014-10-07 04:31:49 +00:00
2016-11-02 21:28:28 +00:00
env . Append ( CCFLAGS = [ ' -O2 ' , ' -ffast-math ' , ' -fomit-frame-pointer ' ] )
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
2016-11-02 21:28:28 +00:00
env . Append ( CCFLAGS = [ ' -O2 ' , ' -ffast-math ' , ' -DDEBUG_ENABLED ' ] )
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 . Append ( CCFLAGS = [ ' -g2 ' , ' -DDEBUG_ENABLED ' , ' -DDEBUG_MEMORY_ENABLED ' ] )
2014-02-10 01:10:30 +00:00
2016-11-03 21:53:18 +00:00
# Shared libraries, when requested
if ( env [ ' builtin_openssl ' ] == ' no ' ) :
env . ParseConfig ( ' pkg-config openssl --cflags --libs ' )
if ( env [ ' builtin_libwebp ' ] == ' no ' ) :
env . ParseConfig ( ' pkg-config libwebp --cflags --libs ' )
if ( env [ ' builtin_freetype ' ] == ' no ' ) :
env . ParseConfig ( ' pkg-config freetype2 --cflags --libs ' )
if ( env [ ' builtin_libpng ' ] == ' no ' ) :
2016-11-19 12:38:46 +00:00
env . ParseConfig ( ' pkg-config libpng --cflags --libs ' )
2016-11-03 21:53:18 +00:00
# Sound and video libraries
# Keep the order as it triggers chained dependencies (ogg needed by others, etc.)
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
env . ParseConfig ( ' pkg-config theora theoradec --cflags --libs ' )
if ( env [ ' builtin_libvorbis ' ] == ' no ' ) :
env [ ' builtin_libogg ' ] = ' no ' # Needed to link against system libvorbis
env . ParseConfig ( ' pkg-config vorbis vorbisfile --cflags --libs ' )
if ( env [ ' builtin_opus ' ] == ' no ' ) :
env [ ' builtin_libogg ' ] = ' no ' # Needed to link against system opus
env . ParseConfig ( ' pkg-config opus opusfile --cflags --libs ' )
if ( env [ ' builtin_libogg ' ] == ' no ' ) :
env . ParseConfig ( ' pkg-config ogg --cflags --libs ' )
2016-11-02 21:28:28 +00:00
env . Append ( CPPFLAGS = [ ' -DSERVER_ENABLED ' , ' -DUNIX_ENABLED ' ] )
env . Append ( LIBS = [ ' pthread ' , ' z ' ] ) # TODO detect linux/BSD!
2014-02-10 01:10:30 +00:00
2016-11-02 21:28:28 +00:00
if ( env [ " CXX " ] == " clang++ " ) :
2016-11-02 21:26:55 +00:00
env . Append ( CPPFLAGS = [ ' -DTYPED_METHOD_BIND ' ] )
2016-11-02 21:28:28 +00:00
env [ " CC " ] = " clang "
env [ " LD " ] = " clang++ "