2014-02-10 02:10:30 +01:00
import os
import sys
def is_active ( ) :
return True
2014-05-01 14:53:37 +02:00
2014-02-10 02:10:30 +01:00
def get_name ( ) :
return " iOS "
def can_build ( ) :
import sys
2015-09-09 21:57:49 +02:00
import os
if sys . platform == ' darwin ' or os . environ . has_key ( " OSXCROSS_IOS " ) :
2014-02-10 02:10:30 +01:00
return True
return False
def get_opts ( ) :
return [
( ' IPHONEPLATFORM ' , ' name of the iphone platform ' , ' iPhoneOS ' ) ,
( ' IPHONEPATH ' , ' the path to iphone toolchain ' , ' /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain ' ) ,
2016-06-22 09:00:04 +02:00
( ' IPHONESDK ' , ' path to the iphone SDK ' , ' /Applications/Xcode.app/Contents/Developer/Platforms/$ {IPHONEPLATFORM} .platform/Developer/SDKs/$ {IPHONEPLATFORM} .sdk/ ' ) ,
2014-02-10 02:10:30 +01:00
( ' game_center ' , ' Support for game center ' , ' yes ' ) ,
( ' store_kit ' , ' Support for in-app store ' , ' yes ' ) ,
2015-09-28 02:21:32 +02:00
( ' icloud ' , ' Support for iCloud ' , ' yes ' ) ,
2014-02-10 02:10:30 +01:00
( ' ios_gles22_override ' , ' Force GLES2.0 on iOS ' , ' yes ' ) ,
( ' ios_appirater ' , ' Enable Appirater ' , ' no ' ) ,
2014-09-15 16:33:30 +02:00
( ' ios_exceptions ' , ' Use exceptions when compiling on playbook ' , ' yes ' ) ,
2015-09-09 21:57:49 +02:00
( ' ios_triple ' , ' Triple for ios toolchain ' , ' ' ) ,
2016-06-22 09:00:04 +02:00
( ' ios_sim ' , ' Build simulator binary ' , ' no ' ) ,
2014-02-10 02:10:30 +01:00
]
def get_flags ( ) :
return [
2014-08-02 04:35:36 +02:00
( ' tools ' , ' no ' ) ,
2014-02-10 02:10:30 +01:00
( ' webp ' , ' yes ' ) ,
2016-10-14 18:58:24 +02:00
( ' builtin_zlib ' , ' yes ' ) ,
2014-05-24 06:35:47 +02:00
( ' openssl ' , ' builtin ' ) , #use builtin openssl
2014-02-10 02:10:30 +01:00
]
def configure ( env ) :
2016-06-22 09:00:04 +02:00
env . Append ( CPPPATH = [ ' #platform/iphone ' ] )
2014-02-10 02:10:30 +01:00
env [ ' ENV ' ] [ ' PATH ' ] = env [ ' IPHONEPATH ' ] + " /Developer/usr/bin/: " + env [ ' ENV ' ] [ ' PATH ' ]
2015-09-09 21:57:49 +02:00
env [ ' CC ' ] = ' $IPHONEPATH/usr/bin/$ {ios_triple} clang '
env [ ' CXX ' ] = ' $IPHONEPATH/usr/bin/$ {ios_triple} clang++ '
env [ ' AR ' ] = ' $IPHONEPATH/usr/bin/$ {ios_triple} ar '
env [ ' RANLIB ' ] = ' $IPHONEPATH/usr/bin/$ {ios_triple} ranlib '
2014-02-10 02:10:30 +01:00
import string
2016-06-22 21:15:05 +02:00
if ( env [ " ios_sim " ] == " yes " or env [ " arch " ] == " x86 " ) : # i386, simulator
env [ " arch " ] = " x86 "
env [ " bits " ] = " 32 "
2016-06-22 09:00:04 +02:00
env [ ' CCFLAGS ' ] = string . split ( ' -arch i386 -fobjc-abi-version=2 -fobjc-legacy-dispatch -fmessage-length=0 -fpascal-strings -fasm-blocks -Wall -D__IPHONE_OS_VERSION_MIN_REQUIRED=40100 -isysroot $IPHONESDK -mios-simulator-version-min=4.3 -DCUSTOM_MATRIX_TRANSFORM_H= \\ \" build/iphone/matrix4_iphone.h \\ \" -DCUSTOM_VECTOR3_TRANSFORM_H= \\ \" build/iphone/vector3_iphone.h \\ \" ' )
2016-06-22 21:15:05 +02:00
elif ( env [ " arch " ] == " arm64 " ) : # arm64
env [ " bits " ] = " 64 "
2015-12-23 15:16:12 +01:00
env [ ' CCFLAGS ' ] = string . split ( ' -fno-objc-arc -arch arm64 -fmessage-length=0 -fno-strict-aliasing -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits -Wno-trigraphs -fpascal-strings -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -Wno-shorten-64-to-32 -fvisibility=hidden -Wno-sign-conversion -MMD -MT dependencies -miphoneos-version-min=5.1.1 -isysroot $IPHONESDK ' )
2015-01-03 20:52:37 +01:00
env . Append ( CPPFLAGS = [ ' -DNEED_LONG_INT ' ] )
env . Append ( CPPFLAGS = [ ' -DLIBYUV_DISABLE_NEON ' ] )
2016-06-22 09:00:04 +02:00
else : # armv7
2016-06-22 21:15:05 +02:00
env [ " arch " ] = " arm "
env [ " bits " ] = " 32 "
2015-12-23 15:16:12 +01:00
env [ ' CCFLAGS ' ] = string . split ( ' -fno-objc-arc -arch armv7 -fmessage-length=0 -fno-strict-aliasing -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits -Wno-trigraphs -fpascal-strings -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -Wno-shorten-64-to-32 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -fvisibility=hidden -Wno-sign-conversion -mthumb " -DIBOutlet=__attribute__((iboutlet)) " " -DIBOutletCollection(ClassName)=__attribute__((iboutletcollection(ClassName))) " " -DIBAction=void)__attribute__((ibaction) " -miphoneos-version-min=5.1.1 -MMD -MT dependencies -isysroot $IPHONESDK ' )
2014-02-10 02:10:30 +01:00
2016-06-22 21:15:05 +02:00
if ( env [ " arch " ] == " x86 " ) :
env [ ' IPHONEPLATFORM ' ] = ' iPhoneSimulator '
2016-06-22 09:00:04 +02:00
env . Append ( LINKFLAGS = [ ' -arch ' , ' i386 ' , ' -mios-simulator-version-min=4.3 ' ,
' -isysroot ' , ' $IPHONESDK ' ,
#'-mmacosx-version-min=10.6',
' -Xlinker ' ,
' -objc_abi_version ' ,
' -Xlinker ' , ' 2 ' ,
' -framework ' , ' AudioToolbox ' ,
' -framework ' , ' AVFoundation ' ,
' -framework ' , ' CoreAudio ' ,
' -framework ' , ' CoreGraphics ' ,
' -framework ' , ' CoreMedia ' ,
' -framework ' , ' Foundation ' ,
' -framework ' , ' Security ' ,
' -framework ' , ' UIKit ' ,
' -framework ' , ' MediaPlayer ' ,
' -framework ' , ' OpenGLES ' ,
' -framework ' , ' QuartzCore ' ,
' -framework ' , ' SystemConfiguration ' ,
' -F$IPHONESDK ' ,
] )
2016-06-22 21:15:05 +02:00
elif ( env [ " arch " ] == " arm64 " ) :
2015-01-03 20:52:37 +01:00
env . Append ( LINKFLAGS = [ ' -arch ' , ' arm64 ' , ' -Wl,-dead_strip ' , ' -miphoneos-version-min=5.1.1 ' ,
' -isysroot ' , ' $IPHONESDK ' ,
#'-stdlib=libc++',
' -framework ' , ' Foundation ' ,
' -framework ' , ' UIKit ' ,
' -framework ' , ' CoreGraphics ' ,
' -framework ' , ' OpenGLES ' ,
' -framework ' , ' QuartzCore ' ,
' -framework ' , ' CoreAudio ' ,
' -framework ' , ' AudioToolbox ' ,
' -framework ' , ' SystemConfiguration ' ,
' -framework ' , ' Security ' ,
#'-framework', 'AdSupport',
' -framework ' , ' MediaPlayer ' ,
' -framework ' , ' AVFoundation ' ,
' -framework ' , ' CoreMedia ' ,
] )
else :
2015-09-04 04:24:55 +02:00
env . Append ( LINKFLAGS = [ ' -arch ' , ' armv7 ' , ' -Wl,-dead_strip ' , ' -miphoneos-version-min=5.1.1 ' ,
2014-02-10 02:10:30 +01:00
' -isysroot ' , ' $IPHONESDK ' ,
' -framework ' , ' Foundation ' ,
' -framework ' , ' UIKit ' ,
' -framework ' , ' CoreGraphics ' ,
' -framework ' , ' OpenGLES ' ,
' -framework ' , ' QuartzCore ' ,
' -framework ' , ' CoreAudio ' ,
' -framework ' , ' AudioToolbox ' ,
' -framework ' , ' SystemConfiguration ' ,
' -framework ' , ' Security ' ,
2014-05-24 06:35:47 +02:00
#'-framework', 'AdSupport',
2014-03-14 02:57:24 +01:00
' -framework ' , ' MediaPlayer ' ,
2014-11-17 11:46:11 +01:00
' -framework ' , ' AVFoundation ' ,
2014-11-26 18:24:13 +01:00
' -framework ' , ' CoreMedia ' ,
2014-02-10 02:10:30 +01:00
] )
if env [ ' game_center ' ] == ' yes ' :
env . Append ( CPPFLAGS = [ ' -fblocks ' , ' -DGAME_CENTER_ENABLED ' ] )
env . Append ( LINKFLAGS = [ ' -framework ' , ' GameKit ' ] )
if env [ ' store_kit ' ] == ' yes ' :
env . Append ( CPPFLAGS = [ ' -DSTOREKIT_ENABLED ' ] )
env . Append ( LINKFLAGS = [ ' -framework ' , ' StoreKit ' ] )
2016-04-02 20:26:12 +02:00
2015-09-28 01:54:20 +02:00
if env [ ' icloud ' ] == ' yes ' :
env . Append ( CPPFLAGS = [ ' -DICLOUD_ENABLED ' ] )
2014-02-10 02:10:30 +01:00
env . Append ( CPPPATH = [ ' $IPHONESDK/usr/include ' , ' $IPHONESDK/System/Library/Frameworks/OpenGLES.framework/Headers ' , ' $IPHONESDK/System/Library/Frameworks/AudioUnit.framework/Headers ' ] )
if ( env [ " target " ] == " release " ) :
2015-12-23 15:16:12 +01:00
env . Append ( CCFLAGS = [ ' -O3 ' , ' -DNS_BLOCK_ASSERTIONS=1 ' , ' -Wall ' , ' -gdwarf-2 ' ] ) # removed -ffast-math
2016-04-02 20:26:12 +02:00
env . Append ( LINKFLAGS = [ ' -O3 ' ] ) #
2014-02-10 02:10:30 +01:00
2014-08-02 03:10:38 +02:00
elif env [ " target " ] == " release_debug " :
2015-12-23 15:16:12 +01:00
env . Append ( CCFLAGS = [ ' -Os ' , ' -DNS_BLOCK_ASSERTIONS=1 ' , ' -Wall ' , ' -DDEBUG_ENABLED ' ] )
env . Append ( LINKFLAGS = [ ' -Os ' ] )
2014-08-02 04:35:36 +02:00
env . Append ( CPPFLAGS = [ ' -DDEBUG_MEMORY_ENABLED ' ] )
2014-08-02 03:10:38 +02:00
2014-02-10 02:10:30 +01:00
elif ( env [ " target " ] == " debug " ) :
env . Append ( CCFLAGS = [ ' -D_DEBUG ' , ' -DDEBUG=1 ' , ' -gdwarf-2 ' , ' -Wall ' , ' -O0 ' , ' -DDEBUG_ENABLED ' ] )
2014-08-02 04:35:36 +02:00
env . Append ( CPPFLAGS = [ ' -DDEBUG_MEMORY_ENABLED ' ] )
2014-02-10 02:10:30 +01:00
elif ( env [ " target " ] == " profile " ) :
2015-12-23 15:16:12 +01:00
env . Append ( CCFLAGS = [ ' -g ' , ' -pg ' , ' -Os ' ] )
2014-02-10 02:10:30 +01:00
env . Append ( LINKFLAGS = [ ' -pg ' ] )
2016-06-22 09:00:04 +02:00
if ( env [ " ios_sim " ] == " yes " ) : #TODO: Check if needed?
env [ ' ENV ' ] [ ' MACOSX_DEPLOYMENT_TARGET ' ] = ' 10.6 '
2014-02-10 02:10:30 +01:00
env [ ' ENV ' ] [ ' CODESIGN_ALLOCATE ' ] = ' /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate '
2015-01-10 21:35:26 +01:00
env . Append ( CPPFLAGS = [ ' -DIPHONE_ENABLED ' , ' -DUNIX_ENABLED ' , ' -DGLES2_ENABLED ' , ' -DMPC_FIXED_POINT ' ] )
2015-10-02 19:20:50 +02:00
2016-10-12 20:37:38 +02:00
# TODO: Move that to opus module's config
if ( " module_opus_enabled " in env and env [ " module_opus_enabled " ] != " no " ) :
2015-10-02 19:20:50 +02:00
env . opus_fixed_point = " yes "
2016-06-22 21:15:05 +02:00
if env [ " arch " ] == " x86 " :
pass
elif ( env [ " arch " ] == " arm64 " ) :
2015-10-02 19:20:50 +02:00
env . Append ( CFLAGS = [ " -DOPUS_ARM64_OPT " ] )
else :
env . Append ( CFLAGS = [ " -DOPUS_ARM_OPT " ] )
2014-02-10 02:10:30 +01:00
if env [ ' ios_exceptions ' ] == ' yes ' :
env . Append ( CPPFLAGS = [ ' -fexceptions ' ] )
else :
env . Append ( CPPFLAGS = [ ' -fno-exceptions ' ] )
#env['neon_enabled']=True
env [ ' S_compiler ' ] = ' $IPHONEPATH/Developer/usr/bin/gcc '
2016-04-02 20:26:12 +02:00
2014-10-14 05:13:54 +02:00
import methods
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 ' ) } )